summary refs log tree commit diff stats
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/plugin.c14
-rw-r--r--src/common/util.c7
2 files changed, 18 insertions, 3 deletions
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)
 		{