X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=coreutils%2Frm.c;h=a84163272e3b8ae9ae9035e85977fb3eba2031b2;hb=eba8ed71f08f334bc94ac8eeedcd998fcdd05897;hp=5901c5da9b631ff37d25be79f87c6ce4ebaee825;hpb=815e90447064e287ad181c1231636e7f1b44f76c;p=oweals%2Fbusybox.git diff --git a/coreutils/rm.c b/coreutils/rm.c index 5901c5da9..a84163272 100644 --- a/coreutils/rm.c +++ b/coreutils/rm.c @@ -3,7 +3,7 @@ * Mini rm implementation for busybox * * - * Copyright (C) 1999,2000 by Lineo, inc. + * Copyright (C) 1999,2000,2001 by Lineo, inc. * Written by Erik Andersen , * * This program is free software; you can redistribute it and/or modify @@ -22,23 +22,14 @@ * */ -#include "internal.h" #include #include #include #include #include - -static const char *rm_usage = "rm [OPTION]... FILE...\n" -#ifndef BB_FEATURE_TRIVIAL_HELP - "\nRemove (unlink) the FILE(s). You may use '--' to\n" - "indicate that all following arguments are non-options.\n\n" - "Options:\n" - "\t-f\t\tremove existing destinations, never prompt\n" - "\t-r or -R\tremove the contents of directories recursively\n" -#endif - ; - +#include +#include +#include "busybox.h" static int recursiveFlag = FALSE; static int forceFlag = FALSE; @@ -48,7 +39,7 @@ static const char *srcName; static int fileAction(const char *fileName, struct stat *statbuf, void* junk) { if (unlink(fileName) < 0) { - perror(fileName); + perror_msg("%s", fileName); return (FALSE); } return (TRUE); @@ -56,8 +47,13 @@ static int fileAction(const char *fileName, struct stat *statbuf, void* junk) static int dirAction(const char *fileName, struct stat *statbuf, void* junk) { + if (recursiveFlag == FALSE) { + errno = EISDIR; + perror_msg("%s", fileName); + return (FALSE); + } if (rmdir(fileName) < 0) { - perror(fileName); + perror_msg("%s", fileName); return (FALSE); } return (TRUE); @@ -65,17 +61,16 @@ static int dirAction(const char *fileName, struct stat *statbuf, void* junk) extern int rm_main(int argc, char **argv) { + int status = EXIT_SUCCESS; int stopIt=FALSE; struct stat statbuf; - if (argc < 2) { - usage(rm_usage); - } + argc--; argv++; /* Parse any options */ - while (--argc >= 0 && *argv && **argv && stopIt==FALSE) { - while (**argv == '-') { + while (argc > 0 && stopIt == FALSE) { + if (**argv == '-') { while (*++(*argv)) switch (**argv) { case 'R': @@ -89,10 +84,17 @@ extern int rm_main(int argc, char **argv) stopIt = TRUE; break; default: - usage(rm_usage); + show_usage(); } + argc--; + argv++; } - argv++; + else + break; + } + + if (argc < 1 && forceFlag == FALSE) { + show_usage(); } while (argc-- > 0) { @@ -101,11 +103,11 @@ extern int rm_main(int argc, char **argv) && errno == ENOENT) { /* do not reports errors for non-existent files if -f, just skip them */ } else { - if (recursiveAction(srcName, recursiveFlag, FALSE, + if (recursive_action(srcName, recursiveFlag, FALSE, TRUE, fileAction, dirAction, NULL) == FALSE) { - exit(FALSE); + status = EXIT_FAILURE; } } } - exit(TRUE); + return status; }