* function.c (shell_completed): [SV 51014] Add signal to .SHELLSTATUS

* tests/scripts/functions/shell: Verify that .SHELLSTATUS contains
a non-0 value when the shell exits due to a signal.
This commit is contained in:
Paul Smith 2017-06-04 20:06:48 -04:00
parent 66a9b5c3ba
commit 75b5268faf
2 changed files with 10 additions and 0 deletions

View file

@ -1469,6 +1469,9 @@ shell_completed (int exit_code, int exit_sig)
else
shell_function_completed = 1;
if (exit_code == 0 && exit_sig > 0)
exit_code = 128 + exit_sig;
sprintf (buf, "%d", exit_code);
define_variable_cname (".SHELLSTATUS", buf, o_override, 0);
}

View file

@ -22,9 +22,16 @@ $(shell exit 0)
OK := $(.SHELLSTATUS)
$(shell exit 1)
BAD := $(.SHELLSTATUS)
$(shell kill -2 $$$$)
SIG := $(.SHELLSTATUS)
all: ; @echo PRE=$(PRE) OK=$(OK) BAD=$(BAD)
','','PRE= OK=0 BAD=1');
run_make_test('.PHONY: all
$(shell kill -2 $$$$)
SIG := $(.SHELLSTATUS)
all: ; @echo SIG=$(SIG)
','','SIG=130');
# Test unescaped comment characters in shells. Savannah bug #20513
run_make_test(q!