mirror of
https://github.com/dslm4515/BMLFS.git
synced 2025-08-20 14:31:47 +00:00
83 lines
3.3 KiB
Diff
83 lines
3.3 KiB
Diff
From df5fffa062ebc46bd13d65c84a4abca6ae1c614d Mon Sep 17 00:00:00 2001
|
|
From: Ariadne Conill <ariadne@dereferenced.org>
|
|
Date: Wed, 10 Mar 2021 23:38:57 -0700
|
|
Subject: [PATCH] ash: add built-in $BB_ASH_VERSION variable
|
|
|
|
This is helpful for detecting if the shell is busybox ash or not,
|
|
which is necessary for enabling ash-specific features in /etc/profile
|
|
and Alpine's default $ENV.
|
|
|
|
https://gitlab.alpinelinux.org/alpine/aports/-/issues/12398 outlines
|
|
the rationale for detecting what shell is running in /etc/profile and
|
|
similar.
|
|
|
|
function old new delta
|
|
.rodata 77899 77925 +26
|
|
varinit_data 360 384 +24
|
|
------------------------------------------------------------------------------
|
|
(add/remove: 0/0 grow/shrink: 2/0 up/down: 50/0) Total: 50 bytes
|
|
|
|
Signed-off-by: Ariadne Conill <ariadne@dereferenced.org>
|
|
---
|
|
shell/ash.c | 28 ++++++++++++++++++++--------
|
|
1 file changed, 20 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/shell/ash.c b/shell/ash.c
|
|
index 827643808..5f8f41ee9 100644
|
|
--- a/shell/ash.c
|
|
+++ b/shell/ash.c
|
|
@@ -153,6 +153,14 @@
|
|
//config: you to run the specified command or builtin,
|
|
//config: even when there is a function with the same name.
|
|
//config:
|
|
+//config:config ASH_VERSION_VAR
|
|
+//config: bool "declare $BB_ASH_VERSION variable"
|
|
+//config: default y
|
|
+//config: depends on SHELL_ASH
|
|
+//config: help
|
|
+//config: Enable support for declaring the $BB_ASH_VERSION variable,
|
|
+//config: which is set as the busybox version.
|
|
+//config:
|
|
//config:endif # ash options
|
|
|
|
//applet:IF_ASH(APPLET(ash, BB_DIR_BIN, BB_SUID_DROP))
|
|
@@ -2138,6 +2146,9 @@ static const struct {
|
|
{ VSTRFIXED|VTEXTFIXED , "PS1=$ " , NULL },
|
|
{ VSTRFIXED|VTEXTFIXED , "PS2=> " , NULL },
|
|
{ VSTRFIXED|VTEXTFIXED , "PS4=+ " , NULL },
|
|
+#if ENABLE_ASH_VERSION_VAR
|
|
+ { VSTRFIXED|VTEXTFIXED , "BB_ASH_VERSION=" BB_VER, NULL },
|
|
+#endif
|
|
#if ENABLE_ASH_GETOPTS
|
|
{ VSTRFIXED|VTEXTFIXED , defoptindvar, getoptsreset },
|
|
#endif
|
|
@@ -2197,19 +2208,20 @@ extern struct globals_var *BB_GLOBAL_CONST ash_ptr_to_globals_var;
|
|
#define vps1 varinit[VAR_OFFSET1 + 2]
|
|
#define vps2 varinit[VAR_OFFSET1 + 3]
|
|
#define vps4 varinit[VAR_OFFSET1 + 4]
|
|
+#define VAR_OFFSET2 (VAR_OFFSET1 + ENABLE_ASH_VERSION_VAR)
|
|
#if ENABLE_ASH_GETOPTS
|
|
-# define voptind varinit[VAR_OFFSET1 + 5]
|
|
+# define voptind varinit[VAR_OFFSET2 + 5]
|
|
#endif
|
|
-#define VAR_OFFSET2 (VAR_OFFSET1 + ENABLE_ASH_GETOPTS)
|
|
-#define vlineno varinit[VAR_OFFSET2 + 5]
|
|
-#define vfuncname varinit[VAR_OFFSET2 + 6]
|
|
+#define VAR_OFFSET3 (VAR_OFFSET2 + ENABLE_ASH_GETOPTS)
|
|
+#define vlineno varinit[VAR_OFFSET3 + 5]
|
|
+#define vfuncname varinit[VAR_OFFSET3 + 6]
|
|
#if ENABLE_ASH_RANDOM_SUPPORT
|
|
-# define vrandom varinit[VAR_OFFSET2 + 7]
|
|
+# define vrandom varinit[VAR_OFFSET3 + 7]
|
|
#endif
|
|
-#define VAR_OFFSET3 (VAR_OFFSET2 + ENABLE_ASH_RANDOM_SUPPORT)
|
|
+#define VAR_OFFSET4 (VAR_OFFSET2 + ENABLE_ASH_RANDOM_SUPPORT)
|
|
#if BASH_EPOCH_VARS
|
|
-# define vepochs varinit[VAR_OFFSET3 + 7]
|
|
-# define vepochr varinit[VAR_OFFSET3 + 8]
|
|
+# define vepochs varinit[VAR_OFFSET4 + 7]
|
|
+# define vepochr varinit[VAR_OFFSET4 + 8]
|
|
#endif
|
|
#define INIT_G_var() do { \
|
|
unsigned i; \
|