diff --git a/include/boost/system/detail/error_code.hpp b/include/boost/system/detail/error_code.hpp index f211e5d..1cd01e6 100644 --- a/include/boost/system/detail/error_code.hpp +++ b/include/boost/system/detail/error_code.hpp @@ -256,7 +256,14 @@ public: #endif - return category().message( value() ); + if( lc_flags_ == 0 ) + { + return detail::system_error_category_message( value() ); + } + else + { + return category().message( value() ); + } } char const * message( char * buffer, std::size_t len ) const BOOST_NOEXCEPT @@ -264,23 +271,33 @@ public: #if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) if( lc_flags_ == 1 ) { + std::error_code const& ec = *reinterpret_cast( d2_ ); + #if !defined(BOOST_NO_EXCEPTIONS) try #endif { - std::error_code const& ec = *reinterpret_cast( d2_ ); detail::snprintf( buffer, len, "%s", ec.message().c_str() ); return buffer; } #if !defined(BOOST_NO_EXCEPTIONS) catch( ... ) { + detail::snprintf( buffer, len, "No message text available for error std:%s:%d", ec.category().name(), ec.value() ); + return buffer; } #endif } #endif - return category().message( value(), buffer, len ); + if( lc_flags_ == 0 ) + { + return detail::system_error_category_message( value(), buffer, len ); + } + else + { + return category().message( value(), buffer, len ); + } } BOOST_SYSTEM_CONSTEXPR bool failed() const BOOST_NOEXCEPT diff --git a/include/boost/system/detail/system_category_impl.hpp b/include/boost/system/detail/system_category_impl.hpp index 8f6002c..fc3933e 100644 --- a/include/boost/system/detail/system_category_impl.hpp +++ b/include/boost/system/detail/system_category_impl.hpp @@ -11,6 +11,7 @@ // See library home page at http://www.boost.org/libs/system #include +#include #include #include @@ -22,7 +23,6 @@ #if defined(BOOST_WINDOWS_API) -#include #include inline boost::system::error_condition boost::system::detail::system_error_category::default_error_condition( int ev ) const BOOST_NOEXCEPT @@ -39,35 +39,23 @@ inline boost::system::error_condition boost::system::detail::system_error_catego } } -inline std::string boost::system::detail::system_error_category::message( int ev ) const -{ - return system_category_message_win32( ev ); -} - -inline char const * boost::system::detail::system_error_category::message( int ev, char * buffer, std::size_t len ) const BOOST_NOEXCEPT -{ - return system_category_message_win32( ev, buffer, len ); -} - #else // #if defined(BOOST_WINDOWS_API) -#include - inline boost::system::error_condition boost::system::detail::system_error_category::default_error_condition( int ev ) const BOOST_NOEXCEPT { return error_condition( boost::system::detail::generic_value_tag( ev ) ); } +#endif // #if defined(BOOST_WINDOWS_API) + inline std::string boost::system::detail::system_error_category::message( int ev ) const { - return generic_error_category_message( ev ); + return system_error_category_message( ev ); } inline char const * boost::system::detail::system_error_category::message( int ev, char * buffer, std::size_t len ) const BOOST_NOEXCEPT { - return generic_error_category_message( ev, buffer, len ); + return system_error_category_message( ev, buffer, len ); } -#endif // #if defined(BOOST_WINDOWS_API) - #endif // #ifndef BOOST_SYSTEM_DETAIL_SYSTEM_CATEGORY_IMPL_HPP_INCLUDED diff --git a/include/boost/system/detail/system_category_message.hpp b/include/boost/system/detail/system_category_message.hpp new file mode 100644 index 0000000..203e75a --- /dev/null +++ b/include/boost/system/detail/system_category_message.hpp @@ -0,0 +1,71 @@ +#ifndef BOOST_SYSTEM_DETAIL_SYSTEM_CATEGORY_MESSAGE_HPP_INCLUDED +#define BOOST_SYSTEM_DETAIL_SYSTEM_CATEGORY_MESSAGE_HPP_INCLUDED + +// Implementation of system_error_category_message +// +// Copyright 2018, 2022 Peter Dimov +// +// 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) +// +// See library home page at http://www.boost.org/libs/system + +#include + +#if !defined(BOOST_POSIX_API) && !defined(BOOST_WINDOWS_API) +# error BOOST_POSIX_API or BOOST_WINDOWS_API must be defined +#endif + +#if defined(BOOST_WINDOWS_API) + +#include + +namespace boost +{ +namespace system +{ +namespace detail +{ + +inline std::string system_error_category_message( int ev ) +{ + return system_category_message_win32( ev ); +} + +inline char const * system_error_category_message( int ev, char * buffer, std::size_t len ) BOOST_NOEXCEPT +{ + return system_category_message_win32( ev, buffer, len ); +} + +} // namespace detail +} // namespace system +} // namespace boost + +#else // #if defined(BOOST_WINDOWS_API) + +#include + +namespace boost +{ +namespace system +{ +namespace detail +{ + +inline std::string system_error_category_message( int ev ) +{ + return generic_error_category_message( ev ); +} + +inline char const * system_error_category_message( int ev, char * buffer, std::size_t len ) BOOST_NOEXCEPT +{ + return generic_error_category_message( ev, buffer, len ); +} + +} // namespace detail +} // namespace system +} // namespace boost + +#endif // #if defined(BOOST_WINDOWS_API) + +#endif // #ifndef BOOST_SYSTEM_DETAIL_SYSTEM_CATEGORY_MESSAGE_HPP_INCLUDED