goto fail;
if (childpid == 0) {
- for (int i = 0; i < num_child_close; i++)
+ int i;
+ for (i = 0; i < num_child_close; i++)
close(child_close[i]);
// Child runs command.
goto child_errno_fail;
close(errfromchild[1]);
}
+
+ /* Make (fairly!) sure all other fds are closed. */
+ int max = sysconf(_SC_OPEN_MAX);
+ for (i = 3; i < max; i++)
+ if (i != execfail[1])
+ close(i);
+
execvp(arr[0], arr);
child_errno_fail:
exit(127);
}
- for (int i = 0; i < num_par_close; i++)
+ int i;
+ for (i = 0; i < num_par_close; i++)
close(par_close[i]);
/* Child will close this without writing on successful exec. */
return childpid;
fail:
- for (int i = 0; i < num_par_close; i++)
+ for (i = 0; i < num_par_close; i++)
close_noerr(par_close[i]);
return -1;
}