diff options
author | Bert Münnich <ber.t@posteo.de> | 2014-11-27 22:25:27 +0100 |
---|---|---|
committer | Bert Münnich <ber.t@posteo.de> | 2014-11-27 22:25:27 +0100 |
commit | 51854c614873f59571e80da79f0dc0e8446cbf21 (patch) | |
tree | 0dbf8fd0ba17923e24a663893619783eb2f86612 | |
parent | ed030fe4d38f74893739c99dc27f323172218d28 (diff) |
Fixed leakage of pipe descriptors in case of failing fork
-rw-r--r-- | main.c | 18 |
1 files changed, 10 insertions, 8 deletions
@@ -262,20 +262,22 @@ void open_info(void) if (pipe(pfd) < 0) return; - pid = fork(); - if (pid > 0) { - close(pfd[1]); - fcntl(pfd[0], F_SETFL, O_NONBLOCK); - info.fd = pfd[0]; - info.i = info.lastsep = 0; - info.open = true; - } else if (pid == 0) { + if ((pid = fork()) == 0) { close(pfd[0]); dup2(pfd[1], 1); execl(info.cmd, info.cmd, files[fileidx].name, NULL); warn("could not exec: %s", info.cmd); exit(EXIT_FAILURE); } + close(pfd[1]); + if (pid < 0) { + close(pfd[0]); + } else { + fcntl(pfd[0], F_SETFL, O_NONBLOCK); + info.fd = pfd[0]; + info.i = info.lastsep = 0; + info.open = true; + } } void read_info(void) |