summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2025-10-13 21:56:47 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2025-10-13 21:56:47 +0200
commitb99a529177b4adbe3b3f5a86f46b9cf386d4cbe4 (patch)
tree744980f8f881ab8ba61692f719db36945c9fd053
parent3ff3cb483db4165a6d1d4d05bb1f957b4fa5a9b4 (diff)
busybox: optional --version support
function old new delta busybox_main 695 734 +39 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--Config.in7
-rw-r--r--libbb/appletlib.c16
2 files changed, 19 insertions, 4 deletions
diff --git a/Config.in b/Config.in
index ad0cd1e26..6b925b517 100644
--- a/Config.in
+++ b/Config.in
@@ -204,6 +204,13 @@ config FEATURE_INSTALLER
busybox at runtime to create hard links or symlinks for all the
applets that are compiled into busybox.
+config FEATURE_VERSION
+ bool "Support --version"
+ default y
+ depends on BUSYBOX
+ help
+ Enable 'busybox --version' support.
+
config INSTALL_NO_USR
bool "Don't use /usr"
default n
diff --git a/libbb/appletlib.c b/libbb/appletlib.c
index d2e5900b5..17216baab 100644
--- a/libbb/appletlib.c
+++ b/libbb/appletlib.c
@@ -892,14 +892,14 @@ int busybox_main(int argc UNUSED_PARAM, char **argv)
}
if (strcmp(argv[1], "--help") == 0) {
- /* "busybox --help [<applet>]" */
+ /* "busybox --help [APPLET]" */
if (!argv[2]
# if ENABLE_FEATURE_SH_STANDALONE && ENABLE_FEATURE_TAB_COMPLETION
|| strcmp(argv[2], "busybox") == 0 /* prevent getting "No help available" */
# endif
)
goto help;
- /* convert to "<applet> --help" */
+ /* convert to "APPLET --help" */
applet_name = argv[0] = argv[2];
argv[2] = NULL;
if (find_applet_by_name(applet_name) >= 0) {
@@ -907,8 +907,16 @@ int busybox_main(int argc UNUSED_PARAM, char **argv)
xfunc_error_retval = 0;
bb_show_usage();
} /* else: unknown applet, fall through (causes "applet not found" later) */
- } else {
- /* "busybox <applet> arg1 arg2 ..." */
+ }
+# if ENABLE_FEATURE_VERSION
+ else if (!argv[2] && strcmp(argv[1], "--version") == 0) {
+ full_write1_str(bb_banner); /* reuse const string */
+ full_write1_str("\n");
+ return 0;
+ }
+# endif
+ else {
+ /* "busybox APPLET arg1 arg2 ..." */
argv++;
/* We support "busybox /a/path/to/applet args..." too. Allows for
* "#!/bin/busybox"-style wrappers