[git commit] hush: show 's' in $-

Denys Vlasenko vda.linux at googlemail.com
Sun May 19 17:11:21 UTC 2019


commit: https://git.busybox.net/busybox/commit/?id=d8740b265a4d4e428b3494089d5a86e1ec90238a
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
expand_one_var                                      2362    2375     +13
hush_main                                           1104    1108      +4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 17/0)               Total: 17 bytes

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/hush.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/shell/hush.c b/shell/hush.c
index 4dd940222..4b08232a4 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -902,6 +902,7 @@ struct globals {
 #else
 # define G_x_mode 0
 #endif
+	char opt_s;
 #if ENABLE_HUSH_INTERACTIVE
 	smallint promptmode; /* 0: PS1, 1: PS2 */
 #endif
@@ -1008,7 +1009,7 @@ struct globals {
 	int debug_indent;
 #endif
 	struct sigaction sa;
-	char optstring_buf[sizeof("eix")];
+	char optstring_buf[sizeof("eixs")];
 #if BASH_EPOCH_VARS
 	char epoch_buf[sizeof("%lu.nnnnnn") + sizeof(long)*3];
 #endif
@@ -6413,8 +6414,9 @@ static NOINLINE int expand_one_var(o_string *output, int n,
 			 * commands read but are not executed,
 			 * so $- can not execute too, 'n' is never seen in $-.
 			 */
+			if (G.opt_s)
+				*cp++ = 's';
 //TODO: show 'c' if executed via "hush -c 'CMDS'" (bash only, not ash)
-//TODO: show 's' if executed via "hush -s ARG1 ARG2", or if there were no args except options (ash does this too)
 			*cp = '\0';
 			break;
 		}
@@ -9958,7 +9960,6 @@ int hush_main(int argc, char **argv)
 	 * PS4='+ '
 	 */
 
-
 	/* Initialize some more globals to non-zero values */
 	die_func = restore_ttypgrp_and__exit;
 
@@ -10177,6 +10178,7 @@ int hush_main(int argc, char **argv)
 #endif
 		goto final_return;
 	}
+	G.opt_s = 1;
 
 	/* Up to here, shell was non-interactive. Now it may become one.
 	 * NB: don't forget to (re)run install_special_sighandlers() as needed.


More information about the busybox-cvs mailing list