mirror of
git://git.sv.gnu.org/coreutils
synced 2026-06-06 23:59:19 -04:00
(copy_internal) [move_mode]: Give a better diagnostic
(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.
This commit is contained in:
+2
-5
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user