diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2016-10-01 14:33:08 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2016-10-01 14:33:08 +0200 |
commit | 514b51ddf3474647e7089e467d4c01107c357fac (patch) | |
tree | 57a794eabd0c1db9966088f3268ddd804d42f9a5 | |
parent | cac4d002e78339272f75952959b4ce78b9239e7f (diff) | |
download | busybox-w32-514b51ddf3474647e7089e467d4c01107c357fac.tar.gz busybox-w32-514b51ddf3474647e7089e467d4c01107c357fac.tar.bz2 busybox-w32-514b51ddf3474647e7089e467d4c01107c357fac.zip |
ash: make internal globbing code selectable from config
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | shell/ash.c | 82 |
1 files changed, 50 insertions, 32 deletions
diff --git a/shell/ash.c b/shell/ash.c index 4adf92ac2..dcf92da82 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -39,13 +39,22 @@ | |||
39 | 39 | ||
40 | #include <setjmp.h> | 40 | #include <setjmp.h> |
41 | #include <fnmatch.h> | 41 | #include <fnmatch.h> |
42 | #include <glob.h> | ||
43 | #include <sys/times.h> | 42 | #include <sys/times.h> |
44 | #include <sys/utsname.h> /* for setting $HOSTNAME */ | 43 | #include <sys/utsname.h> /* for setting $HOSTNAME */ |
45 | 44 | ||
46 | #include "busybox.h" /* for applet_names */ | 45 | #include "busybox.h" /* for applet_names */ |
47 | #include "unicode.h" | ||
48 | 46 | ||
47 | #if defined(__ANDROID_API__) && __ANDROID_API__ <= 24 | ||
48 | /* Bionic at least up to version 24 has no glob() */ | ||
49 | # undef ENABLE_ASH_INTERNAL_GLOB | ||
50 | # define ENABLE_ASH_INTERNAL_GLOB 0 | ||
51 | #endif | ||
52 | |||
53 | #if !ENABLE_ASH_INTERNAL_GLOB | ||
54 | # include <glob.h> | ||
55 | #endif | ||
56 | |||
57 | #include "unicode.h" | ||
49 | #include "shell_common.h" | 58 | #include "shell_common.h" |
50 | #if ENABLE_SH_MATH_SUPPORT | 59 | #if ENABLE_SH_MATH_SUPPORT |
51 | # include "math.h" | 60 | # include "math.h" |
@@ -87,6 +96,42 @@ | |||
87 | //config: shell (by Herbert Xu), which was created by porting the 'ash' shell | 96 | //config: shell (by Herbert Xu), which was created by porting the 'ash' shell |
88 | //config: (written by Kenneth Almquist) from NetBSD. | 97 | //config: (written by Kenneth Almquist) from NetBSD. |
89 | //config: | 98 | //config: |
99 | //config:config ASH_OPTIMIZE_FOR_SIZE | ||
100 | //config: bool "Optimize for size instead of speed" | ||
101 | //config: default y | ||
102 | //config: depends on ASH | ||
103 | //config: help | ||
104 | //config: Compile ash for reduced size at the price of speed. | ||
105 | //config: | ||
106 | //config:config ASH_INTERNAL_GLOB | ||
107 | //config: bool "Use internal glob() implementation" | ||
108 | //config: default n | ||
109 | //config: depends on ASH | ||
110 | //config: help | ||
111 | //config: Do not use glob() function from libc, use internal implementation. | ||
112 | //config: Use this if you are getting "glob.h: No such file or directory" | ||
113 | //config: or similar build errors. | ||
114 | //config: | ||
115 | //config:config ASH_RANDOM_SUPPORT | ||
116 | //config: bool "Pseudorandom generator and $RANDOM variable" | ||
117 | //config: default y | ||
118 | //config: depends on ASH | ||
119 | //config: help | ||
120 | //config: Enable pseudorandom generator and dynamic variable "$RANDOM". | ||
121 | //config: Each read of "$RANDOM" will generate a new pseudorandom value. | ||
122 | //config: You can reset the generator by using a specified start value. | ||
123 | //config: After "unset RANDOM" the generator will switch off and this | ||
124 | //config: variable will no longer have special treatment. | ||
125 | //config: | ||
126 | //config:config ASH_EXPAND_PRMT | ||
127 | //config: bool "Expand prompt string" | ||
128 | //config: default y | ||
129 | //config: depends on ASH | ||
130 | //config: help | ||
131 | //config: "PS#" may contain volatile content, such as backquote commands. | ||
132 | //config: This option recreates the prompt string from the environment | ||
133 | //config: variable each time it is displayed. | ||
134 | //config: | ||
90 | //config:config ASH_BASH_COMPAT | 135 | //config:config ASH_BASH_COMPAT |
91 | //config: bool "bash-compatible extensions" | 136 | //config: bool "bash-compatible extensions" |
92 | //config: default y | 137 | //config: default y |
@@ -166,33 +211,6 @@ | |||
166 | //config: help | 211 | //config: help |
167 | //config: Enable "check for new mail" function in the ash shell. | 212 | //config: Enable "check for new mail" function in the ash shell. |
168 | //config: | 213 | //config: |
169 | //config:config ASH_OPTIMIZE_FOR_SIZE | ||
170 | //config: bool "Optimize for size instead of speed" | ||
171 | //config: default y | ||
172 | //config: depends on ASH | ||
173 | //config: help | ||
174 | //config: Compile ash for reduced size at the price of speed. | ||
175 | //config: | ||
176 | //config:config ASH_RANDOM_SUPPORT | ||
177 | //config: bool "Pseudorandom generator and $RANDOM variable" | ||
178 | //config: default y | ||
179 | //config: depends on ASH | ||
180 | //config: help | ||
181 | //config: Enable pseudorandom generator and dynamic variable "$RANDOM". | ||
182 | //config: Each read of "$RANDOM" will generate a new pseudorandom value. | ||
183 | //config: You can reset the generator by using a specified start value. | ||
184 | //config: After "unset RANDOM" the generator will switch off and this | ||
185 | //config: variable will no longer have special treatment. | ||
186 | //config: | ||
187 | //config:config ASH_EXPAND_PRMT | ||
188 | //config: bool "Expand prompt string" | ||
189 | //config: default y | ||
190 | //config: depends on ASH | ||
191 | //config: help | ||
192 | //config: "PS#" may contain volatile content, such as backquote commands. | ||
193 | //config: This option recreates the prompt string from the environment | ||
194 | //config: variable each time it is displayed. | ||
195 | //config: | ||
196 | 214 | ||
197 | //applet:IF_ASH(APPLET(ash, BB_DIR_BIN, BB_SUID_DROP)) | 215 | //applet:IF_ASH(APPLET(ash, BB_DIR_BIN, BB_SUID_DROP)) |
198 | //applet:IF_FEATURE_SH_IS_ASH(APPLET_ODDNAME(sh, ash, BB_DIR_BIN, BB_SUID_DROP, sh)) | 216 | //applet:IF_FEATURE_SH_IS_ASH(APPLET_ODDNAME(sh, ash, BB_DIR_BIN, BB_SUID_DROP, sh)) |
@@ -6994,7 +7012,7 @@ addfname(const char *name) | |||
6994 | } | 7012 | } |
6995 | 7013 | ||
6996 | /* If we want to use glob() from libc... */ | 7014 | /* If we want to use glob() from libc... */ |
6997 | #if 1 | 7015 | #if !ENABLE_ASH_INTERNAL_GLOB |
6998 | 7016 | ||
6999 | /* Add the result of glob() to the list */ | 7017 | /* Add the result of glob() to the list */ |
7000 | static void | 7018 | static void |
@@ -7055,7 +7073,7 @@ nometa: | |||
7055 | } | 7073 | } |
7056 | 7074 | ||
7057 | #else | 7075 | #else |
7058 | /* Homegrown globbing code. (dash also has both, uses homegrown one.) */ | 7076 | /* ENABLE_ASH_INTERNAL_GLOB: Homegrown globbing code. (dash also has both, uses homegrown one.) */ |
7059 | 7077 | ||
7060 | /* | 7078 | /* |
7061 | * Do metacharacter (i.e. *, ?, [...]) expansion. | 7079 | * Do metacharacter (i.e. *, ?, [...]) expansion. |
@@ -7286,7 +7304,7 @@ expandmeta(struct strlist *str /*, int flag*/) | |||
7286 | str = str->next; | 7304 | str = str->next; |
7287 | } | 7305 | } |
7288 | } | 7306 | } |
7289 | #endif /* our globbing code */ | 7307 | #endif /* ENABLE_ASH_INTERNAL_GLOB */ |
7290 | 7308 | ||
7291 | /* | 7309 | /* |
7292 | * Perform variable substitution and command substitution on an argument, | 7310 | * Perform variable substitution and command substitution on an argument, |