diff options
author | Eric Andersen <andersen@codepoet.org> | 2000-08-22 01:00:56 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2000-08-22 01:00:56 +0000 |
commit | ce82c8ab7782d30ae639652f10d9d9f4069410aa (patch) | |
tree | 54853663d564d33633115d3466ea440f04a77d7c | |
parent | 2368a387edced9e9722d6b8e7a82bd2e191ca347 (diff) | |
download | busybox-w32-ce82c8ab7782d30ae639652f10d9d9f4069410aa.tar.gz busybox-w32-ce82c8ab7782d30ae639652f10d9d9f4069410aa.tar.bz2 busybox-w32-ce82c8ab7782d30ae639652f10d9d9f4069410aa.zip |
Fix an option parsing bug where things like
chmod -r /tmp/file
wholdn't work (since it thought -r was an option). Doh!
-Erik
-rw-r--r-- | chmod_chown_chgrp.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/chmod_chown_chgrp.c b/chmod_chown_chgrp.c index c02f2a3cb..b347707ee 100644 --- a/chmod_chown_chgrp.c +++ b/chmod_chown_chgrp.c | |||
@@ -76,6 +76,7 @@ static int fileAction(const char *fileName, struct stat *statbuf, void* junk) | |||
76 | 76 | ||
77 | int chmod_chown_chgrp_main(int argc, char **argv) | 77 | int chmod_chown_chgrp_main(int argc, char **argv) |
78 | { | 78 | { |
79 | int stopIt = FALSE; | ||
79 | int recursiveFlag = FALSE; | 80 | int recursiveFlag = FALSE; |
80 | char *groupName=NULL; | 81 | char *groupName=NULL; |
81 | char *p=NULL; | 82 | char *p=NULL; |
@@ -94,26 +95,28 @@ int chmod_chown_chgrp_main(int argc, char **argv) | |||
94 | 95 | ||
95 | /* Parse options */ | 96 | /* Parse options */ |
96 | while (--argc >= 0 && *argv && (**argv == '-')) { | 97 | while (--argc >= 0 && *argv && (**argv == '-')) { |
97 | while (*++(*argv)) { | 98 | while (stopIt==FALSE && *++(*argv)) { |
98 | switch (**argv) { | 99 | switch (**argv) { |
99 | case 'R': | 100 | case 'R': |
100 | recursiveFlag = TRUE; | 101 | recursiveFlag = TRUE; |
101 | break; | 102 | break; |
102 | default: | 103 | default: |
103 | errorMsg(invalid_option, **argv); | 104 | theMode=*argv-1; |
104 | usage(appUsage); | 105 | stopIt = TRUE; |
105 | } | 106 | } |
106 | } | 107 | } |
108 | if (stopIt==TRUE) | ||
109 | break; | ||
107 | argv++; | 110 | argv++; |
108 | } | 111 | } |
109 | 112 | ||
110 | if (argc == 0 || *argv == NULL) { | 113 | if (argc == 0 || *argv == NULL) { |
111 | errorMsg(too_few_args); | 114 | errorMsg(too_few_args); |
112 | usage(appUsage); | ||
113 | } | 115 | } |
114 | 116 | ||
115 | if (whichApp == CHMOD_APP) { | 117 | if (whichApp == CHMOD_APP) { |
116 | theMode = *argv; | 118 | if (theMode==NULL) |
119 | theMode = *argv; | ||
117 | } else { | 120 | } else { |
118 | 121 | ||
119 | /* Find the selected group */ | 122 | /* Find the selected group */ |
@@ -152,7 +155,7 @@ int chmod_chown_chgrp_main(int argc, char **argv) | |||
152 | } | 155 | } |
153 | 156 | ||
154 | /* Ok, ready to do the deed now */ | 157 | /* Ok, ready to do the deed now */ |
155 | if (argc <= 1) { | 158 | if (argc < 1) { |
156 | fatalError(too_few_args); | 159 | fatalError(too_few_args); |
157 | } | 160 | } |
158 | while (argc-- > 1) { | 161 | while (argc-- > 1) { |