aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2016-11-23 18:31:48 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2016-11-23 18:31:48 +0100
commit15fb91cefb22d64952f34fe246fc8f257172af63 (patch)
treeb26c3168f2ea5e185eee1041c6f521855398783a
parent73f743a381dc389287d2d0e56a2b7988f67c0bfc (diff)
downloadbusybox-w32-15fb91cefb22d64952f34fe246fc8f257172af63.tar.gz
busybox-w32-15fb91cefb22d64952f34fe246fc8f257172af63.tar.bz2
busybox-w32-15fb91cefb22d64952f34fe246fc8f257172af63.zip
test: make [ and [[ forms individually selectable
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--coreutils/test.c26
-rwxr-xr-xinclude/applets.h.sh8
-rw-r--r--shell/ash.c4
3 files changed, 29 insertions, 9 deletions
diff --git a/coreutils/test.c b/coreutils/test.c
index 81c9b7dfe..9e18ee986 100644
--- a/coreutils/test.c
+++ b/coreutils/test.c
@@ -27,19 +27,33 @@
27//config: returning an appropriate exit code. The bash shell 27//config: returning an appropriate exit code. The bash shell
28//config: has test built in, ash can build it in optionally. 28//config: has test built in, ash can build it in optionally.
29//config: 29//config:
30//config:config TEST1
31//config: bool "test as ["
32//config: default y
33//config: help
34//config: Provide test command in the "[ EXPR ]" form
35//config:
36//config:config TEST2
37//config: bool "test as [["
38//config: default y
39//config: help
40//config: Provide test command in the "[[ EXPR ]]" form
41//config:
30//config:config FEATURE_TEST_64 42//config:config FEATURE_TEST_64
31//config: bool "Extend test to 64 bit" 43//config: bool "Extend test to 64 bit"
32//config: default y 44//config: default y
33//config: depends on TEST || ASH_BUILTIN_TEST || HUSH 45//config: depends on TEST || TEST1 || TEST2 || ASH_BUILTIN_TEST || HUSH
34//config: help 46//config: help
35//config: Enable 64-bit support in test. 47//config: Enable 64-bit support in test.
36 48
37//applet:IF_TEST(APPLET_NOFORK([, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
38//applet:IF_TEST(APPLET_NOFORK([[, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
39//applet:IF_TEST(APPLET_NOFORK(test, test, BB_DIR_USR_BIN, BB_SUID_DROP, test)) 49//applet:IF_TEST(APPLET_NOFORK(test, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
50//applet:IF_TEST1(APPLET_NOFORK([, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
51//applet:IF_TEST2(APPLET_NOFORK([[, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
40 52
41//kbuild:lib-$(CONFIG_TEST) += test.o test_ptr_hack.o 53//kbuild:lib-$(CONFIG_TEST) += test.o test_ptr_hack.o
42//kbuild:lib-$(CONFIG_ASH) += test.o test_ptr_hack.o 54//kbuild:lib-$(CONFIG_TEST1) += test.o test_ptr_hack.o
55//kbuild:lib-$(CONFIG_TEST2) += test.o test_ptr_hack.o
56//kbuild:lib-$(CONFIG_ASH_BUILTIN_TEST) += test.o test_ptr_hack.o
43//kbuild:lib-$(CONFIG_HUSH) += test.o test_ptr_hack.o 57//kbuild:lib-$(CONFIG_HUSH) += test.o test_ptr_hack.o
44 58
45/* "test --help" is special-cased to ignore --help */ 59/* "test --help" is special-cased to ignore --help */
@@ -827,7 +841,9 @@ int test_main(int argc, char **argv)
827 const char *arg0; 841 const char *arg0;
828 842
829 arg0 = bb_basename(argv[0]); 843 arg0 = bb_basename(argv[0]);
830 if (arg0[0] == '[') { 844 if ((ENABLE_TEST1 || ENABLE_TEST2 || ENABLE_ASH_BUILTIN_TEST || ENABLE_HUSH)
845 && (arg0[0] == '[')
846 ) {
831 --argc; 847 --argc;
832 if (!arg0[1]) { /* "[" ? */ 848 if (!arg0[1]) { /* "[" ? */
833 if (NOT_LONE_CHAR(argv[argc], ']')) { 849 if (NOT_LONE_CHAR(argv[argc], ']')) {
diff --git a/include/applets.h.sh b/include/applets.h.sh
index 6b8046c4b..bab4e0d72 100755
--- a/include/applets.h.sh
+++ b/include/applets.h.sh
@@ -5,13 +5,17 @@
5 5
6# CONFIG_applet names 6# CONFIG_applet names
7grep ^IF_ applets.h | grep -v IF_FEATURE_ | sed 's/IF_\([A-Z0-9._-]*\)(.*/\1/' \ 7grep ^IF_ applets.h | grep -v IF_FEATURE_ | sed 's/IF_\([A-Z0-9._-]*\)(.*/\1/' \
8| grep -v MODPROBE_SMALL | sed 's/BB_SYSCTL/SYSCTL/' \ 8| grep -v MODPROBE_SMALL \
9| sed 's/BB_SYSCTL/SYSCTL/' \
10| sed 's/TEST1/[/' \
11| sed 's/TEST2/[[/' \
9| sort | uniq \ 12| sort | uniq \
10>applets_APP1 13>applets_APP1
11 14
12# command line applet names 15# command line applet names
13grep ^IF_ applets.h | sed -e's/ //g' -e's/.*(\([a-z[][^,]*\),.*/\1/' \ 16grep ^IF_ applets.h | sed -e's/ //g' -e's/.*(\([a-z[][^,]*\),.*/\1/' \
14| grep -v '^bash$' | grep -v '^sh$' \ 17| grep -v '^bash$' \
18| grep -v '^sh$' \
15| tr a-z A-Z \ 19| tr a-z A-Z \
16| sort | uniq \ 20| sort | uniq \
17>applets_APP2 21>applets_APP2
diff --git a/shell/ash.c b/shell/ash.c
index 87f2127a1..15246f55f 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -9282,9 +9282,9 @@ static const struct builtincmd builtintab[] = {
9282 { BUILTIN_SPEC_REG ":" , truecmd }, 9282 { BUILTIN_SPEC_REG ":" , truecmd },
9283#if ENABLE_ASH_BUILTIN_TEST 9283#if ENABLE_ASH_BUILTIN_TEST
9284 { BUILTIN_REGULAR "[" , testcmd }, 9284 { BUILTIN_REGULAR "[" , testcmd },
9285#if ENABLE_ASH_BASH_COMPAT 9285# if ENABLE_ASH_BASH_COMPAT
9286 { BUILTIN_REGULAR "[[" , testcmd }, 9286 { BUILTIN_REGULAR "[[" , testcmd },
9287#endif 9287# endif
9288#endif 9288#endif
9289#if ENABLE_ASH_ALIAS 9289#if ENABLE_ASH_ALIAS
9290 { BUILTIN_REG_ASSG "alias" , aliascmd }, 9290 { BUILTIN_REG_ASSG "alias" , aliascmd },