Skip to content
Snippets Groups Projects
Commit 4c80f29e authored by Stephen Warren's avatar Stephen Warren Committed by Tom Rini
Browse files

cmd_test: check for binary operators before unary


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: default avatarStephen Warren <swarren@nvidia.com>
parent 490ba833
No related branches found
No related tags found
No related merge requests found
......@@ -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[])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment