From 3b5183a74ebaa58158305dfa16aa43205e11e35c Mon Sep 17 00:00:00 2001 From: Calvin Rose Date: Wed, 18 Mar 2020 17:46:02 -0500 Subject: [PATCH] Fixes #316: os/execute should return non-zero on signals Behave more like shells, and catch segfaults. --- src/core/os.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/core/os.c b/src/core/os.c index 5a674ae2..ca997bbb 100644 --- a/src/core/os.c +++ b/src/core/os.c @@ -401,7 +401,16 @@ static Janet os_execute(int32_t argc, Janet *argv) { } os_execute_cleanup(envp, child_argv); - return janet_wrap_integer(WEXITSTATUS(status)); + /* Use POSIX shell semantics for interpreting signals */ + int ret; + if (WIFEXITED(status)) { + ret = WEXITSTATUS(status); + } else if (WIFSTOPPED(status)) { + ret = WSTOPSIG(status) + 128; + } else { + ret = WTERMSIG(status) + 128; + } + return janet_wrap_integer(ret); #endif }