diff --git a/src/common/plugin.c b/src/common/plugin.c index 71e1ae61..d8211e82 100644 --- a/src/common/plugin.c +++ b/src/common/plugin.c @@ -212,7 +212,19 @@ xchat_dummy (xchat_plugin *ph) static int xchat_read_fd (xchat_plugin *ph, GIOChannel *source, char *buf, int *len) { - return g_io_channel_read (source, buf, *len, len); + GError *error = NULL; + + g_io_channel_set_buffered (source, FALSE); + g_io_channel_set_encoding (source, NULL, &error); + + if (g_io_channel_read_chars (source, buf, *len, (gsize*)len, &error) == G_IO_STATUS_NORMAL) + { + return 0; + } + else + { + return -1; + } } #endif diff --git a/src/common/util.c b/src/common/util.c index 28352189..8a8adf02 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -392,11 +392,14 @@ int waitline2 (GIOChannel *source, char *buf, int bufsize) { int i = 0; - int len; + gsize len; + GError *error = NULL; while (1) { - if (g_io_channel_read (source, &buf[i], 1, &len) != G_IO_ERROR_NONE) + g_io_channel_set_buffered (source, FALSE); + g_io_channel_set_encoding (source, NULL, &error); + if (g_io_channel_read_chars (source, &buf[i], 1, &len, &error) != G_IO_STATUS_NORMAL) return -1; if (buf[i] == '\n' || bufsize == i + 1) {