void pipe_out<1,-1>::on_exec_setup(Executor &e) const
{
if (::dup2(sink, STDOUT_FILENO) == -1)
- e.set_error(::boost::process::detail::get_last_error(), "dup3() failed");
- ::close(sink);
+ e.set_error(::boost::process::detail::get_last_error(), "dup2() failed");
+
+ if (sink != STDOUT_FILENO)
+ ::close(sink);
::close(source);
}
{
if (::dup2(sink, STDERR_FILENO) == -1)
e.set_error(::boost::process::detail::get_last_error(), "dup2() failed");
- ::close(sink);
+
+ if (sink != STDOUT_FILENO)
+ ::close(sink);
::close(source);
}
e.set_error(::boost::process::detail::get_last_error(), "dup2() failed");
if (::dup2(sink, STDERR_FILENO) == -1)
e.set_error(::boost::process::detail::get_last_error(), "dup2() failed");
- ::close(sink);
- ::close(source);
+ if ((sink != STDOUT_FILENO) && (sink != STDERR_FILENO))
+ ::close(sink);
}
class async_pipe;