getopt-ify rm so that BB_FEATURE_RM_INTERACTIVE will work
This commit is contained in:
parent
c75586e06d
commit
7c25441792
@ -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
28
rm.c
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user