]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
(do_move): The first time we resort to copy/remove,
authorJim Meyering <jim@meyering.net>
Fri, 8 Mar 2002 16:45:51 +0000 (16:45 +0000)
committerJim Meyering <jim@meyering.net>
Fri, 8 Mar 2002 16:45:51 +0000 (16:45 +0000)
call lstat `.' to get the device/inode numbers now required for rm.

src/mv.c

index a500d9f1c53473c872dfccb246f2a136b7327b66..b2dff121cc2778b297a90f826283cea18ade2e23 100644 (file)
--- a/src/mv.c
+++ b/src/mv.c
@@ -1,5 +1,5 @@
 /* mv -- move or rename files
-   Copyright (C) 86, 89, 90, 91, 1995-2001 Free Software Foundation, Inc.
+   Copyright (C) 86, 89, 90, 91, 1995-2002 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -241,6 +241,19 @@ do_move (const char *source, const char *dest, const struct cp_options *x)
          struct rm_options rm_options;
          struct File_spec fs;
          enum RM_status status;
+         static int first_rm = 1;
+         static struct dev_ino cwd_dev_ino;
+
+         if (first_rm)
+           {
+             struct stat cwd_sb;
+             if (lstat (".", &cwd_sb))
+               error (EXIT_FAILURE, errno, _("cannot lstat `.'"));
+
+             first_rm = 0;
+             cwd_dev_ino.st_dev = cwd_sb.st_dev;
+             cwd_dev_ino.st_ino = cwd_sb.st_ino;
+           }
 
          rm_option_init (&rm_options);
          rm_options.verbose = x->verbose;
@@ -253,7 +266,7 @@ do_move (const char *source, const char *dest, const struct cp_options *x)
             took the else branch of movefile.  */
          strip_trailing_slashes (fs.filename);
 
-         status = rm (&fs, 1, &rm_options);
+         status = rm (&fs, 1, &rm_options, &cwd_dev_ino);
          assert (VALID_STATUS (status));
          if (status == RM_ERROR)
            fail = 1;