]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
Change "rm --verbose -r a//" not to print extra slashes in a///b
authorJim Meyering <jim@meyering.net>
Wed, 22 Aug 2007 18:02:34 +0000 (20:02 +0200)
committerJim Meyering <jim@meyering.net>
Wed, 22 Aug 2007 18:02:34 +0000 (20:02 +0200)
* src/remove.c (push_dir): Don't copy trailing slashes onto the stack.
Reported by François Pinard.
* tests/rm/v-slash: New file.  Test for the above change.
* tests/rm/Makefile.am (TESTS): Add v-slash.

ChangeLog
src/remove.c
tests/rm/Makefile.am
tests/rm/v-slash [new file with mode: 0755]

index a142eff770324ed442cdadcd30402de2d3fe9ff1..1cc257a945612cd03600bb71f12dd3691ce38f0f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2007-08-22  Jim Meyering  <jim@meyering.net>
 
+       Change "rm --verbose -r a//" not to print extra slashes in a///b
+       * src/remove.c (push_dir): Don't copy trailing slashes onto the stack.
+       Reported by François Pinard.
+       * tests/rm/v-slash: New file.  Test for the above change.
+       * tests/rm/Makefile.am (TESTS): Add v-slash.
+
        * src/date.c: Don't include "getline.h", now removed from gnulib;
        its declarations are now in <stdio.h>.
        * src/md5sum.c: Likewise.
index 58072adde80221f13d16c9c80bc2d9f476f4a5cb..773ed12dc07309dbc556ea82ded4c20977fb4572 100644 (file)
@@ -220,6 +220,10 @@ push_dir (Dirstack_state *ds, const char *dir_name)
 {
   size_t len = strlen (dir_name);
 
+  /* Don't copy trailing slashes.  */
+  while (1 < len && dir_name[len - 1] == '/')
+    --len;
+
   /* Append the string onto the stack.  */
   obstack_grow (&ds->dir_stack, dir_name, len);
 
index 569c3342c06d259bf363e09008b9fc59896d5998..2246ecd6fb80efc537f9d257be6ec151d7c67186 100644 (file)
@@ -17,6 +17,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 TESTS = \
+  v-slash \
   i-never \
   fail-eacces \
   one-file-system \
diff --git a/tests/rm/v-slash b/tests/rm/v-slash
new file mode 100755 (executable)
index 0000000..ad20d51
--- /dev/null
@@ -0,0 +1,51 @@
+#!/bin/sh
+# avoid extra slashes in --verbose output
+
+# Copyright (C) 2007 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
+
+pwd=`pwd`
+t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$
+trap 'status=$?; cd "$pwd" && chmod -R u+rwx $t0 && rm -rf $t0 && exit $status' 0
+trap '(exit $?); exit $?' 1 2 13 15
+
+framework_failure=0
+mkdir -p $tmp || framework_failure=1
+cd $tmp || framework_failure=1
+mkdir a || framework_failure=1
+touch a/x || framework_failure=1
+
+if test $framework_failure = 1; then
+  echo "$0: failure in testing framework" 1>&2
+  (exit 1); exit 1
+fi
+
+fail=0
+
+rm --verbose -r a/// > out || fail=1
+cat <<\EOF > exp || fail=1
+removed `a/x'
+removed directory: `a'
+EOF
+
+cmp out exp || fail=1
+test $fail = 1 && diff out exp 2> /dev/null
+
+(exit $fail); exit $fail