diff --git a/src/common/cfgfiles.c b/src/common/cfgfiles.c index f3271ef1..db32076c 100644 --- a/src/common/cfgfiles.c +++ b/src/common/cfgfiles.c @@ -1332,7 +1332,10 @@ hexchat_open_gfile (const char *filename) GFile *file; gchar *full_path, *full_path_fs; - full_path = g_build_filename (get_xdir(), filename, NULL); + if (g_path_is_absolute (filename)) + full_path = g_strdup (filename); + else + full_path = g_build_filename (get_xdir(), filename, NULL); full_path_fs = g_filename_from_utf8 (full_path, -1, NULL, NULL, NULL); file = g_file_new_for_path (full_path_fs); diff --git a/src/common/url.c b/src/common/url.c index 0354d98c..c983d0e6 100644 --- a/src/common/url.c +++ b/src/common/url.c @@ -68,42 +68,47 @@ url_clear (void) } static int -url_save_cb (char *url, FILE *fd) +url_save_cb (char *url, GOutputStream *ostream) { - fprintf (fd, "%s\n", url); + stream_writef (ostream, "%s\n", url); return TRUE; } void -url_save_tree (const char *fname, const char *mode, gboolean fullpath) +url_save_tree (const char *fname) { - FILE *fd; + GFile *file; + GOutputStream *ostream; - if (fullpath) - fd = hexchat_fopen_file (fname, mode, XOF_FULLPATH); - else - fd = hexchat_fopen_file (fname, mode, 0); - if (fd == NULL) - return; + file = hexchat_open_gfile (fname); - tree_foreach (url_tree, (tree_traverse_func *)url_save_cb, fd); - fclose (fd); + ostream = G_OUTPUT_STREAM(g_file_append_to (file, G_FILE_CREATE_NONE, NULL, NULL)); + if (ostream) + { + tree_foreach (url_tree, (tree_traverse_func *)url_save_cb, ostream); + g_object_unref (ostream); + } + + g_object_unref (file); } static void url_save_node (char* url) { - FILE *fd; + GFile *file; + GOutputStream *ostream; /* open /url.log in append mode */ - fd = hexchat_fopen_file ("url.log", "a", 0); - if (fd == NULL) + file = hexchat_open_gfile ("url.log"); + + ostream = G_OUTPUT_STREAM(g_file_append_to (file, G_FILE_CREATE_NONE, NULL, NULL)); + if (ostream) { - return; + stream_writef (ostream, "%s\n", url); + g_object_unref (ostream); } - fprintf (fd, "%s\n", url); - fclose (fd); + g_object_unref (file); } static int diff --git a/src/common/url.h b/src/common/url.h index 1b1deb3d..d59818d6 100644 --- a/src/common/url.h +++ b/src/common/url.h @@ -33,7 +33,7 @@ extern void *url_tree; #define WORD_PATH -2 void url_clear (void); -void url_save_tree (const char *fname, const char *mode, gboolean fullpath); +void url_save_tree (const char *fname); int url_last (int *, int *); int url_check_word (const char *word); void url_check_line (char *buf); diff --git a/src/fe-gtk/urlgrab.c b/src/fe-gtk/urlgrab.c index 79a6d5f5..a23eb562 100644 --- a/src/fe-gtk/urlgrab.c +++ b/src/fe-gtk/urlgrab.c @@ -138,7 +138,7 @@ url_save_callback (void *arg1, char *file) { if (file) { - url_save_tree (file, "w", TRUE); + url_save_tree (file); } }