>From a2a4e552e617af76f6352bd280a042af621ffcf4 Mon Sep 17 00:00:00 2001 From: Markus Wichmann Date: Fri, 29 Dec 2017 10:45:58 +0100 Subject: [PATCH 2/2] Correctly handle failing waitpid() in system() --- src/process/system.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/process/system.c b/src/process/system.c index 8cbdda06..a62ff26e 100644 --- a/src/process/system.c +++ b/src/process/system.c @@ -14,7 +14,7 @@ int system(const char *cmd) pid_t pid; sigset_t old, reset; struct sigaction sa = { .sa_handler = SIG_IGN }, oldint, oldquit; - int status = 0x7f00, ret; + int status = 0x7f00, ret, wr = 0; posix_spawnattr_t attr; pthread_testcancel(); @@ -37,11 +37,12 @@ int system(const char *cmd) (char *[]){"sh", "-c", (char *)cmd, 0}, __environ); posix_spawnattr_destroy(&attr); - if (!ret) while (waitpid(pid, &status, 0)<0 && errno == EINTR); + if (!ret) while ((wr = waitpid(pid, &status, 0))<0 && errno == EINTR); sigaction(SIGINT, &oldint, NULL); sigaction(SIGQUIT, &oldquit, NULL); sigprocmask(SIG_SETMASK, &old, NULL); if (ret) errno = ret; + if (wr) status = wr; return status; } -- 2.14.2