summaryrefslogtreecommitdiffstats
path: root/bin/rmdir
diff options
context:
space:
mode:
authorsteve <steve@FreeBSD.org>1996-12-14 06:13:51 +0000
committersteve <steve@FreeBSD.org>1996-12-14 06:13:51 +0000
commitbf5151c8fc90a9910d62e58a4bbd1dcd8967e1a9 (patch)
tree78f307c8dee9cbe8a6bbe7544d46476bfbda41f6 /bin/rmdir
parent2aae101b543d6a80a1e8490fe4c9300ffafc1bc7 (diff)
downloadFreeBSD-src-bf5151c8fc90a9910d62e58a4bbd1dcd8967e1a9.zip
FreeBSD-src-bf5151c8fc90a9910d62e58a4bbd1dcd8967e1a9.tar.gz
-Wall cleaning and implement -p commandline option.
-p mod obtained from: NetBSD
Diffstat (limited to 'bin/rmdir')
-rw-r--r--bin/rmdir/rmdir.132
-rw-r--r--bin/rmdir/rmdir.c52
2 files changed, 61 insertions, 23 deletions
diff --git a/bin/rmdir/rmdir.1 b/bin/rmdir/rmdir.1
index 30d0fa5..8ae09ec 100644
--- a/bin/rmdir/rmdir.1
+++ b/bin/rmdir/rmdir.1
@@ -33,7 +33,7 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)rmdir.1 8.1 (Berkeley) 5/31/93
-.\" $Id: rmdir.1,v 1.2 1994/09/24 02:57:11 davidg Exp $
+.\" $Id: rmdir.1,v 1.3 1996/08/29 18:06:08 wosch Exp $
.\"
.Dd May 31, 1993
.Dt RMDIR 1
@@ -43,7 +43,7 @@
.Nd remove directories
.Sh SYNOPSIS
.Nm rmdir
-.\" .Op Fl p
+.Op Fl p
.Ar directory ...
.Sh DESCRIPTION
The rmdir utility removes the directory entry specified by
@@ -58,24 +58,24 @@ must be specified first so the parent directory
is empty when
.Nm rmdir
tries to remove it.
-.\" .Pp
-.\" The following option is available:
-.\" .Bl -tag -width Ds
-.\" .It Fl p
-.\" Each
-.\" .Ar directory
-.\" argument is treated as a pathname of which all
-.\" components will be removed, if they are empty,
-.\" starting with the last most component.
-.\" (See
-.\" .Xr rm 1
-.\" for fully non-discriminant recursive removal).
-.\" .El
+.Pp
+The following option is available:
+.Bl -tag -width Ds
+.It Fl p
+Each
+.Ar directory
+argument is treated as a pathname of which all
+components will be removed, if they are empty,
+starting with the last most component.
+(See
+.Xr rm 1
+for fully non-discriminant recursive removal.)
+.El
.Pp
The
.Nm rmdir
utility exits with one of the following values:
-.Bl -tag -width flag
+.Bl -tag -width Ds
.It Li \&0
Each directory entry specified by a dir operand
referred to an empty directory and was removed
diff --git a/bin/rmdir/rmdir.c b/bin/rmdir/rmdir.c
index e47cbb2..b9151dd 100644
--- a/bin/rmdir/rmdir.c
+++ b/bin/rmdir/rmdir.c
@@ -30,17 +30,17 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id$
+ * $Id: rmdir.c,v 1.2 1994/09/24 02:57:13 davidg Exp $
*/
#ifndef lint
-static char copyright[] =
+static char const copyright[] =
"@(#) Copyright (c) 1992, 1993, 1994\n\
The Regents of the University of California. All rights reserved.\n";
#endif /* not lint */
#ifndef lint
-static char sccsid[] = "@(#)rmdir.c 8.3 (Berkeley) 4/2/94";
+static char const sccsid[] = "@(#)rmdir.c 8.3 (Berkeley) 4/2/94";
#endif /* not lint */
#include <err.h>
@@ -50,6 +50,7 @@ static char sccsid[] = "@(#)rmdir.c 8.3 (Berkeley) 4/2/94";
#include <string.h>
#include <unistd.h>
+int rm_path __P((char *));
void usage __P((void));
int
@@ -58,9 +59,14 @@ main(argc, argv)
char *argv[];
{
int ch, errors;
+ int pflag;
- while ((ch = getopt(argc, argv, "")) != EOF)
+ pflag = 0;
+ while ((ch = getopt(argc, argv, "p")) != EOF)
switch(ch) {
+ case 'p':
+ pflag = 1;
+ break;
case '?':
default:
usage();
@@ -71,18 +77,50 @@ main(argc, argv)
if (argc == 0)
usage();
- for (errors = 0; *argv; ++argv)
+ for (errors = 0; *argv; argv++) {
+ char *p;
+
+ /* Delete trailing slashes, per POSIX. */
+ p = *argv + strlen(*argv);
+ while (--p > *argv && *p == '/')
+ ;
+ *++p = '\0';
+
if (rmdir(*argv) < 0) {
warn("%s", *argv);
errors = 1;
- }
+ } else if (pflag)
+ errors |= rm_path(*argv);
+ }
+
exit(errors);
}
+int
+rm_path(path)
+ char *path;
+{
+ char *p;
+
+ while ((p = strrchr(path, '/')) != NULL) {
+ /* Delete trailing slashes. */
+ while (--p > path && *p == '/')
+ ;
+ *++p = '\0';
+
+ if (rmdir(path) < 0) {
+ warn("%s", path);
+ return (1);
+ }
+ }
+
+ return (0);
+}
+
void
usage()
{
- (void)fprintf(stderr, "usage: rmdir directory ...\n");
+ (void)fprintf(stderr, "usage: rmdir [-p] directory ...\n");
exit(1);
}
OpenPOWER on IntegriCloud