X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=rm.c;h=a9501ec7f004c23277b5c913c0657c5f1c8da1d2;hb=46f44d24fcc25a5d6e13e0453485881bdf147e91;hp=b1cda3aed061c0fa8e3d9a3b67da0cb7f6a498b1;hpb=e97da4007913bd29d8a18d038de29d9d4549163d;p=oweals%2Fbusybox.git diff --git a/rm.c b/rm.c index b1cda3aed..a9501ec7f 100644 --- a/rm.c +++ b/rm.c @@ -22,24 +22,13 @@ * */ -#include "internal.h" +#include "busybox.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 - ; - - static int recursiveFlag = FALSE; static int forceFlag = FALSE; static const char *srcName; @@ -48,7 +37,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 +45,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,6 +59,7 @@ 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; @@ -106,11 +101,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; }