From 7d676fb206bc3b9ad246c4e78410cb83b15aef72 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Mon, 2 Jul 2001 20:26:38 +0000 Subject: [PATCH] Fix. Mon Jul 2 16:03:21 2001 Owen Taylor * glib/giochannel.c (g_io_channel_get_buffer_condition): Fix. * glib/giunix.c: Fix prepare/check/dispatch for watches. * tests/unicode-normalize.c: #include --- ChangeLog | 8 ++++++++ ChangeLog.pre-2-0 | 8 ++++++++ ChangeLog.pre-2-10 | 8 ++++++++ ChangeLog.pre-2-12 | 8 ++++++++ ChangeLog.pre-2-2 | 8 ++++++++ ChangeLog.pre-2-4 | 8 ++++++++ ChangeLog.pre-2-6 | 8 ++++++++ ChangeLog.pre-2-8 | 8 ++++++++ glib/giochannel.c | 7 ++++--- glib/giounix.c | 19 ++++++++----------- tests/unicode-normalize.c | 1 + 11 files changed, 77 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 80dbed0..1ca174e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Mon Jul 2 16:03:21 2001 Owen Taylor + + * glib/giochannel.c (g_io_channel_get_buffer_condition): Fix. + + * glib/giunix.c: Fix prepare/check/dispatch for watches. + + * tests/unicode-normalize.c: #include + Sat Jun 30 23:14:32 2001 Tim Janik * glib/glist.[hc]: added g_list_insert_before(). diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 80dbed0..1ca174e 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,11 @@ +Mon Jul 2 16:03:21 2001 Owen Taylor + + * glib/giochannel.c (g_io_channel_get_buffer_condition): Fix. + + * glib/giunix.c: Fix prepare/check/dispatch for watches. + + * tests/unicode-normalize.c: #include + Sat Jun 30 23:14:32 2001 Tim Janik * glib/glist.[hc]: added g_list_insert_before(). diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 80dbed0..1ca174e 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,11 @@ +Mon Jul 2 16:03:21 2001 Owen Taylor + + * glib/giochannel.c (g_io_channel_get_buffer_condition): Fix. + + * glib/giunix.c: Fix prepare/check/dispatch for watches. + + * tests/unicode-normalize.c: #include + Sat Jun 30 23:14:32 2001 Tim Janik * glib/glist.[hc]: added g_list_insert_before(). diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index 80dbed0..1ca174e 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,11 @@ +Mon Jul 2 16:03:21 2001 Owen Taylor + + * glib/giochannel.c (g_io_channel_get_buffer_condition): Fix. + + * glib/giunix.c: Fix prepare/check/dispatch for watches. + + * tests/unicode-normalize.c: #include + Sat Jun 30 23:14:32 2001 Tim Janik * glib/glist.[hc]: added g_list_insert_before(). diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 80dbed0..1ca174e 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,11 @@ +Mon Jul 2 16:03:21 2001 Owen Taylor + + * glib/giochannel.c (g_io_channel_get_buffer_condition): Fix. + + * glib/giunix.c: Fix prepare/check/dispatch for watches. + + * tests/unicode-normalize.c: #include + Sat Jun 30 23:14:32 2001 Tim Janik * glib/glist.[hc]: added g_list_insert_before(). diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 80dbed0..1ca174e 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,11 @@ +Mon Jul 2 16:03:21 2001 Owen Taylor + + * glib/giochannel.c (g_io_channel_get_buffer_condition): Fix. + + * glib/giunix.c: Fix prepare/check/dispatch for watches. + + * tests/unicode-normalize.c: #include + Sat Jun 30 23:14:32 2001 Tim Janik * glib/glist.[hc]: added g_list_insert_before(). diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 80dbed0..1ca174e 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,11 @@ +Mon Jul 2 16:03:21 2001 Owen Taylor + + * glib/giochannel.c (g_io_channel_get_buffer_condition): Fix. + + * glib/giunix.c: Fix prepare/check/dispatch for watches. + + * tests/unicode-normalize.c: #include + Sat Jun 30 23:14:32 2001 Tim Janik * glib/glist.[hc]: added g_list_insert_before(). diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 80dbed0..1ca174e 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,11 @@ +Mon Jul 2 16:03:21 2001 Owen Taylor + + * glib/giochannel.c (g_io_channel_get_buffer_condition): Fix. + + * glib/giunix.c: Fix prepare/check/dispatch for watches. + + * tests/unicode-normalize.c: #include + Sat Jun 30 23:14:32 2001 Tim Janik * glib/glist.[hc]: added g_list_insert_before(). diff --git a/glib/giochannel.c b/glib/giochannel.c index 64a25e0..1dfd1d6 100644 --- a/glib/giochannel.c +++ b/glib/giochannel.c @@ -428,15 +428,16 @@ g_io_add_watch (GIOChannel *channel, * * This function returns a #GIOCondition depending on the status of the * internal buffers in the #GIOChannel. Only the flags %G_IO_IN and - * %G_IO_OUT may be set. + * %G_IO_OUT will be set. * * Return value: A #GIOCondition **/ GIOCondition g_io_channel_get_buffer_condition (GIOChannel *channel) { - return (((channel->read_buf->len > 0) || (channel->encoded_read_buf->len > 0)) - ? G_IO_IN : 0) & ((channel->write_buf->len > 0) ? G_IO_OUT : 0); + return + ((channel->read_buf && channel->read_buf->len > 0) ? G_IO_IN : 0) | + ((channel->write_buf && channel->write_buf->len <= channel->buf_size) ? G_IO_OUT : 0); } /** diff --git a/glib/giounix.c b/glib/giounix.c index eb2e4cf..c7fe84d 100644 --- a/glib/giounix.c +++ b/glib/giounix.c @@ -118,27 +118,23 @@ g_io_unix_prepare (GSource *source, gint *timeout) { GIOUnixWatch *watch = (GIOUnixWatch *)source; + GIOCondition buffer_condition = g_io_channel_get_buffer_condition (watch->channel); *timeout = -1; - /* Only return TRUE if we're sure to match all conditions, otherwise - * we need to check. + /* Only return TRUE here if _all_ bits in watch->condition will be set */ - - watch->condition = g_io_channel_get_buffer_condition (watch->channel); - - return (watch->pollfd.revents & (G_IO_IN | G_IO_OUT)) == watch->condition; - + return ((watch->condition & buffer_condition) == watch->condition); } static gboolean g_io_unix_check (GSource *source) { GIOUnixWatch *watch = (GIOUnixWatch *)source; + GIOCondition buffer_condition = g_io_channel_get_buffer_condition (watch->channel); + GIOCondition poll_condition = watch->pollfd.revents; - watch->condition &= g_io_channel_get_buffer_condition (watch->channel); - - return (watch->pollfd.revents & watch->condition); + return ((poll_condition | buffer_condition) & watch->condition); } static gboolean @@ -149,6 +145,7 @@ g_io_unix_dispatch (GSource *source, { GIOFunc func = (GIOFunc)callback; GIOUnixWatch *watch = (GIOUnixWatch *)source; + GIOCondition buffer_condition = g_io_channel_get_buffer_condition (watch->channel); if (!func) { @@ -158,7 +155,7 @@ g_io_unix_dispatch (GSource *source, } return (*func) (watch->channel, - watch->pollfd.revents & watch->condition, + (watch->pollfd.revents | buffer_condition) & watch->condition, user_data); } diff --git a/tests/unicode-normalize.c b/tests/unicode-normalize.c index 1c8318d..0bd80df 100644 --- a/tests/unicode-normalize.c +++ b/tests/unicode-normalize.c @@ -1,6 +1,7 @@ #include #include #include +#include gboolean success = TRUE; -- 2.7.4