summaryrefslogtreecommitdiff
path: root/run-command.c
diff options
context:
space:
mode:
authorJohannes Sixt <j6t@kdbg.org>2009-07-04 21:26:41 +0200
committerJunio C Hamano <gitster@pobox.com>2009-07-06 02:44:56 -0700
commitb99d5f40d6a5cba7d7cd7599063b3cd78aa4d219 (patch)
tree81b30533566611db8564458de11006646d7bf61d /run-command.c
parent0ac77ec3150f43a5c2a6b1e47e9db5aafe53fb72 (diff)
downloadgit-b99d5f40d6a5cba7d7cd7599063b3cd78aa4d219.tar.gz
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>
Diffstat (limited to 'run-command.c')
-rw-r--r--run-command.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/run-command.c b/run-command.c
index e273c6c451..30c2b3dd88 100644
--- a/run-command.c
+++ b/run-command.c
@@ -248,7 +248,14 @@ static int wait_or_whine(pid_t pid, const char *argv0)
} else if (waiting != pid) {
error("waitpid is confused (%s)", argv0);
} 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)) {
code = WEXITSTATUS(status);
/*