diff options
Diffstat (limited to 'boost/process/detail/windows')
-rw-r--r-- | boost/process/detail/windows/asio_fwd.hpp | 12 | ||||
-rw-r--r-- | boost/process/detail/windows/async_in.hpp | 18 | ||||
-rw-r--r-- | boost/process/detail/windows/async_out.hpp | 34 | ||||
-rw-r--r-- | boost/process/detail/windows/async_pipe.hpp | 29 | ||||
-rw-r--r-- | boost/process/detail/windows/basic_pipe.hpp | 7 | ||||
-rw-r--r-- | boost/process/detail/windows/io_context_ref.hpp | 8 | ||||
-rw-r--r-- | boost/process/detail/windows/on_exit.hpp | 6 | ||||
-rw-r--r-- | boost/process/detail/windows/wait_group.hpp | 2 |
8 files changed, 65 insertions, 51 deletions
diff --git a/boost/process/detail/windows/asio_fwd.hpp b/boost/process/detail/windows/asio_fwd.hpp index 0c388548fc..8c70998039 100644 --- a/boost/process/detail/windows/asio_fwd.hpp +++ b/boost/process/detail/windows/asio_fwd.hpp @@ -21,6 +21,9 @@ class basic_streambuf; typedef basic_streambuf<std::allocator<char>> streambuf; class io_context; +class executor; + + template <typename Handler> class basic_yield_context; @@ -34,7 +37,10 @@ class basic_stream_handle; typedef basic_stream_handle<stream_handle_service> stream_handle; #else /* defined(BOOST_ASIO_ENABLE_OLD_SERVICES) */ -class stream_handle; +template <typename Executor> +class basic_stream_handle; +typedef basic_stream_handle<executor> stream_handle; + #endif /* defined(BOOST_ASIO_ENABLE_OLD_SERVICES) */ @@ -46,7 +52,9 @@ class basic_object_handle; typedef basic_object_handle<object_handle_service> object_handle; #else /* defined(BOOST_ASIO_ENABLE_OLD_SERVICES) */ -class object_handle; +template <typename Executor> +class basic_object_handle; +typedef basic_object_handle<executor> object_handle; #endif /* defined(BOOST_ASIO_ENABLE_OLD_SERVICES) */ } //windows diff --git a/boost/process/detail/windows/async_in.hpp b/boost/process/detail/windows/async_in.hpp index fc38dcdc34..2a758337b8 100644 --- a/boost/process/detail/windows/async_in.hpp +++ b/boost/process/detail/windows/async_in.hpp @@ -48,28 +48,28 @@ struct async_in_buffer : ::boost::process::detail::windows::handler_base_ext, template <typename Executor> inline void on_success(Executor&) { - auto pipe = this->pipe; + auto pipe_ = this->pipe; if (this->promise) { - auto promise = this->promise; + auto promise_ = this->promise; - boost::asio::async_write(*pipe, buf, - [promise](const boost::system::error_code & ec, std::size_t) + boost::asio::async_write(*pipe_, buf, + [promise_](const boost::system::error_code & ec, std::size_t) { if (ec && (ec.value() != ::boost::winapi::ERROR_BROKEN_PIPE_)) { std::error_code e(ec.value(), std::system_category()); - promise->set_exception(std::make_exception_ptr(process_error(e))); + promise_->set_exception(std::make_exception_ptr(process_error(e))); } - promise->set_value(); + promise_->set_value(); }); } else - boost::asio::async_write(*pipe, buf, - [pipe](const boost::system::error_code&, std::size_t){}); + boost::asio::async_write(*pipe_, buf, + [pipe_](const boost::system::error_code&, std::size_t){}); - std::move(*pipe).source().close(); + std::move(*pipe_).source().close(); this->pipe = nullptr; diff --git a/boost/process/detail/windows/async_out.hpp b/boost/process/detail/windows/async_out.hpp index 6bcb5e82ae..525cbafef0 100644 --- a/boost/process/detail/windows/async_out.hpp +++ b/boost/process/detail/windows/async_out.hpp @@ -80,10 +80,10 @@ struct async_out_buffer : ::boost::process::detail::windows::handler_base_ext, template <typename Executor> inline void on_success(Executor&) { - auto pipe = this->pipe; - boost::asio::async_read(*pipe, buf, - [pipe](const boost::system::error_code&, std::size_t){}); - std::move(*pipe).sink().close(); + auto pipe_ = this->pipe; + boost::asio::async_read(*pipe_, buf, + [pipe_](const boost::system::error_code&, std::size_t){}); + std::move(*pipe_).sink().close(); this->pipe = nullptr; } @@ -122,34 +122,34 @@ struct async_out_future : ::boost::process::detail::windows::handler_base_ext, template <typename Executor> inline void on_success(Executor&) { - auto pipe = this->pipe; - auto buffer = this->buffer; - auto promise = this->promise; - std::move(*pipe).sink().close(); - boost::asio::async_read(*pipe, *buffer, - [pipe, buffer, promise](const boost::system::error_code& ec, std::size_t) + auto pipe_ = this->pipe; + auto buffer_ = this->buffer; + auto promise_ = this->promise; + std::move(*pipe_).sink().close(); + boost::asio::async_read(*pipe_, *buffer_, + [pipe_, buffer_, promise_](const boost::system::error_code& ec, std::size_t) { if (ec && (ec.value() != ::boost::winapi::ERROR_BROKEN_PIPE_)) { std::error_code e(ec.value(), std::system_category()); - promise->set_exception(std::make_exception_ptr(process_error(e))); + promise_->set_exception(std::make_exception_ptr(process_error(e))); } else { - std::istream is (buffer.get()); + std::istream is (buffer_.get()); Type arg; - if (buffer->size() > 0) + if (buffer_->size() > 0) { - arg.resize(buffer->size()); - is.read(&*arg.begin(), buffer->size()); + arg.resize(buffer_->size()); + is.read(&*arg.begin(), buffer_->size()); } - promise->set_value(std::move(arg)); + promise_->set_value(std::move(arg)); } }); - this->pipe = nullptr; + this->pipe = nullptr; this->buffer = nullptr; this->promise = nullptr; diff --git a/boost/process/detail/windows/async_pipe.hpp b/boost/process/detail/windows/async_pipe.hpp index 746d5a28f7..f06653962a 100644 --- a/boost/process/detail/windows/async_pipe.hpp +++ b/boost/process/detail/windows/async_pipe.hpp @@ -14,6 +14,7 @@ #include <boost/winapi/access_rights.hpp> #include <boost/winapi/process.hpp> #include <boost/process/detail/windows/basic_pipe.hpp> +#include <boost/asio/post.hpp> #include <boost/asio/windows/stream_handle.hpp> #include <atomic> #include <system_error> @@ -99,12 +100,12 @@ public: if (_sink.is_open()) { _sink.close(); - _sink = handle_type(_sink.get_io_context()); + _sink = handle_type(_sink.get_executor()); } if (_source.is_open()) { _source.close(); - _source = handle_type(_source.get_io_context()); + _source = handle_type(_source.get_executor()); } } void close(boost::system::error_code & ec) @@ -112,12 +113,12 @@ public: if (_sink.is_open()) { _sink.close(ec); - _sink = handle_type(_sink.get_io_context()); + _sink = handle_type(_sink.get_executor()); } if (_source.is_open()) { _source.close(ec); - _source = handle_type(_source.get_io_context()); + _source = handle_type(_source.get_executor()); } } @@ -128,9 +129,9 @@ public: void async_close() { if (_sink.is_open()) - _sink.get_io_context(). post([this]{_sink.close();}); + boost::asio::post(_sink.get_executor(), [this]{_sink.close();}); if (_source.is_open()) - _source.get_io_context().post([this]{_source.close();}); + boost::asio::post(_source.get_executor(), [this]{_source.close();}); } template<typename MutableBufferSequence> @@ -189,13 +190,13 @@ public: handle_type source(::boost::asio::io_context& ios) && { - ::boost::asio::windows::stream_handle stolen(ios, _source.native_handle()); + ::boost::asio::windows::stream_handle stolen(ios.get_executor(), _source.native_handle()); _source.assign(::boost::winapi::INVALID_HANDLE_VALUE_); return stolen; } handle_type sink (::boost::asio::io_context& ios) && { - ::boost::asio::windows::stream_handle stolen(ios, _sink.native_handle()); + ::boost::asio::windows::stream_handle stolen(ios.get_executor(), _sink.native_handle()); _sink.assign(::boost::winapi::INVALID_HANDLE_VALUE_); return stolen; } @@ -214,7 +215,7 @@ public: ::boost::winapi::DUPLICATE_SAME_ACCESS_)) throw_last_error("Duplicate Pipe Failed"); - return ::boost::asio::windows::stream_handle(ios, source); + return ::boost::asio::windows::stream_handle(ios.get_executor(), source); } handle_type sink (::boost::asio::io_context& ios) const & { @@ -230,15 +231,15 @@ public: ::boost::winapi::DUPLICATE_SAME_ACCESS_)) throw_last_error("Duplicate Pipe Failed"); - return ::boost::asio::windows::stream_handle(ios, sink); + return ::boost::asio::windows::stream_handle(ios.get_executor(), sink); } }; async_pipe::async_pipe(const async_pipe& p) : - _source(const_cast<handle_type&>(p._source).get_io_context()), - _sink (const_cast<handle_type&>(p._sink).get_io_context()) + _source(const_cast<handle_type&>(p._source).get_executor()), + _sink (const_cast<handle_type&>(p._sink).get_executor()) { auto proc = ::boost::winapi::GetCurrentProcess(); @@ -337,8 +338,8 @@ async_pipe& async_pipe::operator=(const async_pipe & p) throw_last_error("Duplicate Pipe Failed"); //so we also assign the io_context - _source = ::boost::asio::windows::stream_handle(source_in.get_io_context(), source); - _sink = ::boost::asio::windows::stream_handle(source_in.get_io_context(), sink); + _source = ::boost::asio::windows::stream_handle(source_in.get_executor(), source); + _sink = ::boost::asio::windows::stream_handle(source_in.get_executor(), sink); return *this; } diff --git a/boost/process/detail/windows/basic_pipe.hpp b/boost/process/detail/windows/basic_pipe.hpp index ca691c078e..28f5651d75 100644 --- a/boost/process/detail/windows/basic_pipe.hpp +++ b/boost/process/detail/windows/basic_pipe.hpp @@ -143,8 +143,13 @@ basic_pipe<Char, Traits>::basic_pipe(const std::string & name) static constexpr int FILE_FLAG_OVERLAPPED_ = 0x40000000; //temporary //static constexpr int FILE_ATTRIBUTE_NORMAL_ = 0x00000080; //temporary +#if BOOST_NO_ANSI_APIS + std::wstring name_ = boost::process::detail::convert(name); +#else + auto &name_ = name; +#endif ::boost::winapi::HANDLE_ source = ::boost::winapi::create_named_pipe( - name.c_str(), + name_.c_str(), ::boost::winapi::PIPE_ACCESS_INBOUND_ | FILE_FLAG_OVERLAPPED_, //write flag 0, 1, 8192, 8192, 0, nullptr); diff --git a/boost/process/detail/windows/io_context_ref.hpp b/boost/process/detail/windows/io_context_ref.hpp index 903ef0a09f..783c3179e4 100644 --- a/boost/process/detail/windows/io_context_ref.hpp +++ b/boost/process/detail/windows/io_context_ref.hpp @@ -3,8 +3,8 @@ // 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_IO_SERVICE_REF_HPP_ -#define BOOST_PROCESS_WINDOWS_IO_SERVICE_REF_HPP_ +#ifndef BOOST_PROCESS_WINDOWS_IO_CONTEXT_REF_HPP_ +#define BOOST_PROCESS_WINDOWS_IO_CONTEXT_REF_HPP_ #include <boost/process/detail/handler_base.hpp> #include <boost/process/detail/windows/async_handler.hpp> @@ -130,7 +130,7 @@ struct io_context_ref : boost::process::detail::handler_base boost::asio::io_context & ios, void * handle, const std::shared_ptr<std::atomic<int>> &exit_status) : funcs(std::move(funcs)), - handle(new boost::asio::windows::object_handle(ios, handle)), + handle(new boost::asio::windows::object_handle(ios.get_executor(), handle)), exit_status(exit_status) { @@ -157,4 +157,4 @@ private: }}}} -#endif /* BOOST_PROCESS_WINDOWS_IO_SERVICE_REF_HPP_ */ +#endif /* BOOST_PROCESS_WINDOWS_IO_CONTEXT_REF_HPP_ */ diff --git a/boost/process/detail/windows/on_exit.hpp b/boost/process/detail/windows/on_exit.hpp index 92517cb83c..227485c489 100644 --- a/boost/process/detail/windows/on_exit.hpp +++ b/boost/process/detail/windows/on_exit.hpp @@ -25,10 +25,10 @@ struct on_exit_ : boost::process::detail::windows::async_handler template<typename Executor> std::function<void(int, const std::error_code&)> on_exit_handler(Executor&) { - auto handler = this->handler; - return [handler](int exit_code, const std::error_code & ec) + auto handler_ = this->handler; + return [handler_](int exit_code, const std::error_code & ec) { - handler(static_cast<int>(exit_code), ec); + handler_(static_cast<int>(exit_code), ec); }; } diff --git a/boost/process/detail/windows/wait_group.hpp b/boost/process/detail/windows/wait_group.hpp index 6dca466d83..33e353f998 100644 --- a/boost/process/detail/windows/wait_group.hpp +++ b/boost/process/detail/windows/wait_group.hpp @@ -17,7 +17,7 @@ namespace boost { namespace process { namespace detail { namespace windows { struct group_handle; -inline bool wait_impl(const group_handle & p, std::error_code & ec, int wait_time) +inline bool wait_impl(const group_handle & p, std::error_code & ec, std::chrono::system_clock::rep wait_time) { ::boost::winapi::DWORD_ completion_code; ::boost::winapi::ULONG_PTR_ completion_key; |