]> granicus.if.org Git - neomutt/commitdiff
safe_rename: fall back to rename on ENOSYS and EPERM as well as EXDEV.
authorBrendan Cully <brendan@kublai.com>
Fri, 6 Apr 2007 19:54:46 +0000 (12:54 -0700)
committerBrendan Cully <brendan@kublai.com>
Fri, 6 Apr 2007 19:54:46 +0000 (12:54 -0700)
sshfs returns ENOSYS when attempting cross-directory links.
vfat returns EPERM.

lib.c

diff --git a/lib.c b/lib.c
index a0cbca22f45e8252eab903868fb6dd16a23d94e7..53ccb842362ea6f2c2568172384fe3bef1ad8757 100644 (file)
--- a/lib.c
+++ b/lib.c
@@ -447,9 +447,10 @@ int safe_rename (const char *src, const char *target)
     
     dprint (1, (debugfile, "safe_rename: link (%s, %s) failed: %s (%d)\n", src, target, strerror (errno), errno));
 
-    if (errno == EXDEV)
+    /* FUSE may return ENOSYS. VFAT may return EPERM */
+    if (errno == EXDEV || errno == ENOSYS || errno == EPERM)
     {
-      dprint (1, (debugfile, "safe_rename: errno was EXDEV; trying rename...\n"));
+      dprint (1, (debugfile, "safe_rename: trying rename...\n"));
       if (rename (src, target) == -1) 
       {
        dprint (1, (debugfile, "safe_rename: rename (%s, %s) failed: %s (%d)\n", src, target, strerror (errno), errno));