summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS8
-rw-r--r--THANKS1
m---------gnulib0
-rw-r--r--lib/xfts.c29
-rw-r--r--po/POTFILES.in1
-rwxr-xr-xtests/rm/empty-name18
6 files changed, 32 insertions, 25 deletions
diff --git a/NEWS b/NEWS
index df258e21a..9f7bf2e5f 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,14 @@ GNU coreutils NEWS -*- outline -*-
* Noteworthy changes in release ?.? (????-??-??) [?]
+** Bug fixes
+
+ rm once again handles zero-length arguments properly.
+ The rewrite to make rm use fts introduced a regression whereby
+ a command like "rm a '' b" would fail to remove "a" and "b", due to
+ the presence of the empty string argument.
+ [bug introduced in coreutils-8.0]
+
* Noteworthy changes in release 8.1 (2009-11-18) [stable]
diff --git a/THANKS b/THANKS
index f9bc47639..52d41705a 100644
--- a/THANKS
+++ b/THANKS
@@ -334,6 +334,7 @@ Kirk Kelsey kirk.kelsey@0x4b.net
Kristin E Thomas kristint@us.ibm.com
Kjetil Torgrim Homme kjetilho@ifi.uio.no
Kristoffer Rose kris@diku.dk
+Ladislav Hagara ladislav.hagara@unob.cz
Larry McVoy lm@sgi.com
Lars Hecking lhecking@nmrc.ucc.ie
Leah Q eequor@earthlink.net
diff --git a/gnulib b/gnulib
-Subproject cf8ddf08dec79be620c011ce204cbdb6bff35c5
+Subproject cdfe647f8d29540cdfe90cef0fa568c5d2fd448
diff --git a/lib/xfts.c b/lib/xfts.c
index 9c46f6af5..dd86a5cba 100644
--- a/lib/xfts.c
+++ b/lib/xfts.c
@@ -21,13 +21,9 @@
#include <stdbool.h>
#include <stdlib.h>
+#include <errno.h>
+#include <assert.h>
-#include "error.h"
-
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-
-#include "quote.h"
#include "xalloc.h"
#include "xfts.h"
@@ -40,23 +36,10 @@ xfts_open (char * const *argv, int options,
FTS *fts = fts_open (argv, options | FTS_CWDFD, compar);
if (fts == NULL)
{
- /* This can fail in three ways: out of memory, invalid bit_flags,
- and one or more of the FILES is an empty string. We could try
- to decipher that errno==EINVAL means invalid bit_flags and
- errno==ENOENT means there's an empty string, but that seems wrong.
- Ideally, fts_open would return a proper error indicator. For now,
- we'll presume that the bit_flags are valid and just check for
- empty strings. */
- bool invalid_arg = false;
- for (; *argv; ++argv)
- {
- if (**argv == '\0')
- invalid_arg = true;
- }
- if (invalid_arg)
- error (EXIT_FAILURE, 0, _("invalid argument: %s"), quote (""));
- else
- xalloc_die ();
+ /* This can fail in two ways: out of memory or with errno==EINVAL,
+ which indicates it was called with invalid bit_flags. */
+ assert (errno != EINVAL);
+ xalloc_die ();
}
return fts;
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 9a46a9a74..e744dda00 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -28,7 +28,6 @@ lib/verror.c
lib/version-etc.c
lib/xalloc-die.c
lib/xfreopen.c
-lib/xfts.c
lib/xmemcoll.c
lib/xmemxfrm.c
lib/xprintf.c
diff --git a/tests/rm/empty-name b/tests/rm/empty-name
index 08cc8e339..27f76d0ae 100755
--- a/tests/rm/empty-name
+++ b/tests/rm/empty-name
@@ -29,12 +29,28 @@ use strict;
my $prog = 'rm';
+# FIXME: copied from misc/ls-misc; factor into Coreutils.pm?
+sub mk_file(@)
+{
+ foreach my $f (@_)
+ {
+ open (F, '>', $f) && close F
+ or die "creating $f: $!\n";
+ }
+}
+
my @Tests =
(
# test-name options input expected-output
#
['empty-name-1', "''", {EXIT => 1},
- {ERR => "$prog: invalid argument: `'\n"}],
+ {ERR => "$prog: cannot remove `': No such file or directory\n"}],
+
+ ['empty-name-2', "a '' b", {EXIT => 1},
+ {ERR => "$prog: cannot remove `': No such file or directory\n"},
+ {PRE => sub { mk_file qw(a b) }},
+ {POST => sub {-f 'a' || -f 'b' and die "a or b remain\n" }},
+ ],
);
my $save_temps = $ENV{SAVE_TEMPS};