changeset 12378:ec1305e3ea1c

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.
author Jim Meyering <meyering@redhat.com>
date Tue, 01 Dec 2009 12:06:34 +0100
parents 94e10d90164d
children a26918b40a9a
files ChangeLog lib/fts.c
diffstat 2 files changed, 13 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2009-12-01  Jim Meyering  <meyering@redhat.com>
+
+	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  <ebb9@byu.net>
 
 	utimens: fix compilation error
--- a/lib/fts.c
+++ b/lib/fts.c
@@ -375,7 +375,6 @@
 	register size_t nitems;
 	FTSENT *parent = NULL;
 	FTSENT *tmp = NULL;	/* pacify gcc */
-	size_t len;
 	bool defer_stat;
 
 	/* Options check. */
@@ -474,12 +473,8 @@
 
 	/* 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;