diff options
author | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2007-06-25 11:02:18 +0000 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2007-06-25 11:02:18 +0000 |
commit | 4bbeebd6668338ddf821e48010e79e3bd2eed4a7 (patch) | |
tree | 4bdf3a6e8a5d033dc3fcb1a3ac9746e07e797555 | |
parent | d08b43f8a572613815b30bf39a44e8ee580150aa (diff) | |
download | busybox-w32-4bbeebd6668338ddf821e48010e79e3bd2eed4a7.tar.gz busybox-w32-4bbeebd6668338ddf821e48010e79e3bd2eed4a7.tar.bz2 busybox-w32-4bbeebd6668338ddf821e48010e79e3bd2eed4a7.zip |
- pull fixes from trunk
-rw-r--r-- | coreutils/test.c | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/coreutils/test.c b/coreutils/test.c index a09f7e6ec..c26e7e572 100644 --- a/coreutils/test.c +++ b/coreutils/test.c | |||
@@ -182,19 +182,23 @@ static void initialize_group_array(void); | |||
182 | int bb_test(int argc, char **argv) | 182 | int bb_test(int argc, char **argv) |
183 | { | 183 | { |
184 | int res; | 184 | int res; |
185 | char *arg0; | ||
186 | bool _off; | ||
185 | 187 | ||
186 | if (LONE_CHAR(argv[0], '[')) { | 188 | arg0 = strrchr(argv[0], '/'); |
189 | if (!arg0++) arg0 = argv[0]; | ||
190 | if (arg0[0] == '[') { | ||
187 | --argc; | 191 | --argc; |
188 | if (NOT_LONE_CHAR(argv[argc], ']')) { | 192 | if (!arg0[1]) { /* "[" ? */ |
189 | bb_error_msg("missing ]"); | 193 | if (NOT_LONE_CHAR(argv[argc], ']')) { |
190 | return 2; | 194 | bb_error_msg("missing ]"); |
191 | } | 195 | return 2; |
192 | argv[argc] = NULL; | 196 | } |
193 | } else if (strcmp(argv[0], "[[") == 0) { | 197 | } else { /* assuming "[[" */ |
194 | --argc; | 198 | if (strcmp(argv[argc], "]]") != 0) { |
195 | if (strcmp(argv[argc], "]]")) { | 199 | bb_error_msg("missing ]]"); |
196 | bb_error_msg("missing ]]"); | 200 | return 2; |
197 | return 2; | 201 | } |
198 | } | 202 | } |
199 | argv[argc] = NULL; | 203 | argv[argc] = NULL; |
200 | } | 204 | } |
@@ -219,15 +223,19 @@ int bb_test(int argc, char **argv) | |||
219 | if (argc == 2) | 223 | if (argc == 2) |
220 | return *argv[1] == '\0'; | 224 | return *argv[1] == '\0'; |
221 | //assert(argc); | 225 | //assert(argc); |
222 | if (LONE_CHAR(argv[1], '!')) { | 226 | /* remember if we saw argc==4 which wants *no* '!' test */ |
223 | bool _off; | 227 | _off = argc - 4; |
228 | if (_off ? | ||
229 | (LONE_CHAR(argv[1], '!')) | ||
230 | : (argv[1][0] != '!' || argv[1][1] != '\0')) | ||
231 | { | ||
224 | if (argc == 3) | 232 | if (argc == 3) |
225 | return *argv[2] != '\0'; | 233 | return *argv[2] != '\0'; |
226 | _off = argc - 4; | 234 | |
227 | t_lex(argv[2 + _off]); | 235 | t_lex(argv[2 + _off]); |
228 | if (t_wp_op && t_wp_op->op_type == BINOP) { | 236 | if (t_wp_op && t_wp_op->op_type == BINOP) { |
229 | t_wp = &argv[1 + _off]; | 237 | t_wp = &argv[1 + _off]; |
230 | return binop() == 1; | 238 | return binop() == _off; |
231 | } | 239 | } |
232 | } | 240 | } |
233 | t_wp = &argv[1]; | 241 | t_wp = &argv[1]; |
@@ -378,7 +386,7 @@ static int binop(void) | |||
378 | static int filstat(char *nm, enum token mode) | 386 | static int filstat(char *nm, enum token mode) |
379 | { | 387 | { |
380 | struct stat s; | 388 | struct stat s; |
381 | int i; | 389 | int i = i; /* gcc 3.x thinks it can be used uninitialized */ |
382 | 390 | ||
383 | if (mode == FILSYM) { | 391 | if (mode == FILSYM) { |
384 | #ifdef S_IFLNK | 392 | #ifdef S_IFLNK |