diff options
Diffstat (limited to 'shell')
-rw-r--r-- | shell/Config.src | 14 | ||||
-rw-r--r-- | shell/ash.c | 16 | ||||
-rw-r--r-- | shell/hush.c | 16 |
3 files changed, 31 insertions, 15 deletions
diff --git a/shell/Config.src b/shell/Config.src index 959d3cb42..bc7218fe5 100644 --- a/shell/Config.src +++ b/shell/Config.src | |||
@@ -161,6 +161,20 @@ config FEATURE_SH_HISTFILESIZE | |||
161 | to set shell history size. Note that its max value is capped | 161 | to set shell history size. Note that its max value is capped |
162 | by "History size" setting in library tuning section. | 162 | by "History size" setting in library tuning section. |
163 | 163 | ||
164 | config FEATURE_SH_EMBEDDED_SCRIPTS | ||
165 | bool "Embed scripts in the binary" | ||
166 | default y | ||
167 | depends on ASH || HUSH || SH_IS_ASH || BASH_IS_ASH || SH_IS_HUSH || BASH_IS_HUSH | ||
168 | help | ||
169 | Allow scripts to be compressed and embedded in the busybox | ||
170 | binary. The scripts should be placed in the 'embed' directory | ||
171 | at build time. Like applets, scripts can be run as | ||
172 | 'busybox SCRIPT ...' or by linking their name to the binary. | ||
173 | |||
174 | This also allows applets to be implemented as scripts: place | ||
175 | the script in 'applets_sh' and a stub C file containing | ||
176 | configuration in the appropriate subsystem directory. | ||
177 | |||
164 | endif # Options common to all shells | 178 | endif # Options common to all shells |
165 | 179 | ||
166 | endmenu | 180 | endmenu |
diff --git a/shell/ash.c b/shell/ash.c index 04e4006c8..9ce1d1a76 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -148,20 +148,6 @@ | |||
148 | //config: you to run the specified command or builtin, | 148 | //config: you to run the specified command or builtin, |
149 | //config: even when there is a function with the same name. | 149 | //config: even when there is a function with the same name. |
150 | //config: | 150 | //config: |
151 | //config:config ASH_EMBEDDED_SCRIPTS | ||
152 | //config: bool "Embed scripts in the binary" | ||
153 | //config: default y | ||
154 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | ||
155 | //config: help | ||
156 | //config: Allow scripts to be compressed and embedded in the busybox | ||
157 | //config: binary. The scripts should be placed in the 'embed' directory | ||
158 | //config: at build time. Like applets, scripts can be run as | ||
159 | //config: 'busybox SCRIPT ...' or by linking their name to the binary. | ||
160 | //config: | ||
161 | //config: This also allows applets to be implemented as scripts: place | ||
162 | //config: the script in 'applets_sh' and a stub C file containing | ||
163 | //config: configuration in the appropriate subsystem directory. | ||
164 | //config: | ||
165 | //config:endif # ash options | 151 | //config:endif # ash options |
166 | 152 | ||
167 | //applet:IF_ASH(APPLET(ash, BB_DIR_BIN, BB_SUID_DROP)) | 153 | //applet:IF_ASH(APPLET(ash, BB_DIR_BIN, BB_SUID_DROP)) |
@@ -195,7 +181,7 @@ | |||
195 | #include <sys/times.h> | 181 | #include <sys/times.h> |
196 | #include <sys/utsname.h> /* for setting $HOSTNAME */ | 182 | #include <sys/utsname.h> /* for setting $HOSTNAME */ |
197 | #include "busybox.h" /* for applet_names */ | 183 | #include "busybox.h" /* for applet_names */ |
198 | #if ENABLE_ASH_EMBEDDED_SCRIPTS | 184 | #if ENABLE_FEATURE_SH_EMBEDDED_SCRIPTS |
199 | # include "embedded_scripts.h" | 185 | # include "embedded_scripts.h" |
200 | #else | 186 | #else |
201 | # define NUM_SCRIPTS 0 | 187 | # define NUM_SCRIPTS 0 |
diff --git a/shell/hush.c b/shell/hush.c index 431010f09..90191408d 100644 --- a/shell/hush.c +++ b/shell/hush.c | |||
@@ -367,6 +367,11 @@ | |||
367 | # define PIPE_BUF 4096 /* amount of buffering in a pipe */ | 367 | # define PIPE_BUF 4096 /* amount of buffering in a pipe */ |
368 | #endif | 368 | #endif |
369 | 369 | ||
370 | #if ENABLE_FEATURE_SH_EMBEDDED_SCRIPTS && !(ENABLE_ASH || ENABLE_SH_IS_ASH || ENABLE_BASH_IS_ASH) | ||
371 | # include "embedded_scripts.h" | ||
372 | #else | ||
373 | # define NUM_SCRIPTS 0 | ||
374 | #endif | ||
370 | 375 | ||
371 | /* So far, all bash compat is controlled by one config option */ | 376 | /* So far, all bash compat is controlled by one config option */ |
372 | /* Separate defines document which part of code implements what */ | 377 | /* Separate defines document which part of code implements what */ |
@@ -9951,6 +9956,14 @@ int hush_main(int argc, char **argv) | |||
9951 | /* http://www.opengroup.org/onlinepubs/9699919799/utilities/sh.html */ | 9956 | /* http://www.opengroup.org/onlinepubs/9699919799/utilities/sh.html */ |
9952 | flags = (argv[0] && argv[0][0] == '-') ? OPT_login : 0; | 9957 | flags = (argv[0] && argv[0][0] == '-') ? OPT_login : 0; |
9953 | builtin_argc = 0; | 9958 | builtin_argc = 0; |
9959 | #if NUM_SCRIPTS > 0 | ||
9960 | if (argc < 0) { | ||
9961 | optarg = get_script_content(-argc - 1); | ||
9962 | optind = 0; | ||
9963 | argc = string_array_len(argv); | ||
9964 | goto run_script; | ||
9965 | } | ||
9966 | #endif | ||
9954 | while (1) { | 9967 | while (1) { |
9955 | int opt = getopt(argc, argv, "+c:exinsl" | 9968 | int opt = getopt(argc, argv, "+c:exinsl" |
9956 | #if !BB_MMU | 9969 | #if !BB_MMU |
@@ -9974,6 +9987,9 @@ int hush_main(int argc, char **argv) | |||
9974 | * Note: the form without ARG0 never happens: | 9987 | * Note: the form without ARG0 never happens: |
9975 | * sh ... -c 'builtin' BARGV... "" | 9988 | * sh ... -c 'builtin' BARGV... "" |
9976 | */ | 9989 | */ |
9990 | #if NUM_SCRIPTS > 0 | ||
9991 | run_script: | ||
9992 | #endif | ||
9977 | if (!G.root_pid) { | 9993 | if (!G.root_pid) { |
9978 | G.root_pid = getpid(); | 9994 | G.root_pid = getpid(); |
9979 | G.root_ppid = getppid(); | 9995 | G.root_ppid = getppid(); |