Fixed leakage of pipe descriptors in case of failing fork

master
Bert Münnich 2014-11-27 22:25:27 +01:00
parent ed030fe4d3
commit 51854c6148
1 changed files with 10 additions and 8 deletions

18
main.c
View File

@ -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)