run_command: encode deadly signal number in the return value

We now write the signal number in the error message if the program
terminated by a signal. The negative return value is constructed such that
after truncation to 8 bits it looks like a POSIX shell's $?:

   $ echo 0000 | { git upload-pack .; echo $? >&2; } | :
   error: git-upload-pack died of signal 13
   141

Previously, the exit code was 255 instead of 141.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Johannes Sixt 2009-07-04 21:26:41 +02:00 committed by Junio C Hamano
parent 0ac77ec315
commit b99d5f40d6

View File

@ -248,7 +248,14 @@ static int wait_or_whine(pid_t pid, const char *argv0)
} else if (waiting != pid) { } else if (waiting != pid) {
error("waitpid is confused (%s)", argv0); error("waitpid is confused (%s)", argv0);
} else if (WIFSIGNALED(status)) { } else if (WIFSIGNALED(status)) {
error("%s died of signal", argv0); code = WTERMSIG(status);
error("%s died of signal %d", argv0, code);
/*
* This return value is chosen so that code & 0xff
* mimics the exit code that a POSIX shell would report for
* a program that died from this signal.
*/
code -= 128;
} else if (WIFEXITED(status)) { } else if (WIFEXITED(status)) {
code = WEXITSTATUS(status); code = WEXITSTATUS(status);
/* /*