diff options
Diffstat (limited to '3rdparty/asio/include/asio/detail/impl/reactive_serial_port_service.ipp')
-rw-r--r-- | 3rdparty/asio/include/asio/detail/impl/reactive_serial_port_service.ipp | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/3rdparty/asio/include/asio/detail/impl/reactive_serial_port_service.ipp b/3rdparty/asio/include/asio/detail/impl/reactive_serial_port_service.ipp index 7ea37a4b7d9..23515a96c18 100644 --- a/3rdparty/asio/include/asio/detail/impl/reactive_serial_port_service.ipp +++ b/3rdparty/asio/include/asio/detail/impl/reactive_serial_port_service.ipp @@ -2,7 +2,7 @@ // detail/impl/reactive_serial_port_service.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -30,9 +30,9 @@ namespace asio { namespace detail { reactive_serial_port_service::reactive_serial_port_service( - asio::io_context& io_context) - : service_base<reactive_serial_port_service>(io_context), - descriptor_service_(io_context) + execution_context& context) + : execution_context_service_base<reactive_serial_port_service>(context), + descriptor_service_(context) { } @@ -69,11 +69,11 @@ asio::error_code reactive_serial_port_service::open( // Set up default serial port options. termios ios; - errno = 0; - s = descriptor_ops::error_wrapper(::tcgetattr(fd, &ios), ec); + s = ::tcgetattr(fd, &ios); + descriptor_ops::get_last_error(ec, s < 0); if (s >= 0) { -#if defined(_BSD_SOURCE) +#if defined(_BSD_SOURCE) || defined(_DEFAULT_SOURCE) ::cfmakeraw(&ios); #else ios.c_iflag &= ~(IGNBRK | BRKINT | PARMRK @@ -85,8 +85,8 @@ asio::error_code reactive_serial_port_service::open( #endif ios.c_iflag |= IGNPAR; ios.c_cflag |= CREAD | CLOCAL; - errno = 0; - s = descriptor_ops::error_wrapper(::tcsetattr(fd, TCSANOW, &ios), ec); + s = ::tcsetattr(fd, TCSANOW, &ios); + descriptor_ops::get_last_error(ec, s < 0); } if (s < 0) { @@ -111,18 +111,16 @@ asio::error_code reactive_serial_port_service::do_set_option( const void* option, asio::error_code& ec) { termios ios; - errno = 0; - descriptor_ops::error_wrapper(::tcgetattr( - descriptor_service_.native_handle(impl), &ios), ec); - if (ec) + int s = ::tcgetattr(descriptor_service_.native_handle(impl), &ios); + descriptor_ops::get_last_error(ec, s < 0); + if (s < 0) return ec; if (store(option, ios, ec)) return ec; - errno = 0; - descriptor_ops::error_wrapper(::tcsetattr( - descriptor_service_.native_handle(impl), TCSANOW, &ios), ec); + s = ::tcsetattr(descriptor_service_.native_handle(impl), TCSANOW, &ios); + descriptor_ops::get_last_error(ec, s < 0); return ec; } @@ -132,10 +130,9 @@ asio::error_code reactive_serial_port_service::do_get_option( void* option, asio::error_code& ec) const { termios ios; - errno = 0; - descriptor_ops::error_wrapper(::tcgetattr( - descriptor_service_.native_handle(impl), &ios), ec); - if (ec) + int s = ::tcgetattr(descriptor_service_.native_handle(impl), &ios); + descriptor_ops::get_last_error(ec, s < 0); + if (s < 0) return ec; return load(option, ios, ec); |