Do not interpret -[rwxs] as options in chmod(1)
To chmod recursively use `-R' as opposed to `-r' so we can distinguish it from the mode `-r'.
This commit is contained in:
parent
6492c59072
commit
d8718d4159
30
chmod.c
30
chmod.c
@ -16,26 +16,44 @@ static mode_t mode = 0;
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
eprintf("usage: %s [-r] mode [file...]\n", argv0);
|
||||
eprintf("usage: %s [-R] mode [file...]\n", argv0);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int c;
|
||||
argv0 = argv[0];
|
||||
|
||||
ARGBEGIN {
|
||||
case 'r':
|
||||
while (--argc > 0 && (*++argv)[0] == '-') {
|
||||
while ((c = *++argv[0])) {
|
||||
switch (c) {
|
||||
case 'R':
|
||||
rflag = true;
|
||||
break;
|
||||
case 'r': case 'w': case 'x': case 's':
|
||||
/*
|
||||
* -[rwxs] are valid modes so do not interpret
|
||||
* them as options - in any case we are done if
|
||||
* we hit this case
|
||||
*/
|
||||
--argv[0];
|
||||
goto done;
|
||||
default:
|
||||
usage();
|
||||
} ARGEND;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
parsemode(argv[0]);
|
||||
argv++;
|
||||
argc--;
|
||||
|
||||
if(argc < 1)
|
||||
usage();
|
||||
|
||||
parsemode(argv[0]);
|
||||
for(++argv; argc > 0; argc--)
|
||||
for (; argc > 0; argc--, argv++)
|
||||
chmodr(argv[0]);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user