- fix test -f ./exists
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Fri, 15 Jun 2007 10:36:49 +0000 (10:36 -0000)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Fri, 15 Jun 2007 10:36:49 +0000 (10:36 -0000)
  Note that test -f ./exists -a "-u" = "-u" doesn't work and did not work even before r18282, so this is a breakage not caused by me..

coreutils/test.c

index bbbfce58e15de321edbd55a0f72c887eb960eeff..3796e2cd2b7f55039b7f877ec83eac0d4b8aa05b 100644 (file)
@@ -183,6 +183,7 @@ int bb_test(int argc, char **argv)
 {
        int res;
        char *arg0;
+       bool _off;
 
        arg0 = strrchr(argv[0], '/');
        if (!arg0++) arg0 = argv[0];
@@ -224,15 +225,19 @@ int bb_test(int argc, char **argv)
        if (argc == 2)
                return *argv[1] == '\0';
 //assert(argc);
+       /* remember if we saw argc==4 which wants *no* '!' test */
+       _off = argc - 4;
+       if (_off ?
+               (LONE_CHAR(argv[1], '!'))
+               : (argv[1][0] != '!' || argv[1][1] != '\0'))
        {
-               bool _off;
                if (argc == 3)
                        return *argv[2] != '\0';
-               _off = argc - 4;
+
                t_lex(argv[2 + _off]);
                if (t_wp_op && t_wp_op->op_type == BINOP) {
                        t_wp = &argv[1 + _off];
-                       return binop() == (LONE_CHAR(argv[1], '!'));
+                       return binop() == _off;
                }
        }
        t_wp = &argv[1];