diff options
author | Jim Meyering <meyering@redhat.com> | 2009-12-01 12:02:11 +0100 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2009-12-01 14:38:39 +0100 |
commit | 0dc1f4c6f377f5613ecbf8747014babc9814ebda (patch) | |
tree | f65bf1baabc7bf0c7dfaf904d7332b14a6af0089 /lib | |
parent | cb775df09e79fc8cb5608bbc4a2ca8b621a4f771 (diff) | |
download | coreutils-0dc1f4c6f377f5613ecbf8747014babc9814ebda.tar.xz |
rm: fix empty-name bug introduced with conversion to use fts
While "rm ''" would properly fail, "rm F1 '' F2" would fail
to remove F1 and F2, due to the empty string argument.
This bug was introduced on 2009-07-12, via commit 4f73ecaf,
"rm: rewrite to use fts".
* gnulib: Update to latest, for fixed fts.c.
* NEWS (Bug fixes): Describe it.
* tests/rm/empty-name: Adjust for changed diagnostic.
(mk_file): Define, copied from misc/ls-misc.
(empty-name-2): New test, for today's fix.
* lib/xfts.c (xfts_open): Reflect the change in fts_open, now that
it no longer fails immediately when one argument is the empty string.
Assert that the bit flags were not the cause of failure.
* po/POTFILES.in: Remove xfts.c.
* THANKS: Update.
Reported by Ladislav Hagara.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/xfts.c | 29 |
1 files changed, 6 insertions, 23 deletions
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; |