]> git.sur5r.net Git - u-boot/commitdiff
cmd_test: check for binary operators before unary
authorStephen Warren <swarren@nvidia.com>
Mon, 3 Feb 2014 20:21:03 +0000 (13:21 -0700)
committerTom Rini <trini@ti.com>
Wed, 19 Feb 2014 14:47:33 +0000 (09:47 -0500)
This better mirrors the behaviour of bash, for example:

$ if test -z = -z; then echo yes; else echo no; fi
yes

This is parsed as a string comparison of "-z" and "-z", since the check
for the binary "=" operator occurs first. Without this change, the
command would be parsed as a -z test of "-", followed by a syntax error;
a trailing -z without and operand.

This is a behavioural change, but I believe any commands affected were
previously invalid or bizarely formed.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
common/cmd_test.c

index 69b1b4cee69aa71a68d0ea70b2f984453c11d4f2..e65dd531877eaa57b343b9a1a5863f108fcd450b 100644 (file)
@@ -39,10 +39,6 @@ const struct {
        int op;
        int adv;
 } op_adv[] = {
-       {0, "-o", OP_OR, 1},
-       {0, "-a", OP_AND, 1},
-       {0, "-z", OP_STR_EMPTY, 2},
-       {0, "-n", OP_STR_NEMPTY, 2},
        {1, "=", OP_STR_EQ, 3},
        {1, "!=", OP_STR_NEQ, 3},
        {1, "<", OP_STR_LT, 3},
@@ -53,6 +49,10 @@ const struct {
        {1, "-le", OP_INT_LE, 3},
        {1, "-gt", OP_INT_GT, 3},
        {1, "-ge", OP_INT_GE, 3},
+       {0, "-o", OP_OR, 1},
+       {0, "-a", OP_AND, 1},
+       {0, "-z", OP_STR_EMPTY, 2},
+       {0, "-n", OP_STR_NEMPTY, 2},
 };
 
 static int do_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])