diff --git a/include/boost/system/system_error.hpp b/include/boost/system/system_error.hpp index 4091647..3e83500 100644 --- a/include/boost/system/system_error.hpp +++ b/include/boost/system/system_error.hpp @@ -62,11 +62,8 @@ namespace boost try { m_what = this->std::runtime_error::what(); - if ( m_error_code ) - { - if ( !m_what.empty() ) m_what += ": "; - m_what += m_error_code.message(); - } + if ( !m_what.empty() ) m_what += ": "; + m_what += m_error_code.message(); } catch (...) { return std::runtime_error::what(); } } diff --git a/test/error_code_test.cpp b/test/error_code_test.cpp index 69f6c3c..4870b2d 100644 --- a/test/error_code_test.cpp +++ b/test/error_code_test.cpp @@ -7,7 +7,10 @@ // See library home page at http://www.boost.org/libs/system -//----------------------------------------------------------------------------// +//----------------------------------------------------------------------------// + +// test without deprecated features +#define BOOST_SYSTEM_NO_DEPRECATED #include @@ -59,31 +62,31 @@ int main( int, char ** ) std::cout << "General tests...\n"; // unit tests: - BOOST_TEST( posix_category == posix_category ); + BOOST_TEST( generic_category == generic_category ); BOOST_TEST( system_category == system_category ); - BOOST_TEST( posix_category != system_category ); - BOOST_TEST( system_category != posix_category ); + BOOST_TEST( generic_category != system_category ); + BOOST_TEST( system_category != generic_category ); - if ( std::less()( &posix_category, &system_category ) ) + if ( std::less()( &generic_category, &system_category ) ) { - BOOST_TEST( posix_category < system_category ); - BOOST_TEST( !(system_category < posix_category) ); + BOOST_TEST( generic_category < system_category ); + BOOST_TEST( !(system_category < generic_category) ); } else { - BOOST_TEST( system_category < posix_category ); - BOOST_TEST( !(posix_category < system_category) ); + BOOST_TEST( system_category < generic_category ); + BOOST_TEST( !(generic_category < system_category) ); } error_code ec; - error_condition dec; + error_condition econd; BOOST_TEST( !ec ); BOOST_TEST( ec.value() == 0 ); - dec = ec.default_error_condition(); - BOOST_TEST( dec.value() == 0 ); - BOOST_TEST( dec.category() == posix_category ); - BOOST_TEST( ec == posix::success ); + econd = ec.default_error_condition(); + BOOST_TEST( econd.value() == 0 ); + BOOST_TEST( econd.category() == generic_category ); + BOOST_TEST( ec == errc::success ); BOOST_TEST( ec.category() == system_category ); BOOST_TEST( std::strcmp( ec.category().name(), "system") == 0 ); BOOST_TEST( !(ec < error_code( 0, system_category )) ); @@ -94,10 +97,10 @@ int main( int, char ** ) error_code ec_0_system( 0, system_category ); BOOST_TEST( !ec_0_system ); BOOST_TEST( ec_0_system.value() == 0 ); - dec = ec_0_system.default_error_condition(); - BOOST_TEST( dec.value() == 0 ); - BOOST_TEST( dec.category() == posix_category ); - BOOST_TEST( ec_0_system == posix::success ); + econd = ec_0_system.default_error_condition(); + BOOST_TEST( econd.value() == 0 ); + BOOST_TEST( econd.category() == generic_category ); + BOOST_TEST( ec_0_system == errc::success ); BOOST_TEST( ec_0_system.category() == system_category ); BOOST_TEST( std::strcmp( ec_0_system.category().name(), "system") == 0 ); check_ostream( ec_0_system, "system:0" ); @@ -115,38 +118,40 @@ int main( int, char ** ) ec = error_code( BOOST_ACCESS_ERROR_MACRO, system_category ); BOOST_TEST( ec ); BOOST_TEST( ec.value() == BOOST_ACCESS_ERROR_MACRO ); - dec = ec.default_error_condition(); - BOOST_TEST( dec.value() == static_cast(posix::permission_denied) ); - BOOST_TEST( dec.category() == posix_category ); - BOOST_TEST( dec == error_condition( posix::permission_denied, posix_category ) ); - BOOST_TEST( dec == posix::permission_denied ); - BOOST_TEST( posix::permission_denied == dec ); - BOOST_TEST( ec == posix::permission_denied ); + econd = ec.default_error_condition(); + BOOST_TEST( econd.value() == static_cast(errc::permission_denied) ); + BOOST_TEST( econd.category() == generic_category ); + BOOST_TEST( econd == error_condition( errc::permission_denied, generic_category ) ); + BOOST_TEST( econd == errc::permission_denied ); + BOOST_TEST( errc::permission_denied == econd ); + BOOST_TEST( ec == errc::permission_denied ); BOOST_TEST( ec.category() == system_category ); BOOST_TEST( std::strcmp( ec.category().name(), "system") == 0 ); - // test the explicit make_error_code conversion for posix - ec = make_error_code( posix::bad_message ); + // test the explicit make_error_code conversion for errc + ec = make_error_code( errc::bad_message ); BOOST_TEST( ec ); - BOOST_TEST( ec == posix::bad_message ); - BOOST_TEST( posix::bad_message == ec ); - BOOST_TEST( ec != posix::permission_denied ); - BOOST_TEST( posix::permission_denied != ec ); - BOOST_TEST( ec.category() == posix_category ); + BOOST_TEST( ec == errc::bad_message ); + BOOST_TEST( errc::bad_message == ec ); + BOOST_TEST( ec != errc::permission_denied ); + BOOST_TEST( errc::permission_denied != ec ); + BOOST_TEST( ec.category() == generic_category ); - // test the deprecated predefined error_category synonyms - BOOST_TEST( &system_category == &native_ecat ); - BOOST_TEST( &posix_category == &errno_ecat ); - BOOST_TEST( system_category == native_ecat ); - BOOST_TEST( posix_category == errno_ecat ); + //// test the deprecated predefined error_category synonyms + //BOOST_TEST( &system_category == &native_ecat ); + //BOOST_TEST( &generic_category == &errno_ecat ); + //BOOST_TEST( system_category == native_ecat ); + //BOOST_TEST( generic_category == errno_ecat ); // test error_code and error_condition message(); // see Boost.Filesystem operations_test for code specific message() tests ec = error_code( -1, system_category ); std::cout << "error_code message for -1 is \"" << ec.message() << "\"\n"; + std::cout << "error_code message for 0 is \"" << ec_0_system.message() << "\"\n"; #if defined(BOOST_WINDOWS_API) // Borland appends newline, so just check text BOOST_TEST( ec.message().substr(0,13) == "Unknown error" ); + BOOST_TEST( ec_0_system.message().substr(0,36) == "The operation completed successfully" ); #elif defined(linux) || defined(__linux) || defined(__linux__) // Linux appends value to message as unsigned, so it varies with # of bits BOOST_TEST( ec.message().substr(0,13) == "Unknown error" ); @@ -162,63 +167,66 @@ int main( int, char ** ) BOOST_TEST( ec.message() != "" ); BOOST_TEST( ec.message().substr( 0, 13) != "Unknown error" ); - dec = error_condition( -1, posix_category ); - std::cout << "error_condition message for -1 is \"" << dec.message() << "\"\n"; + econd = error_condition( -1, generic_category ); + error_condition econd_ok; + std::cout << "error_condition message for -1 is \"" << econd.message() << "\"\n"; + std::cout << "error_condition message for 0 is \"" << econd_ok.message() << "\"\n"; #if defined(BOOST_WINDOWS_API) // Borland appends newline, so just check text - BOOST_TEST( dec.message().substr(0,13) == "Unknown error" ); + BOOST_TEST( econd.message().substr(0,13) == "Unknown error" ); + BOOST_TEST( econd_ok.message().substr(0,8) == "No error" ); #elif defined(linux) || defined(__linux) || defined(__linux__) // Linux appends value to message as unsigned, so it varies with # of bits - BOOST_TEST( dec.message().substr(0,13) == "Unknown error" ); + BOOST_TEST( econd.message().substr(0,13) == "Unknown error" ); #elif defined(__hpux) - BOOST_TEST( dec.message() == "" ); + BOOST_TEST( econd.message() == "" ); #elif defined(__osf__) - BOOST_TEST( dec.message() == "Error -1 occurred." ); + BOOST_TEST( econd.message() == "Error -1 occurred." ); #elif defined(__vms) - BOOST_TEST( dec.message() == "error -1" ); + BOOST_TEST( econd.message() == "error -1" ); #endif - dec = error_condition( BOOST_ACCESS_ERROR_MACRO, posix_category ); - BOOST_TEST( dec.message() != "" ); - BOOST_TEST( dec.message().substr( 0, 13) != "Unknown error" ); + econd = error_condition( BOOST_ACCESS_ERROR_MACRO, generic_category ); + BOOST_TEST( econd.message() != "" ); + BOOST_TEST( econd.message().substr( 0, 13) != "Unknown error" ); #ifdef BOOST_WINDOWS_API std::cout << "Windows tests...\n"; - // these tests probe the Windows posix decoder + // these tests probe the Windows errc decoder // test the first entry in the decoder table: ec = error_code( ERROR_ACCESS_DENIED, system_category ); BOOST_TEST( ec.value() == ERROR_ACCESS_DENIED ); - BOOST_TEST( ec == posix::permission_denied ); - BOOST_TEST( ec.default_error_condition().value() == posix::permission_denied ); - BOOST_TEST( ec.default_error_condition().category() == posix_category ); + BOOST_TEST( ec == errc::permission_denied ); + BOOST_TEST( ec.default_error_condition().value() == errc::permission_denied ); + BOOST_TEST( ec.default_error_condition().category() == generic_category ); // test the second entry in the decoder table: ec = error_code( ERROR_ALREADY_EXISTS, system_category ); BOOST_TEST( ec.value() == ERROR_ALREADY_EXISTS ); - BOOST_TEST( ec == posix::file_exists ); - BOOST_TEST( ec.default_error_condition().value() == posix::file_exists ); - BOOST_TEST( ec.default_error_condition().category() == posix_category ); + BOOST_TEST( ec == errc::file_exists ); + BOOST_TEST( ec.default_error_condition().value() == errc::file_exists ); + BOOST_TEST( ec.default_error_condition().category() == generic_category ); // test the third entry in the decoder table: ec = error_code( ERROR_BAD_UNIT, system_category ); BOOST_TEST( ec.value() == ERROR_BAD_UNIT ); - BOOST_TEST( ec == posix::no_such_device ); - BOOST_TEST( ec.default_error_condition().value() == posix::no_such_device ); - BOOST_TEST( ec.default_error_condition().category() == posix_category ); + BOOST_TEST( ec == errc::no_such_device ); + BOOST_TEST( ec.default_error_condition().value() == errc::no_such_device ); + BOOST_TEST( ec.default_error_condition().category() == generic_category ); // test the last non-Winsock entry in the decoder table: ec = error_code( ERROR_WRITE_PROTECT, system_category ); BOOST_TEST( ec.value() == ERROR_WRITE_PROTECT ); - BOOST_TEST( ec == posix::permission_denied ); - BOOST_TEST( ec.default_error_condition().value() == posix::permission_denied ); - BOOST_TEST( ec.default_error_condition().category() == posix_category ); + BOOST_TEST( ec == errc::permission_denied ); + BOOST_TEST( ec.default_error_condition().value() == errc::permission_denied ); + BOOST_TEST( ec.default_error_condition().category() == generic_category ); // test the last Winsock entry in the decoder table: ec = error_code( WSAEWOULDBLOCK, system_category ); BOOST_TEST( ec.value() == WSAEWOULDBLOCK ); - BOOST_TEST( ec == posix::operation_would_block ); - BOOST_TEST( ec.default_error_condition().value() == posix::operation_would_block ); - BOOST_TEST( ec.default_error_condition().category() == posix_category ); + BOOST_TEST( ec == errc::operation_would_block ); + BOOST_TEST( ec.default_error_condition().value() == errc::operation_would_block ); + BOOST_TEST( ec.default_error_condition().category() == generic_category ); // test not-in-table condition: ec = error_code( 1234567890, system_category ); @@ -230,12 +238,12 @@ int main( int, char ** ) std::cout << "POSIX tests...\n"; ec = error_code( EACCES, system_category ); - BOOST_TEST( ec == error_code( posix::permission_denied, system_category ) ); - BOOST_TEST( error_code( posix::permission_denied, system_category ) == ec ); - BOOST_TEST( ec == posix::permission_denied ); - BOOST_TEST( posix::permission_denied == ec ); - BOOST_TEST( ec.default_error_condition().value() == posix::permission_denied ); - BOOST_TEST( ec.default_error_condition().category() == posix_category ); + BOOST_TEST( ec == error_code( errc::permission_denied, system_category ) ); + BOOST_TEST( error_code( errc::permission_denied, system_category ) == ec ); + BOOST_TEST( ec == errc::permission_denied ); + BOOST_TEST( errc::permission_denied == ec ); + BOOST_TEST( ec.default_error_condition().value() == errc::permission_denied ); + BOOST_TEST( ec.default_error_condition().category() == generic_category ); # ifdef __CYGWIN__ diff --git a/test/system_error_test.cpp b/test/system_error_test.cpp index 269fb5d..0f3dbe4 100644 --- a/test/system_error_test.cpp +++ b/test/system_error_test.cpp @@ -9,6 +9,9 @@ //----------------------------------------------------------------------------// +// test without deprecated features +#define BOOST_SYSTEM_NO_DEPRECATED + #include #include @@ -80,24 +83,24 @@ int test_main( int, char *[] ) system_error c6_0( 0, system_category, "c6_0" ); system_error c6_1( 1, system_category, "c6_1" ); - TEST( c1_0, 0, "" ); + TEST( c1_0, 0, "The operation completed successfully" ); TEST( c1_1, 1, "Incorrect function" ); TEST( c1_2u, 2, "The system cannot find the file specified" ); - TEST( c2_0, 0, "c2_0" ); + TEST( c2_0, 0, "c2_0: The operation completed successfully" ); TEST( c2_1, 1, "c2_1: Incorrect function" ); - TEST( c3_0, 0, "c3_0" ); + TEST( c3_0, 0, "c3_0: The operation completed successfully" ); TEST( c3_1, 1, "c3_1: Incorrect function" ); - TEST( c4_0, 0, "" ); + TEST( c4_0, 0, "The operation completed successfully" ); TEST( c4_1, 1, "Incorrect function" ); TEST( c4_2u, 2, "The system cannot find the file specified" ); - TEST( c5_0, 0, "c5_0" ); + TEST( c5_0, 0, "c5_0: The operation completed successfully" ); TEST( c5_1, 1, "c5_1: Incorrect function" ); - TEST( c6_0, 0, "c6_0" ); + TEST( c6_0, 0, "c6_0: The operation completed successfully" ); TEST( c6_1, 1, "c6_1: Incorrect function" ); return 0; diff --git a/test/system_msvc/common.vsprops b/test/system_msvc/common.vsprops index 9a558f8..4dce1d5 100644 --- a/test/system_msvc/common.vsprops +++ b/test/system_msvc/common.vsprops @@ -9,6 +9,7 @@ AdditionalIncludeDirectories="../../../../.." PreprocessorDefinitions="BOOST_ALL_NO_LIB" ExceptionHandling="2" + WarningLevel="4" />