aports/main/busybox/0003-ash-add-built-in-BB_ASH_VERSION-variable.patch
Sören Tempel 531e69840c main/busybox: upgrade to 1.37.0
Not a lot of big changes in this release, mostly code shrinks and bug
fixes here and there. Hence, I don't expect too much breakage. Most patches
applied as is and didn't require any changes either. Nonetheless, I
rebased the entire patchset and removed patches that were backported.

The 0001-modutils-check-ELF-header-before-calling-finit_modul.patch
should be superseded by an upstream modutils change which checks that
if the loaded module file path ends in .ko and if not attempts to
uncompress it first. Thereby preventing compressed modules to be
passed to the kernel and causing a weird error to be emitted. Therefore,
this patch was removed

See: https://git.busybox.net/busybox/commit/?id=af5277f883e8fc2e0236aa9ecc5115ecaffd0ccb
2024-10-20 10:16:15 +00:00

85 lines
3.3 KiB
Diff

From dbfa0a05c965450a44dd0c33274569005f4809ef 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
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
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 bbd730770..e6c1c8e47 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -170,6 +170,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))
@@ -2160,6 +2168,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
@@ -2219,19 +2230,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; \