Make 'busybox --help' distinguish between applets (including scripted applets) and custom scripts.
If no custom scripts are present the size of the binary is unchanged. Otherwise: function old new delta run_applet_and_exit 728 779 +51 .rodata 168667 168686 +19 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 70/0) Total: 70 bytes Signed-off-by: Ron Yorston <r...@pobox.com> --- libbb/appletlib.c | 83 ++++++++++++++++++++++++++++++++-------- scripts/embedded_scripts | 2 + 2 files changed, 68 insertions(+), 17 deletions(-) diff --git a/libbb/appletlib.c b/libbb/appletlib.c index e0a402031..9e17b84ac 100644 --- a/libbb/appletlib.c +++ b/libbb/appletlib.c @@ -55,8 +55,13 @@ # include "embedded_scripts.h" #else # define NUM_SCRIPTS 0 +# define NUM_CUSTOM_SCRIPTS 0 +# define NUM_APPLET_SCRIPTS 0 # define HAS_PROFILE 0 #endif + +#define SEPARATE_CUSTOM_SCRIPTS (NUM_CUSTOM_SCRIPTS > 0 || HAS_PROFILE) + #if NUM_SCRIPTS > 0 || HAS_PROFILE # include "bb_archive.h" static const char packed_scripts[] ALIGN1 = { PACKED_SCRIPTS }; @@ -758,6 +763,18 @@ static void install_links(const char *busybox UNUSED_PARAM, static void run_applet_and_exit(const char *name, char **argv) NORETURN; # if ENABLE_BUSYBOX +# if SEPARATE_CUSTOM_SCRIPTS +static int is_custom(int applet_no) +{ + int i; + + for (i = 0; i < NUM_CUSTOM_SCRIPTS; ++i) + if (applet_numbers[i] == applet_no) + return 1; + return 0; +} +# endif + # if ENABLE_FEATURE_SH_STANDALONE && ENABLE_FEATURE_TAB_COMPLETION /* * Insert "busybox" into applet table as well. @@ -776,6 +793,9 @@ static # endif int busybox_main(int argc UNUSED_PARAM, char **argv) { +# if SEPARATE_CUSTOM_SCRIPTS + int j, applet_no; +# endif if (!argv[1]) { /* Called without arguments */ const char *a; @@ -815,25 +835,54 @@ int busybox_main(int argc UNUSED_PARAM, char **argv) "\n" "Currently defined functions:\n" ); - col = 0; - /* prevent last comma to be in the very last pos */ - output_width--; - a = applet_names; - while (*a) { - int len2 = strlen(a) + 2; - if (col >= (int)output_width - len2) { - full_write2_str(",\n"); - col = 0; +# if SEPARATE_CUSTOM_SCRIPTS + for (j = 0; j < 2; j++) +# endif + { + col = 0; +# if SEPARATE_CUSTOM_SCRIPTS + if (j == 1) { + full_write2_str("\n\nCustom scripts:\n"); + if (HAS_PROFILE) { + full_write2_str("\t.profile"); + col = 14; + } } - if (col == 0) { - col = 6; - full_write2_str("\t"); - } else { - full_write2_str(", "); + applet_no = 0; +# endif + /* prevent last comma to be in the very last pos */ + output_width--; + a = applet_names; + while (*a) { + int len2 = strlen(a) + 2; +# if SEPARATE_CUSTOM_SCRIPTS + if (is_custom(applet_no)) { + if (j == 0) + goto skip; + } + else { + if (j == 1) + goto skip; + } +# endif + if (col >= (int)output_width - len2) { + full_write2_str(",\n"); + col = 0; + } + if (col == 0) { + col = 6; + full_write2_str("\t"); + } else { + full_write2_str(", "); + } + full_write2_str(a); + col += len2; +# if SEPARATE_CUSTOM_SCRIPTS + skip: + ++applet_no; +# endif + a += len2 - 1; } - full_write2_str(a); - col += len2; - a += len2 - 1; } full_write2_str("\n"); return 0; diff --git a/scripts/embedded_scripts b/scripts/embedded_scripts index 9e137ca1d..e030f6ae7 100755 --- a/scripts/embedded_scripts +++ b/scripts/embedded_scripts @@ -109,6 +109,8 @@ fi printf "\n" printf '#define NUM_SCRIPTS %d\n' $n +printf '#define NUM_CUSTOM_SCRIPTS %d\n' $(echo $custom_scripts | wc -w) +printf '#define NUM_APPLET_SCRIPTS %d\n' $(echo $applet_scripts | wc -w) if [ -f $custom_loc/.profile ] then # order is important: .profile must be first -- 2.19.1 _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox