From 3ced804e3118d138781c3e4baa6bf1589b9f2dfd Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 21 Feb 2020 02:55:53 +0100 Subject: hush: make "exit" in trap use pre-trap exitcode - fix for nested trap function old new delta check_and_run_traps 276 278 +2 Signed-off-by: Denys Vlasenko --- shell/hush.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'shell/hush.c') diff --git a/shell/hush.c b/shell/hush.c index b881b001a..357a354e2 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -2107,16 +2107,18 @@ static int check_and_run_traps(void) if (G_traps[sig][0]) { /* We have user-defined handler */ smalluint save_rcode; + int save_pre; char *argv[3]; /* argv[0] is unused */ argv[1] = xstrdup(G_traps[sig]); /* why strdup? trap can modify itself: trap 'trap "echo oops" INT' INT */ argv[2] = NULL; + save_pre = G.pre_trap_exitcode; G.pre_trap_exitcode = save_rcode = G.last_exitcode; builtin_eval(argv); free(argv[1]); + G.pre_trap_exitcode = save_pre; G.last_exitcode = save_rcode; - G.pre_trap_exitcode = -1; # if ENABLE_HUSH_FUNCTIONS if (G.return_exitcode >= 0) { debug_printf_exec("trap exitcode:%d\n", G.return_exitcode); -- cgit v1.2.3