From: Jim Meyering Date: Tue, 1 Dec 2009 11:06:34 +0000 (+0100) Subject: fts: fts_open: do not let an empty string cause immediate failure X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cdfe647f8d29540cdfe90cef0fa568c5d2fd4481;p=pspp fts: fts_open: do not let an empty string cause immediate failure This is required in support of GNU rm, for which the command "rm A '' B" must process and remove both A and B, in spite of the empty string argument. * lib/fts.c (fts_open): Do not let the presence of an empty string cause fts_open to fail immediately. Most fts-using tools must be able to process all arguments, in order, and can be expected to diagnose such arguments themselves. Also, move declaration of local, "len", "down" to initialization. --- diff --git a/ChangeLog b/ChangeLog index 07918de204..6eec830ec3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2009-12-01 Jim Meyering + + fts: fts_open: do not let an empty string cause immediate failure + This is required in support of GNU rm, for which the command + "rm A '' B" must process and remove both A and B, in spite of + the empty string argument. + * lib/fts.c (fts_open): Do not let the presence of an empty string + cause fts_open to fail immediately. Most fts-using tools must be + able to process all arguments, in order, and can be expected to + diagnose such arguments themselves. + 2009-11-30 Eric Blake utimens: fix compilation error diff --git a/lib/fts.c b/lib/fts.c index 21c66583ac..39922b6a43 100644 --- a/lib/fts.c +++ b/lib/fts.c @@ -375,7 +375,6 @@ fts_open (char * const *argv, register size_t nitems; FTSENT *parent = NULL; FTSENT *tmp = NULL; /* pacify gcc */ - size_t len; bool defer_stat; /* Options check. */ @@ -474,12 +473,8 @@ fts_open (char * const *argv, /* Allocate/initialize root(s). */ for (root = NULL, nitems = 0; *argv != NULL; ++argv, ++nitems) { - /* Don't allow zero-length file names. */ - if ((len = strlen(*argv)) == 0) { - __set_errno (ENOENT); - goto mem3; - } - + /* *Do* allow zero-length file names. */ + size_t len = strlen(*argv); if ((p = fts_alloc(sp, *argv, len)) == NULL) goto mem3; p->fts_level = FTS_ROOTLEVEL;