diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2021-03-15 17:42:25 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-03-15 17:44:53 +0100 |
commit | f26e5634b161e58f56b072f6e703f262e723a80d (patch) | |
tree | 5b66bfa60c13f8e696dd4209a4c3728acd52c58e /libbb/appletlib.c | |
parent | f25d254dfd4243698c31a4f3153d4ac72aa9e9bd (diff) |
echo: special case "echo --help": it should not show help text
While at it, fix "busybox --help echo" and other special applets to still print
the help text.
function old new delta
run_applet_and_exit 732 761 +29
show_usage_if_dash_dash_help 70 78 +8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 37/0) Total: 37 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb/appletlib.c')
-rw-r--r-- | libbb/appletlib.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/libbb/appletlib.c b/libbb/appletlib.c index 67c540abb..2feed64dd 100644 --- a/libbb/appletlib.c +++ b/libbb/appletlib.c @@ -263,9 +263,14 @@ void lbb_prepare(const char *applet && strcmp(argv[1], "--help") == 0 && !is_prefixed_with(applet, "busybox") ) { - /* Special case. POSIX says "test --help" - * should be no different from e.g. "test --foo". */ - if (!ENABLE_TEST || strcmp(applet_name, "test") != 0) + /* Special cases. POSIX says "test --help" + * should be no different from e.g. "test --foo". + */ + if (!(ENABLE_TEST && strcmp(applet_name, "test") == 0) + && !(ENABLE_TRUE && strcmp(applet_name, "true") == 0) + && !(ENABLE_FALSE && strcmp(applet_name, "false") == 0) + && !(ENABLE_ECHO && strcmp(applet_name, "echo") == 0) + ) bb_show_usage(); } #endif @@ -891,15 +896,21 @@ int busybox_main(int argc UNUSED_PARAM, char **argv) if (!argv[2]) goto help; /* convert to "<applet> --help" */ - argv[0] = argv[2]; + applet_name = argv[0] = argv[2]; argv[2] = NULL; + if (find_applet_by_name(applet_name) >= 0) { + /* Make "--help foo" exit with 0: */ + xfunc_error_retval = 0; + bb_show_usage(); + } /* else: unknown applet, fall through (causes "applet not found" later) */ } else { /* "busybox <applet> arg1 arg2 ..." */ argv++; + /* We support "busybox /a/path/to/applet args..." too. Allows for + * "#!/bin/busybox"-style wrappers + */ + applet_name = bb_get_last_path_component_nostrip(argv[0]); } - /* We support "busybox /a/path/to/applet args..." too. Allows for - * "#!/bin/busybox"-style wrappers */ - applet_name = bb_get_last_path_component_nostrip(argv[0]); run_applet_and_exit(applet_name, argv); } # endif @@ -910,7 +921,7 @@ void FAST_FUNC show_usage_if_dash_dash_help(int applet_no, char **argv) /* Special case. POSIX says "test --help" * should be no different from e.g. "test --foo". * Thus for "test", we skip --help check. - * "true" and "false" are also special. + * "true", "false", "echo" are also special. */ if (1 # if defined APPLET_NO_test @@ -922,6 +933,9 @@ void FAST_FUNC show_usage_if_dash_dash_help(int applet_no, char **argv) # if defined APPLET_NO_false && applet_no != APPLET_NO_false # endif +# if defined APPLET_NO_echo + && applet_no != APPLET_NO_echo +# endif ) { if (argv[1] && !argv[2] && strcmp(argv[1], "--help") == 0) { /* Make "foo --help" exit with 0: */ |