diff options
author | Chet Ramey <chet.ramey@case.edu> | 2022-12-13 12:43:50 -0500 |
---|---|---|
committer | Chet Ramey <chet.ramey@case.edu> | 2022-12-13 12:43:50 -0500 |
commit | ec8113b9861375e4e17b3307372569d429dec814 (patch) | |
tree | eda6c9c211d8db4f1ec80d1ec4095d5d96abfe5a /trap.c | |
parent | 6647917a43dd987c5564cc20d0943213b39e748b (diff) | |
download | bash-master.tar.gz |
Diffstat (limited to 'trap.c')
-rw-r--r-- | trap.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -304,6 +304,7 @@ run_pending_traps () sh_parser_state_t pstate; volatile int save_return_catch_flag, function_code; procenv_t save_return_catch; + char *trap_command, *old_trap; #if defined (ARRAY_VARS) ARRAY *ps; #endif @@ -419,6 +420,9 @@ run_pending_traps () } else { + old_trap = trap_list[sig]; + trap_command = savestring (old_trap); + save_parser_state (&pstate); save_subst_varlist = subst_assign_varlist; subst_assign_varlist = 0; @@ -441,7 +445,8 @@ run_pending_traps () } if (function_code == 0) - x = parse_and_execute (savestring (trap_list[sig]), "trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE); + /* XXX is x always last_command_exit_value? */ + x = parse_and_execute (trap_command, "trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE|SEVAL_NOOPTIMIZE); else { parse_and_execute_cleanup (sig + 1); /* XXX - could use -1 */ @@ -1002,7 +1007,7 @@ run_exit_trap () if (code == 0 && function_code == 0) { reset_parser (); - parse_and_execute (trap_command, "exit trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE); + parse_and_execute (trap_command, "exit trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE|SEVAL_NOOPTIMIZE); } else if (code == ERREXIT) retval = last_command_exit_value; @@ -1109,7 +1114,7 @@ _run_trap_internal (sig, tag) function_code = setjmp_nosigs (return_catch); } - flags = SEVAL_NONINT|SEVAL_NOHIST; + flags = SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE; if (sig != DEBUG_TRAP && sig != RETURN_TRAP && sig != ERROR_TRAP) flags |= SEVAL_RESETLINE; evalnest++; |