Merge branch 'jk/unify-exit-code-by-receiving-signal'
authorJunio C Hamano <gitster@pobox.com>
Sat, 12 Jan 2013 02:34:32 +0000 (18:34 -0800)
committerJunio C Hamano <gitster@pobox.com>
Sat, 12 Jan 2013 02:34:32 +0000 (18:34 -0800)
The internal logic had to deal with two representations of a death
of a child process by a signal.

* jk/unify-exit-code-by-receiving-signal:
run-command: encode signal death as a positive integer

Documentation/technical/api-run-command.txt
editor.c
run-command.c
t/test-terminal.perl
index f18b4f4817448530a5adbe2c8835bb7791add42a..5d7d7f2d32f58f8682ca5efb2fd98fe7e74247dd 100644 (file)
@@ -55,10 +55,8 @@ The functions above do the following:
   non-zero.
 
 . If the program terminated due to a signal, then the return value is the
-  signal number - 128, ie. it is negative and so indicates an unusual
-  condition; a diagnostic is printed. This return value can be passed to
-  exit(2), which will report the same code to the parent process that a
-  POSIX shell's $? would report for a program that died from the signal.
+  signal number + 128, ie. the same value that a POSIX shell's $? would
+  report.  A diagnostic is printed.
 
 
 `start_async`::
index 065a7abf2ffc0df61c35e0740e95caa5af14b229..27bdecdaf3d99d3179737e07be971d2458408660 100644 (file)
--- a/editor.c
+++ b/editor.c
@@ -51,7 +51,7 @@ int launch_editor(const char *path, struct strbuf *buffer, const char *const *en
                sigchain_push(SIGINT, SIG_IGN);
                sigchain_push(SIGQUIT, SIG_IGN);
                ret = finish_command(&p);
-               sig = ret + 128;
+               sig = ret - 128;
                sigchain_pop(SIGINT);
                sigchain_pop(SIGQUIT);
                if (sig == SIGINT || sig == SIGQUIT)
index 24eaad5c66c1742602347c42c71d279297aabc2a..04712191e8acfbf000c526a5b1b0a80541e8e174 100644 (file)
@@ -249,7 +249,7 @@ static int wait_or_whine(pid_t pid, const char *argv0)
                 * mimics the exit code that a POSIX shell would report for
                 * a program that died from this signal.
                 */
-               code -= 128;
+               code += 128;
        } else if (WIFEXITED(status)) {
                code = WEXITSTATUS(status);
                /*
index 10172aee18292b50aa24b3a8694b5383c1cfd98e..1fb373f25bac42648a0779ffd42f1ae0eaec359a 100755 (executable)
@@ -31,7 +31,7 @@ sub finish_child {
        } elsif ($? & 127) {
                my $code = $? & 127;
                warn "died of signal $code";
-               return $code - 128;
+               return $code + 128;
        } else {
                return $? >> 8;
        }