Fallback to rename() if link() is not available (when no support on target
authorTomas Bzatek <tbzatek@redhat.com>
Wed, 6 Feb 2008 13:45:26 +0000 (13:45 +0000)
committerTomas Bzatek <tbzatek@src.gnome.org>
Wed, 6 Feb 2008 13:45:26 +0000 (13:45 +0000)
2008-02-06  Tomas Bzatek  <tbzatek@redhat.com>

        * glocalfileoutputstream.c (g_local_file_output_stream_close):
        Fallback to rename() if link() is not available
        (when no support on target filesystem)

svn path=/trunk/; revision=6464

gio/ChangeLog
gio/glocalfileoutputstream.c

index 7534e94..6f05953 100644 (file)
@@ -1,3 +1,9 @@
+2008-02-06  Tomas Bzatek  <tbzatek@redhat.com>
+
+       * glocalfileoutputstream.c (g_local_file_output_stream_close):
+       Fallback to rename() if link() is not available
+       (when no support on target filesystem)
+
 2008-02-06  Michael Natterer  <mitch@imendio.com>
 
        * gfileinfo.c (g_file_info_get_icon): replace
index 38def65..c088857 100644 (file)
@@ -209,15 +209,19 @@ g_local_file_output_stream_close (GOutputStream  *stream,
 
          if (link (file->priv->original_filename, file->priv->backup_filename) != 0)
            {
-             g_set_error (error, G_IO_ERROR,
-                          G_IO_ERROR_CANT_CREATE_BACKUP,
-                          _("Error creating backup link: %s"),
-                          g_strerror (errno));
-             goto err_out;
+             /*  link failed or is not supported, try rename  */
+             if (rename (file->priv->original_filename, file->priv->backup_filename) != 0)
+               {
+                 g_set_error (error, G_IO_ERROR,
+                              G_IO_ERROR_CANT_CREATE_BACKUP,
+                              _("Error creating backup copy: %s"),
+                              g_strerror (errno));
+                 goto err_out;
+               }
            }
 #else
            /* If link not supported, just rename... */
-         if (!rename (file->priv->original_filename, file->priv->backup_filename) != 0)
+         if (rename (file->priv->original_filename, file->priv->backup_filename) != 0)
            {
              g_set_error (error, G_IO_ERROR,
                           G_IO_ERROR_CANT_CREATE_BACKUP,