mirror of
https://github.com/coreutils/coreutils.git
synced 2024-11-24 10:23:31 +08:00
rm: avoid bogus diagnostic for a slash-decorated symlink-to-dir
These commands would evoke an invalid diagnostic: $ mkdir d && ln -s d s && env rm -r s/ rm: cannot remove 's': Too many levels of symbolic links remove.c was stripping trailing slashes from "s/" before passing the name to "rm". But a trailing slash may change the semantics, and thus should not be stripped. * src/remove.c (rm_fts): Do not strip trailing slashes. * tests/rm/v-slash.sh: Adapt to new expected output. * gnulib: Update to latest, for an improved fts.c that merely normalizes trailing slashes. Reported by Paul Eggert in discussion of http://bugs.gnu.org/12339
This commit is contained in:
parent
d5719921a8
commit
57dd06703c
4
NEWS
4
NEWS
@ -19,6 +19,10 @@ GNU coreutils NEWS -*- outline -*-
|
||||
than ignoring the -d option and failing with an 'Is a directory' error.
|
||||
[bug introduced in coreutils-8.19, with the addition of --dir (-d)]
|
||||
|
||||
rm -r S/ (where S is a symlink-to-directory) no longer gives the invalid
|
||||
"Too many levels of symbolic links" diagnostic.
|
||||
[bug introduced in coreutils-8.6]
|
||||
|
||||
** Improvements
|
||||
|
||||
stat and tail work better with ZFS. stat -f --format=%T now reports the
|
||||
|
2
gnulib
2
gnulib
@ -1 +1 @@
|
||||
Subproject commit 68f693ff1db33bf24695f0f42c62e7801966fd06
|
||||
Subproject commit 3a9002d3cc63da7110f133b1040d2d2b0aad8305
|
@ -433,9 +433,6 @@ rm_fts (FTS *fts, FTSENT *ent, struct rm_options const *x)
|
||||
/* Perform checks that can apply only for command-line arguments. */
|
||||
if (ent->fts_level == FTS_ROOTLEVEL)
|
||||
{
|
||||
if (strip_trailing_slashes (ent->fts_path))
|
||||
ent->fts_pathlen = strlen (ent->fts_path);
|
||||
|
||||
/* If the basename of a command line argument is "." or "..",
|
||||
diagnose it and do nothing more with that argument. */
|
||||
if (dot_or_dotdot (last_component (ent->fts_accpath)))
|
||||
|
@ -26,7 +26,7 @@ touch a/x || framework_failure_
|
||||
rm --verbose -r a/// > out || fail=1
|
||||
cat <<\EOF > exp || fail=1
|
||||
removed 'a/x'
|
||||
removed directory: 'a'
|
||||
removed directory: 'a/'
|
||||
EOF
|
||||
|
||||
compare exp out || fail=1
|
||||
|
Loading…
Reference in New Issue
Block a user