+ goto fail;
+ par_close[num_par_close++] = fromchild[1];
+ }
+ if (fd_errfromchild) {
+ if (fd_errfromchild == &pipecmd_preserve) {
+ errfromchild[1] = STDERR_FILENO;
+ } else if (fd_errfromchild == fd_fromchild) {
+ errfromchild[0] = fromchild[0];
+ errfromchild[1] = fromchild[1];
+ } else if (pipe(errfromchild) == 0) {
+ par_close[num_par_close++] = errfromchild[1];
+ child_close[num_child_close++] = errfromchild[0];
+ } else
+ goto fail;
+ } else {
+ errfromchild[1] = open("/dev/null", O_WRONLY);
+ if (errfromchild[1] < 0)
+ goto fail;
+ par_close[num_par_close++] = errfromchild[1];