diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2016-05-31 02:42:49 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2016-05-31 02:44:34 +0200 |
| commit | 8e95068c7f28fe2a1e31b01636e3ed29eed09ef8 (patch) | |
| tree | 366721e86423370093b64989a215bee4ab1790ff /libbb | |
| parent | 877dedb8251be47b3614a371434081ae9b7b358b (diff) | |
| download | busybox-w32-8e95068c7f28fe2a1e31b01636e3ed29eed09ef8.tar.gz busybox-w32-8e95068c7f28fe2a1e31b01636e3ed29eed09ef8.tar.bz2 busybox-w32-8e95068c7f28fe2a1e31b01636e3ed29eed09ef8.zip | |
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>
Diffstat (limited to 'libbb')
| -rw-r--r-- | libbb/appletlib.c | 10 |
1 files changed, 7 insertions, 3 deletions
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, | |||
| 701 | continue; | 701 | continue; |
| 702 | } | 702 | } |
| 703 | } | 703 | } |
| 704 | # else | 704 | # elif ENABLE_BUSYBOX |
| 705 | static void install_links(const char *busybox UNUSED_PARAM, | 705 | static void install_links(const char *busybox UNUSED_PARAM, |
| 706 | int use_symbolic_links UNUSED_PARAM, | 706 | int use_symbolic_links UNUSED_PARAM, |
| 707 | char *custom_install_dir UNUSED_PARAM) | 707 | char *custom_install_dir UNUSED_PARAM) |
| @@ -709,6 +709,7 @@ static void install_links(const char *busybox UNUSED_PARAM, | |||
| 709 | } | 709 | } |
| 710 | # endif | 710 | # endif |
| 711 | 711 | ||
| 712 | # if ENABLE_BUSYBOX | ||
| 712 | /* If we were called as "busybox..." */ | 713 | /* If we were called as "busybox..." */ |
| 713 | static int busybox_main(char **argv) | 714 | static int busybox_main(char **argv) |
| 714 | { | 715 | { |
| @@ -784,10 +785,10 @@ static int busybox_main(char **argv) | |||
| 784 | const char *a = applet_names; | 785 | const char *a = applet_names; |
| 785 | dup2(1, 2); | 786 | dup2(1, 2); |
| 786 | while (*a) { | 787 | while (*a) { |
| 787 | # if ENABLE_FEATURE_INSTALLER | 788 | # if ENABLE_FEATURE_INSTALLER |
| 788 | if (argv[1][6]) /* --list-full? */ | 789 | if (argv[1][6]) /* --list-full? */ |
| 789 | full_write2_str(install_dir[APPLET_INSTALL_LOC(i)] + 1); | 790 | full_write2_str(install_dir[APPLET_INSTALL_LOC(i)] + 1); |
| 790 | # endif | 791 | # endif |
| 791 | full_write2_str(a); | 792 | full_write2_str(a); |
| 792 | full_write2_str("\n"); | 793 | full_write2_str("\n"); |
| 793 | i++; | 794 | i++; |
| @@ -843,6 +844,7 @@ static int busybox_main(char **argv) | |||
| 843 | /* POSIX: "If a command is not found, the exit status shall be 127" */ | 844 | /* POSIX: "If a command is not found, the exit status shall be 127" */ |
| 844 | exit(127); | 845 | exit(127); |
| 845 | } | 846 | } |
| 847 | # endif | ||
| 846 | 848 | ||
| 847 | void FAST_FUNC run_applet_no_and_exit(int applet_no, char **argv) | 849 | void FAST_FUNC run_applet_no_and_exit(int applet_no, char **argv) |
| 848 | { | 850 | { |
| @@ -886,8 +888,10 @@ void FAST_FUNC run_applet_and_exit(const char *name, char **argv) | |||
| 886 | { | 888 | { |
| 887 | int applet; | 889 | int applet; |
| 888 | 890 | ||
| 891 | # if ENABLE_BUSYBOX | ||
| 889 | if (is_prefixed_with(name, "busybox")) | 892 | if (is_prefixed_with(name, "busybox")) |
| 890 | exit(busybox_main(argv)); | 893 | exit(busybox_main(argv)); |
| 894 | # endif | ||
| 891 | /* find_applet_by_name() search is more expensive, so goes second */ | 895 | /* find_applet_by_name() search is more expensive, so goes second */ |
| 892 | applet = find_applet_by_name(name); | 896 | applet = find_applet_by_name(name); |
| 893 | if (applet >= 0) | 897 | if (applet >= 0) |
