/* Creation of subprocesses, communicating via pipes.
- Copyright (C) 2001-2004, 2006-2009 Free Software Foundation, Inc.
+ Copyright (C) 2001-2004, 2006-2010 Free Software Foundation, Inc.
Written by Bruno Haible <haible@clisp.cons.org>, 2001.
This program is free software: you can redistribute it and/or modify
int nulloutfd;
int stdinfd;
int stdoutfd;
+ int saved_errno;
/* FIXME: Need to free memory allocated by prepare_spawn. */
prog_argv = prepare_spawn (prog_argv);
(const char **) environ);
}
}
+ if (child == -1)
+ saved_errno = errno;
if (stdinfd >= 0)
close (stdinfd);
if (stdoutfd >= 0)
if (child == -1)
{
if (exit_on_error || !null_stderr)
- error (exit_on_error ? EXIT_FAILURE : 0, errno,
+ error (exit_on_error ? EXIT_FAILURE : 0, saved_errno,
_("%s subprocess failed"), progname);
if (pipe_stdout)
close (ifd[0]);
if (pipe_stdin)
close (ofd[1]);
+ errno = saved_errno;
return -1;
}
close (ofd[0]);
close (ofd[1]);
}
+ errno = err;
return -1;
}
posix_spawn_file_actions_destroy (&actions);