aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2016-05-31 02:42:49 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2016-05-31 02:44:34 +0200
commit8e95068c7f28fe2a1e31b01636e3ed29eed09ef8 (patch)
tree366721e86423370093b64989a215bee4ab1790ff
parent877dedb8251be47b3614a371434081ae9b7b358b (diff)
downloadbusybox-8e95068c7f28fe2a1e31b01636e3ed29eed09ef8.tar.gz
Make busybox an optional applet
If it's disabled, code shrinks by about 900 bytes: function old new delta usr_bin 10 - -10 usr_sbin 11 - -11 install_dir 20 - -20 applet_install_loc 184 - -184 run_applet_and_exit 686 21 -665 ------------------------------------------------------------------------------ (add/remove: 0/4 grow/shrink: 0/1 up/down: 0/-890) Total: -890 bytes text data bss dec hex filename 911327 493 7336 919156 e0674 busybox_old 909848 493 7336 917677 e00ad busybox_unstripped but busybox executable by itself does not say anything useful: $ busybox busybox: applet not found Based on the patch by Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--Config.in12
-rw-r--r--libbb/appletlib.c10
2 files changed, 19 insertions, 3 deletions
diff --git a/Config.in b/Config.in
index 0a0b5d7cb..3d1870966 100644
--- a/Config.in
+++ b/Config.in
@@ -116,9 +116,21 @@ config FEATURE_COMPRESS_USAGE
and have very little memory, this might not be a win. Otherwise,
you probably want this.
+config BUSYBOX
+ bool "Include busybox applet"
+ default y
+ help
+ The busybox applet provides general help regarding busybox and
+ allows the included applets to be listed. It's also required
+ if applet links are to be installed at runtime.
+
+ If you can live without these features disabling this will save
+ some space.
+
config FEATURE_INSTALLER
bool "Support --install [-s] to install applet links at runtime"
default y
+ depends on BUSYBOX
help
Enable 'busybox --install [-s]' support. This will allow you to use
busybox at runtime to create hard links or symlinks for all the
diff --git a/libbb/appletlib.c b/libbb/appletlib.c
index b682e6b85..281123c37 100644
--- a/libbb/appletlib.c
+++ b/libbb/appletlib.c
@@ -701,7 +701,7 @@ static void install_links(const char *busybox, int use_symbolic_links,
continue;
}
}
-# else
+# elif ENABLE_BUSYBOX
static void install_links(const char *busybox UNUSED_PARAM,
int use_symbolic_links UNUSED_PARAM,
char *custom_install_dir UNUSED_PARAM)
@@ -709,6 +709,7 @@ static void install_links(const char *busybox UNUSED_PARAM,
}
# endif
+# if ENABLE_BUSYBOX
/* If we were called as "busybox..." */
static int busybox_main(char **argv)
{
@@ -784,10 +785,10 @@ static int busybox_main(char **argv)
const char *a = applet_names;
dup2(1, 2);
while (*a) {
-# if ENABLE_FEATURE_INSTALLER
+# if ENABLE_FEATURE_INSTALLER
if (argv[1][6]) /* --list-full? */
full_write2_str(install_dir[APPLET_INSTALL_LOC(i)] + 1);
-# endif
+# endif
full_write2_str(a);
full_write2_str("\n");
i++;
@@ -843,6 +844,7 @@ static int busybox_main(char **argv)
/* POSIX: "If a command is not found, the exit status shall be 127" */
exit(127);
}
+# endif
void FAST_FUNC run_applet_no_and_exit(int applet_no, char **argv)
{
@@ -886,8 +888,10 @@ void FAST_FUNC run_applet_and_exit(const char *name, char **argv)
{
int applet;
+# if ENABLE_BUSYBOX
if (is_prefixed_with(name, "busybox"))
exit(busybox_main(argv));
+# endif
/* find_applet_by_name() search is more expensive, so goes second */
applet = find_applet_by_name(name);
if (applet >= 0)