]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
(copy_internal) [move_mode]: Give a better diagnostic
authorJim Meyering <jim@meyering.net>
Sun, 17 Mar 2002 16:00:54 +0000 (16:00 +0000)
committerJim Meyering <jim@meyering.net>
Sun, 17 Mar 2002 16:00:54 +0000 (16:00 +0000)
(using errno from the failed unlink) when a cross-device `mv'
fails, e.g., because the destination cannot be unlinked.
Prompted by a report from Karl Berry.

src/copy.c

index 017adf8d2e7088d73eed0322f4c3955c6dbb749b..f9ad0a3889682c1dd3ad8d4cf5748a44fb97dc4f 100644 (file)
@@ -791,7 +791,6 @@ copy_internal (const char *src_path, const char *dst_path,
   char *earlier_file = NULL;
   char *dst_backup = NULL;
   int backup_succeeded = 0;
-  int rename_errno;
   int delayed_fail;
   int copied_as_regular = 0;
   int ran_chown = 0;
@@ -1213,16 +1212,14 @@ copy_internal (const char *src_path, const char *dst_path,
          return 1;
        }
 
-      /* Save this value of errno to use in case the unlink fails.  */
-      rename_errno = errno;
-
       /* The rename attempt has failed.  Remove any existing destination
         file so that a cross-device `mv' acts as if it were really using
         the rename syscall.  */
       if (unlink (dst_path) && errno != ENOENT)
        {
          /* Use the value of errno from the failed rename.  */
-         error (0, rename_errno, _("cannot move %s to %s"),
+         error (0, errno,
+            _("inter-device move failed: %s to %s;  unable to remove target"),
                 quote_n (0, src_path), quote_n (1, dst_path));
          return 1;
        }