getopt-ify rm so that BB_FEATURE_RM_INTERACTIVE will work

This commit is contained in:
Eric Andersen 2001-03-19 18:52:37 +00:00
parent c75586e06d
commit 7c25441792
2 changed files with 64 additions and 68 deletions

View File

@ -33,6 +33,7 @@
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <getopt.h>
#include "busybox.h"
static int recursiveFlag = FALSE;
@ -82,18 +83,19 @@ static int dirAction(const char *fileName, struct stat *statbuf, void* junk)
extern int rm_main(int argc, char **argv)
{
int opt;
int status = EXIT_SUCCESS;
int stopIt=FALSE;
struct stat statbuf;
argc--;
argv++;
/* Parse any options */
while (argc > 0 && stopIt == FALSE) {
if (**argv == '-') {
while (*++(*argv))
switch (**argv) {
/* do normal option parsing */
while ((opt = getopt(argc, argv, "Rrf-"
#ifdef BB_FEATURE_RM_INTERACTIVE
"i"
#endif
)) > 0) {
switch (opt) {
case 'R':
case 'r':
recursiveFlag = TRUE;
@ -115,19 +117,14 @@ extern int rm_main(int argc, char **argv)
default:
show_usage();
}
argc--;
argv++;
}
else
break;
}
if (argc < 1 && forceFlag == FALSE) {
if ((argc-optind) < 1 && forceFlag == FALSE) {
show_usage();
}
while (argc-- > 0) {
srcName = *(argv++);
while (optind < argc) {
srcName = argv[optind];
if (forceFlag == TRUE && lstat(srcName, &statbuf) != 0
&& errno == ENOENT) {
/* do not reports errors for non-existent files if -f, just skip them */
@ -137,6 +134,7 @@ extern int rm_main(int argc, char **argv)
status = EXIT_FAILURE;
}
}
optind++;
}
return status;
}

28
rm.c
View File

@ -33,6 +33,7 @@
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <getopt.h>
#include "busybox.h"
static int recursiveFlag = FALSE;
@ -82,18 +83,19 @@ static int dirAction(const char *fileName, struct stat *statbuf, void* junk)
extern int rm_main(int argc, char **argv)
{
int opt;
int status = EXIT_SUCCESS;
int stopIt=FALSE;
struct stat statbuf;
argc--;
argv++;
/* Parse any options */
while (argc > 0 && stopIt == FALSE) {
if (**argv == '-') {
while (*++(*argv))
switch (**argv) {
/* do normal option parsing */
while ((opt = getopt(argc, argv, "Rrf-"
#ifdef BB_FEATURE_RM_INTERACTIVE
"i"
#endif
)) > 0) {
switch (opt) {
case 'R':
case 'r':
recursiveFlag = TRUE;
@ -115,19 +117,14 @@ extern int rm_main(int argc, char **argv)
default:
show_usage();
}
argc--;
argv++;
}
else
break;
}
if (argc < 1 && forceFlag == FALSE) {
if ((argc-optind) < 1 && forceFlag == FALSE) {
show_usage();
}
while (argc-- > 0) {
srcName = *(argv++);
while (optind < argc) {
srcName = argv[optind];
if (forceFlag == TRUE && lstat(srcName, &statbuf) != 0
&& errno == ENOENT) {
/* do not reports errors for non-existent files if -f, just skip them */
@ -137,6 +134,7 @@ extern int rm_main(int argc, char **argv)
status = EXIT_FAILURE;
}
}
optind++;
}
return status;
}