aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2000-08-22 01:00:56 +0000
committerEric Andersen <andersen@codepoet.org>2000-08-22 01:00:56 +0000
commitce82c8ab7782d30ae639652f10d9d9f4069410aa (patch)
tree54853663d564d33633115d3466ea440f04a77d7c
parent2368a387edced9e9722d6b8e7a82bd2e191ca347 (diff)
downloadbusybox-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.c15
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
77int chmod_chown_chgrp_main(int argc, char **argv) 77int 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) {