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 <errno.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <getopt.h>
|
||||||
#include "busybox.h"
|
#include "busybox.h"
|
||||||
|
|
||||||
static int recursiveFlag = FALSE;
|
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)
|
extern int rm_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
int opt;
|
||||||
int status = EXIT_SUCCESS;
|
int status = EXIT_SUCCESS;
|
||||||
int stopIt=FALSE;
|
int stopIt=FALSE;
|
||||||
struct stat statbuf;
|
struct stat statbuf;
|
||||||
|
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
|
|
||||||
/* Parse any options */
|
/* do normal option parsing */
|
||||||
while (argc > 0 && stopIt == FALSE) {
|
while ((opt = getopt(argc, argv, "Rrf-"
|
||||||
if (**argv == '-') {
|
#ifdef BB_FEATURE_RM_INTERACTIVE
|
||||||
while (*++(*argv))
|
"i"
|
||||||
switch (**argv) {
|
#endif
|
||||||
|
)) > 0) {
|
||||||
|
switch (opt) {
|
||||||
case 'R':
|
case 'R':
|
||||||
case 'r':
|
case 'r':
|
||||||
recursiveFlag = TRUE;
|
recursiveFlag = TRUE;
|
||||||
@ -115,19 +117,14 @@ extern int rm_main(int argc, char **argv)
|
|||||||
default:
|
default:
|
||||||
show_usage();
|
show_usage();
|
||||||
}
|
}
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argc < 1 && forceFlag == FALSE) {
|
if ((argc-optind) < 1 && forceFlag == FALSE) {
|
||||||
show_usage();
|
show_usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
while (argc-- > 0) {
|
while (optind < argc) {
|
||||||
srcName = *(argv++);
|
srcName = argv[optind];
|
||||||
if (forceFlag == TRUE && lstat(srcName, &statbuf) != 0
|
if (forceFlag == TRUE && lstat(srcName, &statbuf) != 0
|
||||||
&& errno == ENOENT) {
|
&& errno == ENOENT) {
|
||||||
/* do not reports errors for non-existent files if -f, just skip them */
|
/* 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;
|
status = EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
optind++;
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
28
rm.c
28
rm.c
@ -33,6 +33,7 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <getopt.h>
|
||||||
#include "busybox.h"
|
#include "busybox.h"
|
||||||
|
|
||||||
static int recursiveFlag = FALSE;
|
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)
|
extern int rm_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
int opt;
|
||||||
int status = EXIT_SUCCESS;
|
int status = EXIT_SUCCESS;
|
||||||
int stopIt=FALSE;
|
int stopIt=FALSE;
|
||||||
struct stat statbuf;
|
struct stat statbuf;
|
||||||
|
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
|
|
||||||
/* Parse any options */
|
/* do normal option parsing */
|
||||||
while (argc > 0 && stopIt == FALSE) {
|
while ((opt = getopt(argc, argv, "Rrf-"
|
||||||
if (**argv == '-') {
|
#ifdef BB_FEATURE_RM_INTERACTIVE
|
||||||
while (*++(*argv))
|
"i"
|
||||||
switch (**argv) {
|
#endif
|
||||||
|
)) > 0) {
|
||||||
|
switch (opt) {
|
||||||
case 'R':
|
case 'R':
|
||||||
case 'r':
|
case 'r':
|
||||||
recursiveFlag = TRUE;
|
recursiveFlag = TRUE;
|
||||||
@ -115,19 +117,14 @@ extern int rm_main(int argc, char **argv)
|
|||||||
default:
|
default:
|
||||||
show_usage();
|
show_usage();
|
||||||
}
|
}
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argc < 1 && forceFlag == FALSE) {
|
if ((argc-optind) < 1 && forceFlag == FALSE) {
|
||||||
show_usage();
|
show_usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
while (argc-- > 0) {
|
while (optind < argc) {
|
||||||
srcName = *(argv++);
|
srcName = argv[optind];
|
||||||
if (forceFlag == TRUE && lstat(srcName, &statbuf) != 0
|
if (forceFlag == TRUE && lstat(srcName, &statbuf) != 0
|
||||||
&& errno == ENOENT) {
|
&& errno == ENOENT) {
|
||||||
/* do not reports errors for non-existent files if -f, just skip them */
|
/* 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;
|
status = EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
optind++;
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user