aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorGravatar Denys Vlasenko <vda.linux@googlemail.com>2019-05-19 19:11:21 +0200
committerGravatar Denys Vlasenko <vda.linux@googlemail.com>2019-05-19 19:11:21 +0200
commitd8740b265a4d4e428b3494089d5a86e1ec90238a (patch)
tree30a3729451c85156fbdbfdef2463eeb2fef5e00b /shell
parent76a4e8361a84efca256d4286cf36561c42c14d64 (diff)
downloadbusybox-d8740b265a4d4e428b3494089d5a86e1ec90238a.tar.gz
busybox-d8740b265a4d4e428b3494089d5a86e1ec90238a.tar.bz2
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 <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rw-r--r--shell/hush.c8
1 files 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.