diff options
Diffstat (limited to 'boost/process/detail/windows/pipe_in.hpp')
-rw-r--r-- | boost/process/detail/windows/pipe_in.hpp | 178 |
1 files changed, 89 insertions, 89 deletions
diff --git a/boost/process/detail/windows/pipe_in.hpp b/boost/process/detail/windows/pipe_in.hpp index cd8c186e15..3cc1a10b90 100644 --- a/boost/process/detail/windows/pipe_in.hpp +++ b/boost/process/detail/windows/pipe_in.hpp @@ -1,89 +1,89 @@ -// Copyright (c) 2006, 2007 Julio M. Merino Vidal
-// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
-// Copyright (c) 2009 Boris Schaeling
-// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
-// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- -#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_PIPE_IN_HPP
-#define BOOST_PROCESS_WINDOWS_INITIALIZERS_PIPE_IN_HPP
- -#include <boost/detail/winapi/process.hpp>
-#include <boost/detail/winapi/handles.hpp>
-#include <boost/process/detail/handler_base.hpp>
- -namespace boost { namespace process { namespace detail { namespace windows {
- -struct pipe_in : public ::boost::process::detail::handler_base
-{
- ::boost::detail::winapi::HANDLE_ handle;
- - pipe_in(::boost::detail::winapi::HANDLE_ handle) : handle(handle) {}
- - template<typename T> //async_pipe
- pipe_in(T & p) : handle(p.native_source())
- {
- p.assign_source(::boost::detail::winapi::INVALID_HANDLE_VALUE_);
- }
- - template <class WindowsExecutor>
- void on_setup(WindowsExecutor &e) const
- {
- boost::detail::winapi::SetHandleInformation(handle,
- boost::detail::winapi::HANDLE_FLAG_INHERIT_,
- boost::detail::winapi::HANDLE_FLAG_INHERIT_);
- - e.startup_info.hStdInput = handle;
- e.startup_info.dwFlags |= boost::detail::winapi::STARTF_USESTDHANDLES_;
- e.inherit_handles = true;
- }
- template<typename WindowsExecutor>
- void on_error(WindowsExecutor &, const std::error_code &) const
- {
- ::boost::detail::winapi::CloseHandle(handle);
- }
- - template<typename WindowsExecutor>
- void on_success(WindowsExecutor &) const
- {
- ::boost::detail::winapi::CloseHandle(handle);
- }
-};
- -class async_pipe;
- -struct async_pipe_in : public pipe_in
-{
- async_pipe &pipe;
- - template<typename AsyncPipe>
- async_pipe_in(AsyncPipe & p) : pipe_in(p.native_source()), pipe(p)
- {
- }
- - template<typename Pipe, typename Executor>
- static void close(Pipe & pipe, Executor &)
- {
- boost::system::error_code ec;
- std::move(pipe).source().close(ec);
- }
- - template<typename Executor>
- void on_error(Executor & exec, const std::error_code &)
- {
- close(pipe, exec);
- }
- - template<typename Executor>
- void on_success(Executor &exec)
- {
- close(pipe, exec);
- }
-};
- - -}}}}
- -#endif
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_PIPE_IN_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_PIPE_IN_HPP + +#include <boost/winapi/process.hpp> +#include <boost/winapi/handles.hpp> +#include <boost/process/detail/handler_base.hpp> + +namespace boost { namespace process { namespace detail { namespace windows { + +struct pipe_in : public ::boost::process::detail::handler_base +{ + ::boost::winapi::HANDLE_ handle; + + pipe_in(::boost::winapi::HANDLE_ handle) : handle(handle) {} + + template<typename T> //async_pipe + pipe_in(T & p) : handle(p.native_source()) + { + p.assign_source(::boost::winapi::INVALID_HANDLE_VALUE_); + } + + template <class WindowsExecutor> + void on_setup(WindowsExecutor &e) const + { + boost::winapi::SetHandleInformation(handle, + boost::winapi::HANDLE_FLAG_INHERIT_, + boost::winapi::HANDLE_FLAG_INHERIT_); + + e.startup_info.hStdInput = handle; + e.startup_info.dwFlags |= boost::winapi::STARTF_USESTDHANDLES_; + e.inherit_handles = true; + } + template<typename WindowsExecutor> + void on_error(WindowsExecutor &, const std::error_code &) const + { + ::boost::winapi::CloseHandle(handle); + } + + template<typename WindowsExecutor> + void on_success(WindowsExecutor &) const + { + ::boost::winapi::CloseHandle(handle); + } +}; + +class async_pipe; + +struct async_pipe_in : public pipe_in +{ + async_pipe &pipe; + + template<typename AsyncPipe> + async_pipe_in(AsyncPipe & p) : pipe_in(p.native_source()), pipe(p) + { + } + + template<typename Pipe, typename Executor> + static void close(Pipe & pipe, Executor &) + { + boost::system::error_code ec; + std::move(pipe).source().close(ec); + } + + template<typename Executor> + void on_error(Executor & exec, const std::error_code &) + { + close(pipe, exec); + } + + template<typename Executor> + void on_success(Executor &exec) + { + close(pipe, exec); + } +}; + + +}}}} + +#endif |