execv_dashed_external: stop exiting with negative code
When we try to exec a git sub-command, we pass along the status code from run_command(). But that may return -1 if we ran into an error with pipe() or execve(). This tends to work (and end up as 255 due to twos-complement wraparound and truncation), but in general it's probably a good idea to avoid negative exit codes for portability. We can easily translate to the normal generic "128" code we get when syscalls cause us to die. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
2b296c93d4
commit
246f0edec0
10
git.c
10
git.c
@ -593,12 +593,16 @@ static void execv_dashed_external(const char **argv)
|
|||||||
trace_argv_printf(cmd.args.argv, "trace: exec:");
|
trace_argv_printf(cmd.args.argv, "trace: exec:");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* if we fail because the command is not found, it is
|
* If we fail because the command is not found, it is
|
||||||
* OK to return. Otherwise, we just pass along the status code.
|
* OK to return. Otherwise, we just pass along the status code,
|
||||||
|
* or our usual generic code if we were not even able to exec
|
||||||
|
* the program.
|
||||||
*/
|
*/
|
||||||
status = run_command(&cmd);
|
status = run_command(&cmd);
|
||||||
if (status >= 0 || errno != ENOENT)
|
if (status >= 0)
|
||||||
exit(status);
|
exit(status);
|
||||||
|
else if (errno != ENOENT)
|
||||||
|
exit(128);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int run_argv(int *argcp, const char ***argv)
|
static int run_argv(int *argcp, const char ***argv)
|
||||||
|
Loading…
Reference in New Issue
Block a user