From d21804b94a1e456c77453ed4993105f0979ceaf2 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Fri, 10 Apr 2009 13:57:32 +0000 Subject: Use g_file_make_symbolic_link to create symlinks. Patch by Hib Eris. See 2009-04-10 Carlos Garcia Campos * shell/ev-window.c: (ev_window_create_tmp_symlink): Use g_file_make_symbolic_link to create symlinks. Patch by Hib Eris. See bug #339172. svn path=/trunk/; revision=3597 --- diff --git a/ChangeLog b/ChangeLog index b990098..0e4153b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2009-04-10 Carlos Garcia Campos + * shell/ev-window.c: (ev_window_create_tmp_symlink): + + Use g_file_make_symbolic_link to create symlinks. Patch by Hib + Eris. See bug #339172. + +2009-04-10 Carlos Garcia Campos + * properties/ev-properties-main.c: (ev_properties_get_pages): Create and load the document based on the mime-type provided by diff --git a/shell/ev-window.c b/shell/ev-window.c index 0ce2bef..f61e350 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -2069,10 +2069,11 @@ ev_window_cmd_file_open (GtkAction *action, EvWindow *window) static gchar * ev_window_create_tmp_symlink (const gchar *filename, GError **error) { - gchar *tmp_filename = NULL; - gchar *name; - gint res; - guint i = 0; + gchar *tmp_filename = NULL; + gchar *name; + guint i = 0; + GError *link_error = NULL; + GFile *tmp_file = NULL; name = g_path_get_basename (filename); @@ -2081,29 +2082,32 @@ ev_window_create_tmp_symlink (const gchar *filename, GError **error) if (tmp_filename) g_free (tmp_filename); + if (tmp_file) + g_object_unref (tmp_file); + g_clear_error (&link_error); basename = g_strdup_printf ("%s-%d", name, i++); tmp_filename = g_build_filename (ev_tmp_dir (), basename, NULL); g_free (basename); - } while ((res = symlink (filename, tmp_filename)) != 0 && errno == EEXIST); - - g_free (name); + tmp_file = g_file_new_for_path (tmp_filename); + } while (!g_file_make_symbolic_link (tmp_file, filename, NULL, &link_error) && + g_error_matches (link_error, G_IO_ERROR, G_IO_ERROR_EXISTS)); - if (res != 0 && errno != EEXIST) { - if (error) { - *error = g_error_new (G_FILE_ERROR, - g_file_error_from_errno (errno), - _("Couldn't create symlink ā€œ%sā€: %s"), - tmp_filename, strerror (errno)); - } + g_free (name); + g_object_unref (tmp_file); + if (link_error) { + g_propagate_prefixed_error (error, + link_error, + _("Couldn't create symlink ā€œ%sā€: "), + tmp_filename); g_free (tmp_filename); - + return NULL; } - + return tmp_filename; } -- cgit v0.9.1