From 5a9d2b6e024e6c20d4d7b8c170985554c0df043d Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Sun, 1 May 2022 09:45:37 +0100 Subject: [PATCH] libbb: make '--help' handling more consistent Running an applet with '--help' as its only argument is treated as a special case. If additional arguments follow '--help' the behaviour is inconsistent: - applets which call single_argv() print help and do nothing else; - applets which call getopt() report "unrecognized option '--help'" and print help anyway; - expr says "expr: syntax error" and doesn't print help; - printenv silently ignores '--help', prints any other variables and doesn't print help; - realpath says "--help: No such file or directory", prints the path of any other files and doesn't print help. If the first argument is '--help' ignore any other arguments and print help. This is more consistent and most likely what the user wanted. See also commit 6bdfbc4cb (libbb: fix '--help' handling in FEATURE_SH_NOFORK=y). function old new delta show_usage_if_dash_dash_help 75 69 -6 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-6) Total: -6 bytes Signed-off-by: Ron Yorston Signed-off-by: Denys Vlasenko --- libbb/appletlib.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libbb/appletlib.c b/libbb/appletlib.c index d8ab2a450..9b9d7dbd6 100644 --- a/libbb/appletlib.c +++ b/libbb/appletlib.c @@ -258,7 +258,6 @@ void lbb_prepare(const char *applet /* Redundant for busybox (run_applet_and_exit covers that case) * but needed for "individual applet" mode */ if (argv[1] - && !argv[2] && strcmp(argv[1], "--help") == 0 && !is_prefixed_with(applet, "busybox") ) { @@ -940,8 +939,8 @@ void FAST_FUNC show_usage_if_dash_dash_help(int applet_no, char **argv) && applet_no != APPLET_NO_echo # endif ) { - if (argv[1] && !argv[2] && strcmp(argv[1], "--help") == 0) { - /* Make "foo --help" exit with 0: */ + if (argv[1] && strcmp(argv[1], "--help") == 0) { + /* Make "foo --help [...]" exit with 0: */ xfunc_error_retval = 0; bb_show_usage(); }