/*
* Mini rm implementation for busybox
*
- * Copyright (C) 1998 by Erik Andersen <andersee@debian.org>
+ *
+ * Copyright (C) 1999 by Lineo, inc.
+ * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include <time.h>
#include <utime.h>
#include <dirent.h>
+#include <errno.h>
-static const char* rm_usage = "rm [OPTION]... FILE...\n"
+static const char* rm_usage = "rm [OPTION]... FILE...\n\n"
"Remove (unlink) the FILE(s).\n\n"
-"\t-f\tremove existing destinations, never prompt\n"
-"\t-r\tremove the contents of directories recursively\n";
+"Options:\n"
+"\t-f\t\tremove existing destinations, never prompt\n"
+"\t-r or -R\tremove the contents of directories recursively\n";
static int recursiveFlag = FALSE;
extern int rm_main(int argc, char **argv)
{
+ struct stat statbuf;
if (argc < 2) {
usage( rm_usage);
while (**argv == '-') {
while (*++(*argv))
switch (**argv) {
+ case 'R':
case 'r':
recursiveFlag = TRUE;
break;
while (argc-- > 0) {
srcName = *(argv++);
- if (recursiveAction( srcName, recursiveFlag, TRUE, TRUE,
- fileAction, dirAction) == FALSE) {
- exit( FALSE);
+ if (forceFlag == TRUE && lstat(srcName, &statbuf) != 0 && errno == ENOENT) {
+ /* do not reports errors for non-existent files if -f, just skip them */
+ }
+ else {
+ if (recursiveAction( srcName, recursiveFlag, FALSE,
+ TRUE, fileAction, dirAction) == FALSE) {
+ exit( FALSE);
+ }
}
}
exit( TRUE);