Proposed patch to fix potential double rmdir() when --parents is
specified.
Example: Execution of
rmdir -p a/b/c/
Will try to remove dir a/b/c twice -- once in main() and again in
remove_parents() -- because of confusion over trailing slashes.
All trailing slashes must be removed before the call to
remove_parents(), or rather before the while() loop in remove_parents()
is entered.
Ciao.
kw.
diff -Nru fileutils-4.1.8.ORG/src/rmdir.c fileutils-4.1.8/src/rmdir.c
--- fileutils-4.1.8.ORG/src/rmdir.c Sun Dec 2 17:15:54 2001
+++ fileutils-4.1.8/src/rmdir.c Thu Apr 4 12:33:04 2002
@@ -98,6 +98,27 @@
char *slash;
int fail = 0;
+ /* All trailing slashes must be removed before the while() is entered.
+ Otherwise we'll try to rmdir(path) -- which we've already done
+ in main() and hence wind up with an ENOENT here. Example:
+
+ kw@vader[6]:/opt/build$ mkdir -p a/b
+ kw@vader[6]:/opt/build$ rmdir -p --verbose a/b/
+ rmdir: removing directory, a/b/
+ rmdir: removing directory, a/b
+ rmdir: `a/b': No such file or directory
+ */
+
+ slash = strrchr (path, '/');
+ if (slash == NULL)
+ return fail;
+ if (slash[1] == '\0')
+ {
+ while (slash > path && *slash == '/')
+ --slash;
+ slash[1] = 0;
+ }
+
while (1)
{
slash = strrchr (path, '/');