bin/rmdir -p option bug [patch]

Joerg Sonnenberger joerg at britannica.bec.de
Sun Sep 12 04:29:53 PDT 2004


On Thu, Jul 22, 2004 at 08:39:44PM +0200, Douwe Kiela wrote:
> Hey peeps,
> 
> According to SUSv3, the -p option should behave exactly the same as rmdir
> without any option, only that it recursively removes all directories
> mentioned
> as arguments in the command line. In the current rmdir, you can't remove
> multiple directories and meanwhile recursively remove all it's
> subdirectories.

It still doesn't work as expected. What do you think of the attached patch?

Joerg
Index: Makefile
===================================================================
RCS file: /home/joerg/wd/repository/dragonflybsd/src/bin/rmdir/Makefile,v
retrieving revision 1.2
diff -u -r1.2 Makefile
--- Makefile	17 Jun 2003 04:22:50 -0000	1.2
+++ Makefile	8 Sep 2004 14:57:32 -0000
@@ -4,6 +4,6 @@
 
 PROG=	rmdir
 
-WARNS?=	2
+WARNS?=	6
 
 .include <bsd.prog.mk>
Index: rmdir.c
===================================================================
RCS file: /home/joerg/wd/repository/dragonflybsd/src/bin/rmdir/rmdir.c,v
retrieving revision 1.5
diff -u -r1.5 rmdir.c
--- rmdir.c	24 Jul 2004 10:47:10 -0000	1.5
+++ rmdir.c	8 Sep 2004 14:58:13 -0000
@@ -69,11 +69,12 @@
 		usage();
 
 	for (errors = 0; *argv; argv++) {
-		if (rmdir(*argv) < 0) {
+		if (pflag) {
+			errors |= rm_path(*argv);
+		} else if (rmdir(*argv) < 0) {
 			warn("%s", *argv);
 			errors = 1;
-		} else if (pflag)
-			errors |= rm_path(*argv);
+		}
 	}
 
 	exit(errors);
@@ -85,10 +86,7 @@
 	char *p;
 
 	p = path + strlen(path);
-	while (--p > path && *p == '/')
-		;
-	*++p = '\0';
-	while ((p = strrchr(path, '/')) != NULL) {
+	do {
 		/* Delete trailing slashes. */
 		while (--p > path && *p == '/')
 			;
@@ -99,6 +97,7 @@
 			return (1);
 		}
 	}
+	while ((p = strrchr(path, '/')) != NULL);
 
 	return (0);
 }




More information about the Submit mailing list