| diff -urpN busybox-1.14.2/coreutils/test.c busybox-1.14.2-test/coreutils/test.c |
| --- busybox-1.14.2/coreutils/test.c 2009-07-05 22:59:28.000000000 +0200 |
| +++ busybox-1.14.2-test/coreutils/test.c 2009-07-17 01:46:28.000000000 +0200 |
| @@ -571,7 +571,14 @@ static number_t nexpr(enum token n) |
| |
| nest_msg(">nexpr(%s)\n", TOKSTR[n]); |
| if (n == UNOT) { |
| - res = !nexpr(check_operator(*++args)); |
| + n = check_operator(*++args); |
| + if (n == EOI) { |
| + /* special case: [ ! ], [ a -a ! ] are valid */ |
| + /* IOW, "! ARG" may miss ARG */ |
| + unnest_msg("<nexpr:1 (!EOI)\n"); |
| + return 1; |
| + } |
| + res = !nexpr(n); |
| unnest_msg("<nexpr:%lld\n", res); |
| return res; |
| } |
| @@ -742,7 +749,7 @@ int test_main(int argc, char **argv) |
| check_operator(argv[1]); |
| if (last_operator->op_type == BINOP) { |
| /* "test [!] arg1 <binary_op> arg2" */ |
| - args = &argv[0]; |
| + args = argv; |
| res = (binop() == 0); |
| goto ret; |
| } |
| @@ -755,7 +762,7 @@ int test_main(int argc, char **argv) |
| argv--; |
| } |
| #endif |
| - args = &argv[0]; |
| + args = argv; |
| res = !oexpr(check_operator(*args)); |
| |
| if (*args != NULL && *++args != NULL) { |
| diff -urpN busybox-1.14.2/testsuite/test.tests busybox-1.14.2-test/testsuite/test.tests |
| --- busybox-1.14.2/testsuite/test.tests 2009-07-05 22:59:22.000000000 +0200 |
| +++ busybox-1.14.2-test/testsuite/test.tests 2009-07-17 01:46:28.000000000 +0200 |
| @@ -21,6 +21,11 @@ testing "test '': should be false (1)" \ |
| "1\n" \ |
| "" "" |
| |
| +testing "test !: should be true (0)" \ |
| + "busybox test !; echo \$?" \ |
| + "0\n" \ |
| + "" "" |
| + |
| testing "test a: should be true (0)" \ |
| "busybox test a; echo \$?" \ |
| "0\n" \ |
| @@ -51,6 +56,11 @@ testing "test -lt = -gt: should be false |
| "1\n" \ |
| "" "" |
| |
| +testing "test a -a !: should be true (0)" \ |
| + "busybox test a -a !; echo \$?" \ |
| + "0\n" \ |
| + "" "" |
| + |
| testing "test -f = a -o b: should be true (0)" \ |
| "busybox test -f = a -o b; echo \$?" \ |
| "0\n" \ |