ln: fixed command line parser. Added support for "--"

This commit is contained in:
Pavel Roskin 2000-06-15 18:04:40 +00:00
parent 3f75503fa0
commit 2e965239ee
3 changed files with 26 additions and 17 deletions

View File

@ -61,7 +61,8 @@
* Simplified freeramdisk and added argument checking -- Pavel Roskin.
* 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 "ln -s -s" and similar abuses. Further fixes
and "--" support from Pavel Roskin.
* Fixed segfault caused by "cp -a -a" and similar abuses.
* Implemented "rm -- <foo>". Implementation fixed by Pavel Roskin.
* "which" rewritten to use stat(). Fixes to improve its compatability

View File

@ -51,16 +51,14 @@ extern int ln_main(int argc, char **argv)
{
char *linkName;
int linkIntoDirFlag;
int stopIt = FALSE;
if (argc < 3) {
usage(ln_usage);
}
argc--;
argv++;
/* Parse any options */
while (--argc >= 0 && *argv && **argv) {
while (**argv == '-') {
while (argc > 0 && stopIt == FALSE) {
if (**argv == '-') {
while (*++(*argv))
switch (**argv) {
case 's':
@ -72,15 +70,21 @@ extern int ln_main(int argc, char **argv)
case 'n':
followLinks = FALSE;
break;
case '-':
stopIt = TRUE;
break;
default:
usage(ln_usage);
}
}
argc--;
argv++;
}
else
break;
}
if (argc < 1) {
fatalError("ln: missing file argument\n");
if (argc < 2) {
usage(ln_usage);
}
linkName = argv[argc - 1];

20
ln.c
View File

@ -51,16 +51,14 @@ extern int ln_main(int argc, char **argv)
{
char *linkName;
int linkIntoDirFlag;
int stopIt = FALSE;
if (argc < 3) {
usage(ln_usage);
}
argc--;
argv++;
/* Parse any options */
while (--argc >= 0 && *argv && **argv) {
while (**argv == '-') {
while (argc > 0 && stopIt == FALSE) {
if (**argv == '-') {
while (*++(*argv))
switch (**argv) {
case 's':
@ -72,15 +70,21 @@ extern int ln_main(int argc, char **argv)
case 'n':
followLinks = FALSE;
break;
case '-':
stopIt = TRUE;
break;
default:
usage(ln_usage);
}
}
argc--;
argv++;
}
else
break;
}
if (argc < 1) {
fatalError("ln: missing file argument\n");
if (argc < 2) {
usage(ln_usage);
}
linkName = argv[argc - 1];