summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDenys Vlasenko2018-11-01 09:53:25 +0100
committerDenys Vlasenko2018-11-01 10:15:13 +0100
commit4f2ef4a836be37b25808c94f41c7c85895db6f93 (patch)
treee224e4f3b8513b35655da80b26369d42bd62d24d /include
parent552796791f8c5aa12dfb790e3a94c2d905f367ee (diff)
downloadbusybox-4f2ef4a836be37b25808c94f41c7c85895db6f93.zip
busybox-4f2ef4a836be37b25808c94f41c7c85895db6f93.tar.gz
ash: allow shell scripts to be embedded in the binary
To assist in the deployment of shell scripts it may be convenient to embed them in the BusyBox binary. 'Embed scripts in the binary' takes any files in the directory 'embed', concatenates them with null separators, compresses them and embeds them in the binary. When scripts are embedded in the binary, scripts can be run as 'busybox SCRIPT [ARGS]' or by usual (sym)link mechanism. embed/nologin is provided as an example. function old new delta packed_scripts - 123 +123 unpack_scripts - 87 +87 ash_main 1103 1171 +68 run_applet_and_exit 78 128 +50 get_script_content - 32 +32 script_names - 10 +10 expmeta 663 659 -4 ------------------------------------------------------------------------------ (add/remove: 4/0 grow/shrink: 2/1 up/down: 370/-4) Total: 366 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'include')
-rw-r--r--include/.gitignore1
-rw-r--r--include/libbb.h8
2 files changed, 9 insertions, 0 deletions
diff --git a/include/.gitignore b/include/.gitignore
index 75afff9..13a96e0 100644
--- a/include/.gitignore
+++ b/include/.gitignore
@@ -5,6 +5,7 @@
/autoconf.h
/bbconfigopts_bz2.h
/bbconfigopts.h
+/embedded_scripts.h
/NUM_APPLETS.h
/usage_compressed.h
/usage.h
diff --git a/include/libbb.h b/include/libbb.h
index 140404f..affff58 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -1321,9 +1321,17 @@ void bb_logenv_override(void) FAST_FUNC;
#define MAIN_EXTERNALLY_VISIBLE
#endif
+/* Embedded script support */
+//int find_script_by_name(const char *arg IF_FEATURE_SH_STANDALONE(, int offset)) FAST_FUNC;
+char *get_script_content(unsigned n) FAST_FUNC;
/* Applets which are useful from another applets */
int bb_cat(char** argv) FAST_FUNC;
+int ash_main(int argc, char** argv)
+#if ENABLE_ASH || ENABLE_SH_IS_ASH || ENABLE_BASH_IS_ASH
+ MAIN_EXTERNALLY_VISIBLE
+#endif
+;
/* If shell needs them, they exist even if not enabled as applets */
int echo_main(int argc, char** argv) IF_ECHO(MAIN_EXTERNALLY_VISIBLE);
int printf_main(int argc, char **argv) IF_PRINTF(MAIN_EXTERNALLY_VISIBLE);