|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r64076 - in sandbox/SOC/2010/process/boost/process: . detail
From: fotanus_at_[hidden]
Date: 2010-07-16 22:45:42
Author: fotanus
Date: 2010-07-16 22:45:40 EDT (Fri, 16 Jul 2010)
New Revision: 64076
URL: http://svn.boost.org/trac/boost/changeset/64076
Log:
POSIX: fixed posix capture streams.
Text files modified:
sandbox/SOC/2010/process/boost/process/detail/posix_helpers.hpp | 5 +++++
sandbox/SOC/2010/process/boost/process/operations.hpp | 11 +++++++----
sandbox/SOC/2010/process/boost/process/stream_behavior.hpp | 29 ++++++++++++++---------------
3 files changed, 26 insertions(+), 19 deletions(-)
Modified: sandbox/SOC/2010/process/boost/process/detail/posix_helpers.hpp
==============================================================================
--- sandbox/SOC/2010/process/boost/process/detail/posix_helpers.hpp (original)
+++ sandbox/SOC/2010/process/boost/process/detail/posix_helpers.hpp 2010-07-16 22:45:40 EDT (Fri, 16 Jul 2010)
@@ -99,4 +99,9 @@
}
}
+void posix_remap(int native_handle, int new_handle)
+{
+ if (::dup2(new_handle, native_handle) == -1)
+ BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("dup2() failed");
+}
#endif
Modified: sandbox/SOC/2010/process/boost/process/operations.hpp
==============================================================================
--- sandbox/SOC/2010/process/boost/process/operations.hpp (original)
+++ sandbox/SOC/2010/process/boost/process/operations.hpp 2010-07-16 22:45:40 EDT (Fri, 16 Jul 2010)
@@ -198,9 +198,6 @@
for (int i = 0; i < maxdescs; ++i)
closeflags[i] = true;
- // setup_input(infoin, closeflags.get(), maxdescs);
- // setup_output(infoout, closeflags.get(), maxdescs);
-
int stdin_fd = ctx.stdin_behavior->get_child_end();
if (stdin_fd != -1 && stdin_fd < maxdescs)
closeflags[stdin_fd] = false;
@@ -219,7 +216,13 @@
::close(i);
}
- // setup();
+ if(closeflags[stdin_fd] == false)
+ posix_remap(STDIN_FILENO, stdin_fd);
+ if(closeflags[stdout_fd] == false)
+ posix_remap(STDOUT_FILENO, stdout_fd);
+ if(closeflags[stderr_fd] == false)
+ posix_remap(STDERR_FILENO, stderr_fd);
+
}
catch (const boost::system::system_error &e)
{
Modified: sandbox/SOC/2010/process/boost/process/stream_behavior.hpp
==============================================================================
--- sandbox/SOC/2010/process/boost/process/stream_behavior.hpp (original)
+++ sandbox/SOC/2010/process/boost/process/stream_behavior.hpp 2010-07-16 22:45:40 EDT (Fri, 16 Jul 2010)
@@ -111,21 +111,21 @@
inherit(native_type child_end)
: child_end_(child_end)
{
-#if defined(BOOST_WINDOWS_API)
- if (!::DuplicateHandle(::GetCurrentProcess(), child_end_, ::GetCurrentProcess(), &child_end_, 0, TRUE, DUPLICATE_SAME_ACCESS))
- BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("DuplicateHandle() failed");
-#endif
- }
-
- static boost::shared_ptr<inherit> def(native_type child_end)
- {
- return boost::make_shared<inherit>(inherit(child_end));
- }
+#if defined(BOOST_WINDOWS_API)
+ if (!::DuplicateHandle(::GetCurrentProcess(), child_end_, ::GetCurrentProcess(), &child_end_, 0, TRUE, DUPLICATE_SAME_ACCESS))
+ BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("DuplicateHandle() failed");
+#endif
+ }
+
+ static boost::shared_ptr<inherit> def(native_type child_end)
+ {
+ return boost::make_shared<inherit>(inherit(child_end));
+ }
native_type get_child_end()
- {
- return child_end_;
- }
+ {
+ return child_end_;
+ }
private:
native_type child_end_;
@@ -142,9 +142,8 @@
public:
enum stream_type { input_stream, output_stream };
- pipe(stream_type stream)
+ pipe(stream_type stream)
{
-
native_type natives[2];
#if defined(BOOST_POSIX_API)
if (::pipe(natives) == -1)
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk