Fixed a bunch of stuff:

* Fixed segfault caused by "touch -c"
	* Fixed segfault caused by "rm -f"
	* Fixed segfault caused by "ln -s -s" and similar abuses.
	* Fixed segfault caused by "cp -a -a" and similar abuses.
	* Implemented "rm -- <foo>"
updated docs accordingly.
 -Erik
This commit is contained in:
Eric Andersen
2000-06-06 16:15:23 +00:00
parent c389d91181
commit 815e904470
11 changed files with 123 additions and 98 deletions

37
rm.c
View File

@ -31,7 +31,8 @@
static const char *rm_usage = "rm [OPTION]... FILE...\n"
#ifndef BB_FEATURE_TRIVIAL_HELP
"\nRemove (unlink) the FILE(s).\n\n"
"\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"
@ -64,29 +65,33 @@ static int dirAction(const char *fileName, struct stat *statbuf, void* junk)
extern int rm_main(int argc, char **argv)
{
int stopIt=FALSE;
struct stat statbuf;
if (argc < 2) {
usage(rm_usage);
}
argc--;
argv++;
/* Parse any options */
while (**argv == '-') {
while (*++(*argv))
switch (**argv) {
case 'R':
case 'r':
recursiveFlag = TRUE;
break;
case 'f':
forceFlag = TRUE;
break;
default:
usage(rm_usage);
}
argc--;
while (--argc >= 0 && *argv && **argv && stopIt==FALSE) {
while (**argv == '-') {
while (*++(*argv))
switch (**argv) {
case 'R':
case 'r':
recursiveFlag = TRUE;
break;
case 'f':
forceFlag = TRUE;
break;
case '-':
stopIt = TRUE;
break;
default:
usage(rm_usage);
}
}
argv++;
}