Fix an option parsing bug where things like
authorEric Andersen <andersen@codepoet.org>
Tue, 22 Aug 2000 01:00:56 +0000 (01:00 -0000)
committerEric Andersen <andersen@codepoet.org>
Tue, 22 Aug 2000 01:00:56 +0000 (01:00 -0000)
    chmod -r /tmp/file
wholdn't work (since it thought -r was an option).  Doh!
 -Erik

chmod_chown_chgrp.c

index c02f2a3cb26fb108a1a32fafc4360e129b646270..b347707eeb46d1ca008d0b78fef51d25cdf2c4f4 100644 (file)
@@ -76,6 +76,7 @@ static int fileAction(const char *fileName, struct stat *statbuf, void* junk)
 
 int chmod_chown_chgrp_main(int argc, char **argv)
 {
+       int stopIt = FALSE;
        int recursiveFlag = FALSE;
        char *groupName=NULL;
        char *p=NULL;
@@ -94,26 +95,28 @@ int chmod_chown_chgrp_main(int argc, char **argv)
 
        /* Parse options */
        while (--argc >= 0 && *argv && (**argv == '-')) {
-               while (*++(*argv)) {
+               while (stopIt==FALSE && *++(*argv)) {
                        switch (**argv) {
                                case 'R':
                                        recursiveFlag = TRUE;
                                        break;
                                default:
-                                       errorMsg(invalid_option, **argv);
-                                       usage(appUsage);
+                                       theMode=*argv-1;
+                                       stopIt = TRUE;
                        }
                }
+               if (stopIt==TRUE)
+                       break;
                argv++;
        }
 
        if (argc == 0 || *argv == NULL) {
                errorMsg(too_few_args);
-               usage(appUsage);
        }
 
        if (whichApp == CHMOD_APP) {
-               theMode = *argv;
+               if (theMode==NULL)
+                       theMode = *argv;
        } else {
 
                /* Find the selected group */
@@ -152,7 +155,7 @@ int chmod_chown_chgrp_main(int argc, char **argv)
        }
 
        /* Ok, ready to do the deed now */
-       if (argc <= 1) {
+       if (argc < 1) {
                fatalError(too_few_args);
        }
        while (argc-- > 1) {