handle all possible cases of EAGAIN and EWOULDBLOCK being (un)defined and
authorRyan Lortie <desrt@desrt.ca>
Thu, 29 Jan 2009 15:55:11 +0000 (15:55 +0000)
committerRyan Lortie <ryanl@src.gnome.org>
Thu, 29 Jan 2009 15:55:11 +0000 (15:55 +0000)
2009-01-29  Ryan Lortie  <desrt@desrt.ca>

        * gioerror.c (g_io_error_from_errno): handle all possible cases of
        EAGAIN and EWOULDBLOCK being (un)defined and (un)equal.

svn path=/trunk/; revision=7836

gio/ChangeLog
gio/gioerror.c

index 778b817..a25f173 100644 (file)
@@ -1,3 +1,8 @@
+2009-01-29  Ryan Lortie  <desrt@desrt.ca>
+
+       * gioerror.c (g_io_error_from_errno): handle all possible cases of
+       EAGAIN and EWOULDBLOCK being (un)defined and (un)equal.
+
 2009-01-28  Ryan Lortie  <desrt@desrt.ca>
 
        Bug 568575 – _async functions for GDataInputStream
index 22d424b..0419a7d 100644 (file)
@@ -162,10 +162,30 @@ g_io_error_from_errno (gint err_no)
       break;
 #endif
 
-#ifdef EWOULDBLOCK
+/* some magic to deal with EWOULDBLOCK and EAGAIN.
+ * apparently on HP-UX these are actually defined to different values,
+ * but on Linux, for example, they are the same.
+ */
+#if defined(EWOULDBLOCK) && defined(EAGAIN) && EWOULDBLOCK == EAGAIN
+    /* we have both and they are the same: only emit one case. */
+    case EAGAIN:
+      return G_IO_ERROR_WOULD_BLOCK;
+      break;
+#else
+    /* else: consider each of them separately.  this handles both the
+     * case of having only one and the case where they are different values.
+     */
+# ifdef EAGAIN
+    case EAGAIN:
+      return G_IO_ERROR_WOULD_BLOCK;
+      break;
+# endif
+
+# ifdef EWOULDBLOCK
     case EWOULDBLOCK:
       return G_IO_ERROR_WOULD_BLOCK;
       break;
+# endif
 #endif
 
 #ifdef EMFILE