diff --git a/src/common/cfgfiles.c b/src/common/cfgfiles.c index 2c6e8755..e4ae2974 100644 --- a/src/common/cfgfiles.c +++ b/src/common/cfgfiles.c @@ -1473,3 +1473,25 @@ stream_writef (GOutputStream *ostream, const char *fmt, ...) return ret; } + +GDataInputStream * +file_get_datainputstream (GFile *file) +{ + GInputStream *stream; + GDataInputStream *datastream; + + stream = G_INPUT_STREAM(g_file_read (file, NULL, NULL)); + if (!stream) + return NULL; + + datastream = g_data_input_stream_new (stream); + /* + * This is to avoid any issues moving between windows/unix + * but the docs mention an invalid \r without a following \n + * can lock up the program + */ + g_data_input_stream_set_newline_type (datastream, G_DATA_STREAM_NEWLINE_TYPE_ANY); + g_object_unref (stream); + + return datastream; +} diff --git a/src/common/cfgfiles.h b/src/common/cfgfiles.h index eeba014d..bd60de26 100644 --- a/src/common/cfgfiles.h +++ b/src/common/cfgfiles.h @@ -53,6 +53,7 @@ int hexchat_open_file (char *file, int flags, int mode, int xof_flags); FILE *hexchat_fopen_file (const char *file, const char *mode, int xof_flags); GFile *hexchat_open_gfile (const char *filename); gsize stream_writef (GOutputStream *ostream, const char *fmt, ...) G_GNUC_PRINTF (2, 3); +GDataInputStream *file_get_datainputstream (GFile *file); char *unescape_newlines (const gchar *value); char *escape_newlines (const gchar *value); diff --git a/src/common/plugin.c b/src/common/plugin.c index 6178d779..448da89c 100644 --- a/src/common/plugin.c +++ b/src/common/plugin.c @@ -1918,7 +1918,6 @@ int hexchat_pluginpref_list (hexchat_plugin *pl, char* dest) { GFile *file; - GInputStream *stream; GDataInputStream *istream; char *confname, *canon, *buf; @@ -1930,14 +1929,10 @@ hexchat_pluginpref_list (hexchat_plugin *pl, char* dest) file = hexchat_open_gfile (confname); g_free (confname); - stream = G_INPUT_STREAM(g_file_read (file, NULL, NULL)); - if (!stream) + istream = file_get_datainputstream (file); + if (!istream) return 0; - istream = g_data_input_stream_new (stream); - g_data_input_stream_set_newline_type (istream, G_DATA_STREAM_NEWLINE_TYPE_ANY); - g_object_unref (stream); - strcpy (dest, ""); /* clean up garbage */ while ((buf = g_data_input_stream_read_line_utf8 (istream, NULL, NULL, NULL))) { diff --git a/src/common/servlist.c b/src/common/servlist.c index 167f70dc..62981da8 100644 --- a/src/common/servlist.c +++ b/src/common/servlist.c @@ -1180,7 +1180,6 @@ static int servlist_load (void) { GFile *file; - GInputStream *stream; GDataInputStream *istream; gchar *buf; ircnet *net = NULL; @@ -1200,13 +1199,10 @@ servlist_load (void) file = hexchat_open_gfile ("servlist.conf"); - stream = G_INPUT_STREAM(g_file_read (file, NULL, NULL)); - if (!stream) + istream = file_get_datainputstream (file); + if (!istream) return FALSE; - istream = g_data_input_stream_new (stream); - g_data_input_stream_set_newline_type (istream, G_DATA_STREAM_NEWLINE_TYPE_ANY); - g_object_unref (stream); while ((buf = g_data_input_stream_read_line_utf8 (istream, NULL, NULL, NULL))) { diff --git a/src/common/text.c b/src/common/text.c index 6ea07ece..c6c6d138 100644 --- a/src/common/text.c +++ b/src/common/text.c @@ -220,7 +220,6 @@ scrollback_save (session *sess, char *text) void scrollback_load (session *sess) { - GInputStream *stream; GDataInputStream *istream; gchar *buf, *text; gint lines = 0; @@ -246,19 +245,10 @@ scrollback_load (session *sess) g_free (buf); } - stream = G_INPUT_STREAM(g_file_read (sess->scrollfile, NULL, NULL)); - if (!stream) + istream = file_get_datainputstream (sess->scrollfile); + if (!istream) return; - istream = g_data_input_stream_new (stream); - /* - * This is to avoid any issues moving between windows/unix - * but the docs mention an invalid \r without a following \n - * can lock up the program... (Our write() always adds \n) - */ - g_data_input_stream_set_newline_type (istream, G_DATA_STREAM_NEWLINE_TYPE_ANY); - g_object_unref (stream); - while (1) { GError *err = NULL;