]> www.fi.muni.cz Git - evince.git/commitdiff
Use g_file_make_symbolic_link to create symlinks. Patch by Hib Eris. See
authorCarlos Garcia Campos <carlosgc@gnome.org>
Fri, 10 Apr 2009 13:57:32 +0000 (13:57 +0000)
committerCarlos Garcia Campos <carlosgc@src.gnome.org>
Fri, 10 Apr 2009 13:57:32 +0000 (13:57 +0000)
2009-04-10  Carlos Garcia Campos  <carlosgc@gnome.org>

* 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

ChangeLog
shell/ev-window.c

index b990098da84778ac0d1144b07cfb984a0c5ab5fd..0e4153bf5e0b87eaa4bb074efeb419b8015189e6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2009-04-10  Carlos Garcia Campos  <carlosgc@gnome.org>
+
+       * 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  <carlosgc@gnome.org>
 
        * properties/ev-properties-main.c: (ev_properties_get_pages):
index 0ce2bef7eb643ab843da9d0bebcd018b6ab64867..f61e35018f1b049f047e7dc202d074be829619ea 100644 (file)
@@ -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;
 }