From d8740b265a4d4e428b3494089d5a86e1ec90238a Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 19 May 2019 19:11:21 +0200 Subject: [PATCH] hush: show 's' in $- 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 --- 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. -- 2.25.1