2 // Copyright 2018 Peter Dimov.
4 // Distributed under the Boost Software License, Version 1.0.
6 // See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt
9 // See library home page at http://www.boost.org/libs/system
11 // Avoid spurious VC++ warnings
12 # define _CRT_SECURE_NO_WARNINGS
14 #include <boost/system/error_code.hpp>
15 #include <boost/core/lightweight_test.hpp>
21 #if defined(BOOST_WINDOWS_API) && defined(BOOST_SYSTEM_USE_UTF8)
23 #include <boost/config/pragma_message.hpp>
25 BOOST_PRAGMA_MESSAGE( "Skipping test due to BOOST_WINDOWS_API && BOOST_SYSTEM_USE_UTF8" )
31 #if defined(BOOST_WINDOWS_API)
35 std::string
sys_strerror( int ev
)
39 DWORD retval
= FormatMessageA(
40 FORMAT_MESSAGE_ALLOCATE_BUFFER
|
41 FORMAT_MESSAGE_FROM_SYSTEM
|
42 FORMAT_MESSAGE_IGNORE_INSERTS
,
45 MAKELANGID(LANG_NEUTRAL
, SUBLANG_DEFAULT
),
61 local_free lf_
= { lpMsgBuf
};
67 std::sprintf( buffer
, "Unknown error (%d)", ev
);
71 std::string
str( static_cast<char const*>( lpMsgBuf
) );
73 while( !str
.empty() && (str
[str
.size()-1] == '\n' || str
[str
.size()-1] == '\r') )
75 str
.erase( str
.size()-1 );
78 if( !str
.empty() && str
[str
.size()-1] == '.' )
80 str
.erase( str
.size()-1 );
88 std::string
sys_strerror( int ev
)
90 return std::strerror( ev
);
97 namespace sys
= boost::system
;
99 static void test_message( sys::error_category
const & cat
, int ev
)
101 BOOST_TEST_EQ( cat
.message( ev
), sys_strerror( ev
) );
103 char buffer
[ 4096 ]; // yes, really
104 BOOST_TEST_CSTR_EQ( cat
.message( ev
, buffer
, sizeof( buffer
) ), sys_strerror( ev
).c_str() );
109 sys::error_category
const & cat
= sys::system_category();
113 for( int i
= -2; i
< 16000; ++i
)
115 test_message( cat
, i
);
118 return boost::report_errors();
121 #endif // #if defined(BOOST_WINDOWS_API) && defined(BOOST_SYSTEM_USE_UTF8)