test: recognize /path/to/[ case too
authorDenis Vlasenko <vda.linux@googlemail.com>
Fri, 8 Jun 2007 07:33:45 +0000 (07:33 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Fri, 8 Jun 2007 07:33:45 +0000 (07:33 -0000)
coreutils/test.c

index a09f7e6ec4a415a5142f62936b984d520a745fcc..f8617616821b8b32c6a7d1b6a5ba25b5d0fa884a 100644 (file)
@@ -182,21 +182,26 @@ static void initialize_group_array(void);
 int bb_test(int argc, char **argv)
 {
        int res;
-
-       if (LONE_CHAR(argv[0], '[')) {
-               --argc;
-               if (NOT_LONE_CHAR(argv[argc], ']')) {
-                       bb_error_msg("missing ]");
-                       return 2;
-               }
-               argv[argc] = NULL;
-       } else if (strcmp(argv[0], "[[") == 0) {
-               --argc;
-               if (strcmp(argv[argc], "]]")) {
-                       bb_error_msg("missing ]]");
-                       return 2;
+       char *arg0;
+
+       arg0 = strrchr(argv[0], '/');
+       if (!arg0++) arg0 = argv[0];
+       if (arg0[0] == '[') {
+               if (!arg0[1]) { /* "[" ? */
+                       --argc;
+                       if (NOT_LONE_CHAR(argv[argc], ']')) {
+                               bb_error_msg("missing ]");
+                               return 2;
+                       }
+                       argv[argc] = NULL;
+               } else if (LONE_CHAR(arg0, '[') == 0) { /* "[[" ? */
+                       --argc;
+                       if (strcmp(argv[argc], "]]") != 0) {
+                               bb_error_msg("missing ]]");
+                               return 2;
+                       }
+                       argv[argc] = NULL;
                }
-               argv[argc] = NULL;
        }
 
        res = setjmp(leaving);