From 83e88655c03443dea835efdccff615bae6012c1c Mon Sep 17 00:00:00 2001 From: Ryan Lortie Date: Thu, 29 Jan 2009 15:55:11 +0000 Subject: [PATCH] handle all possible cases of EAGAIN and EWOULDBLOCK being (un)defined and 2009-01-29 Ryan Lortie * 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 | 5 +++++ gio/gioerror.c | 22 +++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/gio/ChangeLog b/gio/ChangeLog index 778b81748..a25f173a0 100644 --- a/gio/ChangeLog +++ b/gio/ChangeLog @@ -1,3 +1,8 @@ +2009-01-29 Ryan Lortie + + * 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 Bug 568575 – _async functions for GDataInputStream diff --git a/gio/gioerror.c b/gio/gioerror.c index 22d424ba5..0419a7d06 100644 --- a/gio/gioerror.c +++ b/gio/gioerror.c @@ -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