diff options
Diffstat (limited to 'boost/process/detail/windows/async_pipe.hpp')
-rw-r--r-- | boost/process/detail/windows/async_pipe.hpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/boost/process/detail/windows/async_pipe.hpp b/boost/process/detail/windows/async_pipe.hpp index 6cae1a584f..1bc2c8fec5 100644 --- a/boost/process/detail/windows/async_pipe.hpp +++ b/boost/process/detail/windows/async_pipe.hpp @@ -27,7 +27,7 @@ inline std::string make_pipe_name() auto pid = ::boost::winapi::GetCurrentProcessId(); - static std::atomic_size_t cnt = 0; + static std::atomic_size_t cnt{0}; name += std::to_string(pid); name += "_"; name += std::to_string(cnt++); @@ -144,6 +144,18 @@ public: return _sink.write_some(buffers); } + + template<typename MutableBufferSequence> + std::size_t read_some(const MutableBufferSequence & buffers, boost::system::error_code & ec) noexcept + { + return _source.read_some(buffers, ec); + } + template<typename MutableBufferSequence> + std::size_t write_some(const MutableBufferSequence & buffers, boost::system::error_code & ec) noexcept + { + return _sink.write_some(buffers, ec); + } + native_handle_type native_source() const {return const_cast<boost::asio::windows::stream_handle&>(_source).native_handle();} native_handle_type native_sink () const {return const_cast<boost::asio::windows::stream_handle&>(_sink ).native_handle();} @@ -265,7 +277,11 @@ async_pipe::async_pipe(boost::asio::io_context & ios_source, static constexpr int FILE_FLAG_OVERLAPPED_ = 0x40000000; //temporary ::boost::winapi::HANDLE_ source = ::boost::winapi::create_named_pipe( +#if defined(BOOST_NO_ANSI_APIS) + ::boost::process::detail::convert(name).c_str(), +#else name.c_str(), +#endif ::boost::winapi::PIPE_ACCESS_INBOUND_ | FILE_FLAG_OVERLAPPED_, //write flag 0, 1, 8192, 8192, 0, nullptr); @@ -277,7 +293,11 @@ async_pipe::async_pipe(boost::asio::io_context & ios_source, _source.assign(source); ::boost::winapi::HANDLE_ sink = boost::winapi::create_file( +#if defined(BOOST_NO_ANSI_APIS) + ::boost::process::detail::convert(name).c_str(), +#else name.c_str(), +#endif ::boost::winapi::GENERIC_WRITE_, 0, nullptr, ::boost::winapi::OPEN_EXISTING_, FILE_FLAG_OVERLAPPED_, //to allow read |