summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>1998-03-13 23:38:50 +0000
committerJim Meyering <jim@meyering.net>1998-03-13 23:38:50 +0000
commite558629ce1cd131b6c2ff3f2eea9b23df5681313 (patch)
tree8c67fceca6304de9a014eb038dfbbdee8c7437e3 /src
parentfefa8511b8a31feaa8b39e4a3c83fdf0d8f938b9 (diff)
downloadcoreutils-e558629ce1cd131b6c2ff3f2eea9b23df5681313.tar.xz
(do_move): Add &copy_into_self arg in call to copy.
Don't remove source directory when copy_into_self is nonzero. Reported by Arne Henrik Juul.
Diffstat (limited to 'src')
-rw-r--r--src/mv.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/mv.c b/src/mv.c
index 9b869b74b..e9d94a910 100644
--- a/src/mv.c
+++ b/src/mv.c
@@ -272,6 +272,7 @@ do_move (const char *source, const char *dest, const struct cp_options *x)
and set errno to EXDEV. */
static int first = 1;
+ int copy_into_self;
if (first)
{
@@ -281,13 +282,18 @@ do_move (const char *source, const char *dest, const struct cp_options *x)
hash_init (INITIAL_HASH_MODULE, INITIAL_ENTRY_TAB_SIZE);
}
- fail = copy (source, dest, nonexistent_dst, x);
+ fail = copy (source, dest, nonexistent_dst, x, &copy_into_self);
if (fail)
{
/* Restore original destination file DEST if made a backup. */
if (dest_backup && rename (dest_backup, dest))
error (0, errno, _("cannot un-backup `%s'"), dest);
}
+ else if (copy_into_self)
+ {
+ /* Do *not* remove SOURCE if it is the same as or a parent of DEST.
+ Otherwise, mv would be removing the original *and* the copy. */
+ }
else
{
struct rm_options rm_options;