From f128bdbbd7ab14146a45166d20348f7705888353 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sat, 29 Jul 2017 00:59:24 +0200 Subject: shell: make standalone shell tab-complete "busybox" function old new delta busybox_main - 624 +624 packed_usage 31758 31777 +19 applet_names 2638 2646 +8 applet_main 1528 1532 +4 applet_install_loc 191 192 +1 run_applet_and_exit 681 78 -603 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 4/1 up/down: 656/-603) Total: 53 bytes Signed-off-by: Denys Vlasenko --- libbb/appletlib.c | 23 +++++++++++++++++++---- libbb/lineedit.c | 4 ++-- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/libbb/appletlib.c b/libbb/appletlib.c index b9fbbd1f2..7a1a7f005 100644 --- a/libbb/appletlib.c +++ b/libbb/appletlib.c @@ -760,11 +760,26 @@ static void install_links(const char *busybox UNUSED_PARAM, } # endif -# if ENABLE_BUSYBOX static void run_applet_and_exit(const char *name, char **argv) NORETURN; -/* If we were called as "busybox..." */ -static int busybox_main(char **argv) +# if ENABLE_BUSYBOX +# if ENABLE_FEATURE_SH_STANDALONE && ENABLE_FEATURE_TAB_COMPLETION + /* + * Insert "busybox" into applet table as well. + * This makes standalone shell tab-complete this name too. + * (Otherwise having "busybox" in applet table is not necessary, + * there is other code which routes "busyboxANY_SUFFIX" name + * to busybox_main()). + */ +//usage:#define busybox_trivial_usage NOUSAGE_STR +//usage:#define busybox_full_usage "" +//applet:IF_BUSYBOX(IF_FEATURE_SH_STANDALONE(IF_FEATURE_TAB_COMPLETION(APPLET(busybox, BB_DIR_BIN, BB_SUID_MAYBE)))) +int busybox_main(int argc, char *argv[]) MAIN_EXTERNALLY_VISIBLE; +# else +# define busybox_main(argc,argv) busybox_main(argv) +static +# endif +int busybox_main(int argc UNUSED_PARAM, char **argv) { if (!argv[1]) { /* Called without arguments */ @@ -937,7 +952,7 @@ static NORETURN void run_applet_and_exit(const char *name, char **argv) { # if ENABLE_BUSYBOX if (is_prefixed_with(name, "busybox")) - exit(busybox_main(argv)); + exit(busybox_main(/*unused:*/ 0, argv)); # endif # if NUM_APPLETS > 0 /* find_applet_by_name() search is more expensive, so goes second */ diff --git a/libbb/lineedit.c b/libbb/lineedit.c index 2a5d4e704..e5721b063 100644 --- a/libbb/lineedit.c +++ b/libbb/lineedit.c @@ -776,7 +776,7 @@ static NOINLINE unsigned complete_cmd_dir_file(const char *command, int type) } pf_len = strlen(pfind); -#if ENABLE_FEATURE_SH_STANDALONE && NUM_APPLETS != 1 +# if ENABLE_FEATURE_SH_STANDALONE && NUM_APPLETS != 1 if (type == FIND_EXE_ONLY && !dirbuf) { const char *p = applet_names; @@ -787,7 +787,7 @@ static NOINLINE unsigned complete_cmd_dir_file(const char *command, int type) continue; } } -#endif +# endif for (i = 0; i < npaths; i++) { DIR *dir; -- cgit v1.2.3