-Wall cleaning and implement -p commandline option.

-p mod obtained from: NetBSD
This commit is contained in:
Steve Price 1996-12-14 06:13:51 +00:00
parent 1f64b5c98e
commit 11bde14e4f
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=20422
2 changed files with 61 additions and 23 deletions

View File

@ -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

View File

@ -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);
}