From: Carl Worth Date: Tue, 3 Apr 2012 22:58:50 +0000 (-0700) Subject: os_posix: Fix return value for os::execute() X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=4644dc65e83c56ba0bb577f57cd20e7419f3ade4;hp=ae3981a47606435ed5d3567384d96c07f8d01131;p=apitrace os_posix: Fix return value for os::execute() Previously, this was returning the status value from waitpid directly. That is incorrect as the actual exit status from the executed program is likely to be in high-order bits of that status value. Instead, use the WEXITSTATUS macro to return the actual exit status value. Signed-off-by: José Fonseca --- diff --git a/common/os_posix.cpp b/common/os_posix.cpp index ebd59a0..7d39d8a 100644 --- a/common/os_posix.cpp +++ b/common/os_posix.cpp @@ -143,8 +143,17 @@ int execute(char * const * args) return -1; } int status = -1; + int ret; waitpid(pid, &status, 0); - return status; + if (WIFEXITED(status)) { + ret = WEXITSTATUS(status); + } else if (WIFSIGNALED(status)) { + // match shell return code + ret = WTERMSIG(status) + 128; + } else { + ret = 128; + } + return ret; } }