On 02/18/2011 02:17 PM, Tristan Gingold wrote:
Fix compilation failure on Darwin.

Signed-off-by: Tristan Gingold<ging...@adacore.com>
---
  compatfd.c |   36 ++++++++++++++++++------------------
  1 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/compatfd.c b/compatfd.c
index a7cebc4..bd377c4 100644
--- a/compatfd.c
+++ b/compatfd.c
@@ -26,45 +26,45 @@ struct sigfd_compat_info
  static void *sigwait_compat(void *opaque)
  {
      struct sigfd_compat_info *info = opaque;
-    int err;
      sigset_t all;

      sigfillset(&all);
      sigprocmask(SIG_BLOCK,&all, NULL);

-    do {
-        siginfo_t siginfo;
+    while (1) {
+        int sig;
+        int err;

-        err = sigwaitinfo(&info->mask,&siginfo);
-        if (err == -1&&  errno == EINTR) {
-            err = 0;
-            continue;
-        }
-
-        if (err>  0) {
-            char buffer[128];
+        err = sigwait(&info->mask,&sig);
+        if (err != 0) {
+            if (errno == EINTR) {
+                continue;
+            } else {
+                return NULL;
+            }
+        } else {
+            struct qemu_signalfd_siginfo buffer;
              size_t offset = 0;

-            memcpy(buffer,&err, sizeof(err));
+            memset(&buffer, 0, sizeof(buffer));
+            buffer.ssi_signo = sig;
+
              while (offset<  sizeof(buffer)) {
                  ssize_t len;

-                len = write(info->fd, buffer + offset,
+                len = write(info->fd, (char *)&buffer + offset,
                              sizeof(buffer) - offset);
                  if (len == -1&&  errno == EINTR)
                      continue;

                  if (len<= 0) {
-                    err = -1;
-                    break;
+                    return NULL;
                  }

                  offset += len;
              }
          }
-    } while (err>= 0);
-
-    return NULL;
+    }
  }

  static int qemu_signalfd_compat(const sigset_t *mask)

Looks good.

Paolo

Reply via email to