From ad9fe95761c4e1c4ac5430362747fd701887b9b3 Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Fri, 14 Apr 2017 20:00:25 +0200 Subject: filter: simplify clean up logic --- filter.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) (limited to 'filter.c') diff --git a/filter.c b/filter.c index 0baa5e6..111b606 100644 --- a/filter.c +++ b/filter.c @@ -15,6 +15,7 @@ filter(char *input, size_t inlen, char *cmd, char **outputo, size_t *outleno) ssize_t outalloc = 4096; pid_t pid; sigset_t mask, orig_mask; + int r; sigemptyset(&mask); sigaddset(&mask, SIGPIPE); @@ -100,23 +101,18 @@ filter(char *input, size_t inlen, char *cmd, char **outputo, size_t *outleno) int status; waitpid(pid, &status, 0); + r = WEXITSTATUS(status); *outputo = output; *outleno = outlen; - sigpending(&mask); - if (sigismember(&mask, SIGPIPE)) { - int sig; - sigwait(&mask, &sig); - } - sigprocmask(SIG_SETMASK, &orig_mask, 0); - - return WEXITSTATUS(status); - + if (0) { fail: - *outputo = 0; - *outleno = 0; - free(output); + *outputo = 0; + *outleno = 0; + free(output); + r = -1; + } sigpending(&mask); if (sigismember(&mask, SIGPIPE)) { @@ -125,7 +121,7 @@ fail: } sigprocmask(SIG_SETMASK, &orig_mask, 0); - return -1; + return r; } #ifdef TEST -- cgit 1.4.1