diff options
-rw-r--r-- | coreutils/test.c | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/coreutils/test.c b/coreutils/test.c index a09f7e6ec..f86176168 100644 --- a/coreutils/test.c +++ b/coreutils/test.c | |||
@@ -182,21 +182,26 @@ 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 | 185 | char *arg0; | |
186 | if (LONE_CHAR(argv[0], '[')) { | 186 | |
187 | --argc; | 187 | arg0 = strrchr(argv[0], '/'); |
188 | if (NOT_LONE_CHAR(argv[argc], ']')) { | 188 | if (!arg0++) arg0 = argv[0]; |
189 | bb_error_msg("missing ]"); | 189 | if (arg0[0] == '[') { |
190 | return 2; | 190 | if (!arg0[1]) { /* "[" ? */ |
191 | } | 191 | --argc; |
192 | argv[argc] = NULL; | 192 | if (NOT_LONE_CHAR(argv[argc], ']')) { |
193 | } else if (strcmp(argv[0], "[[") == 0) { | 193 | bb_error_msg("missing ]"); |
194 | --argc; | 194 | return 2; |
195 | if (strcmp(argv[argc], "]]")) { | 195 | } |
196 | bb_error_msg("missing ]]"); | 196 | argv[argc] = NULL; |
197 | return 2; | 197 | } else if (LONE_CHAR(arg0, '[') == 0) { /* "[[" ? */ |
198 | --argc; | ||
199 | if (strcmp(argv[argc], "]]") != 0) { | ||
200 | bb_error_msg("missing ]]"); | ||
201 | return 2; | ||
202 | } | ||
203 | argv[argc] = NULL; | ||
198 | } | 204 | } |
199 | argv[argc] = NULL; | ||
200 | } | 205 | } |
201 | 206 | ||
202 | res = setjmp(leaving); | 207 | res = setjmp(leaving); |