rm: fix --one-file-system regression due to fts conversion
authorPádraig Brady <P@draigBrady.com>
Fri, 18 Dec 2009 12:26:04 +0000 (12:26 +0000)
committerPádraig Brady <P@draigBrady.com>
Sat, 19 Dec 2009 01:14:07 +0000 (01:14 +0000)
* src/remove.c (rm_fts): Fix incorrect comparison of
device and inode numbers.
* tests/rm/one-file-system2: Add a separate test so
that it can be run as a normal user (It doesn't need to mount).
* tests/Makefile.am: Reference it.
* NEWS: Mention the fix.
Reported by Jan Larres.

NEWS
src/remove.c
tests/Makefile.am
tests/rm/one-file-system2 [new file with mode: 0755]

diff --git a/NEWS b/NEWS
index bef66c87f3330feac1aa5e422d52bc49e0b3eb9d..f0b71a8c812908d50234188b8306f04d400b01f3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,13 @@ GNU coreutils NEWS                                    -*- outline -*-
 
 * Noteworthy changes in release ?.? (????-??-??) [?]
 
+** Bug fixes
+
+  rm -r --one-file-system works once again.
+  The rewrite to make rm use fts introduced a regression whereby
+  a commmand of the above form would fail for all subdirectories.
+  [bug introduced in coreutils-8.0]
+
 
 * Noteworthy changes in release 8.2 (2009-12-11) [stable]
 
index 584720079f26142d4536a76f460d88b473329f43..1306e8fbfe668475d0c60e39264878410367dc6b 100644 (file)
@@ -548,7 +548,7 @@ rm_fts (FTS *fts, FTSENT *ent, struct rm_options const *x)
         if (ent->fts_info == FTS_DP
             && x->one_file_system
             && FTS_ROOTLEVEL < ent->fts_level
-            && ent->fts_statp->st_ino != fts->fts_dev)
+            && ent->fts_statp->st_dev != fts->fts_dev)
           {
             mark_ancestor_dirs (ent);
             error (0, 0, _("skipping %s, since it's on a different device"),
index fe8f3475443756126c67b59ee3ffbc9f4844d0f8..5e44202ba34c2e9ccce8a8edafaa2a93327aeab2 100644 (file)
@@ -107,6 +107,7 @@ TESTS =                                             \
   rm/interactive-always                                \
   rm/interactive-once                          \
   rm/ir-1                                      \
+  rm/one-file-system2                          \
   rm/r-1                                       \
   rm/r-2                                       \
   rm/r-3                                       \
diff --git a/tests/rm/one-file-system2 b/tests/rm/one-file-system2
new file mode 100755 (executable)
index 0000000..414a57a
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh
+# Verify --one-file-system does delete within a file system
+
+# Copyright (C) 2009 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
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+if test "$VERBOSE" = yes; then
+  set -x
+  rm --version
+fi
+
+. $srcdir/test-lib.sh
+
+mkdir -p a/b
+
+rm --one-file-system -rf a || fail=1
+test -d a && fail=1
+
+Exit $fail