Index: libs/system/src/error_code.cpp =================================================================== RCS file: /cvsroot/boost/boost/libs/system/src/error_code.cpp,v retrieving revision 1.2 diff -u -r1.2 error_code.cpp --- libs/system/src/error_code.cpp 4 Nov 2006 13:51:31 -0000 1.2 +++ libs/system/src/error_code.cpp 10 Dec 2006 20:36:37 -0000 @@ -198,21 +198,32 @@ int result; for (;;) { - if ( (result = strerror_r( ec.value(), bp, sz )) != 0 ) + if ( (result = strerror_r( ec.value(), bp, sz )) == 0 ) + break; + else { # if defined(__linux) result = errno; # endif if ( result != ERANGE ) break; + if ( sz > sizeof(buf) ) std::free( bp ); + sz *= 2; + if ( (bp = static_cast(std::malloc( sz ))) == 0 ) + return std::string( "ENOMEM" ); } + } + try + { + std::string msg( ( result == EINVAL ) ? "EINVAL" : bp ); + if ( sz > sizeof(buf) ) std::free( bp ); + sz = 0; + return msg; + } + catch(...) + { if ( sz > sizeof(buf) ) std::free( bp ); - sz *= 2; - if ( (bp = static_cast(std::malloc( sz ))) == 0 ) - return std::string( "ENOMEM" ); - } - std::string msg( ( result == EINVAL ) ? "EINVAL" : bp ); - if ( sz > sizeof(buf) ) std::free( bp ); - return msg; + throw; + } # endif # endif } Index: libs/system/test/system_error_test.cpp =================================================================== RCS file: /cvsroot/boost/boost/libs/system/test/system_error_test.cpp,v retrieving revision 1.1 diff -u -r1.1 system_error_test.cpp --- libs/system/test/system_error_test.cpp 3 Nov 2006 16:57:30 -0000 1.1 +++ libs/system/test/system_error_test.cpp 10 Dec 2006 20:36:37 -0000 @@ -22,7 +22,9 @@ #include #include +# if defined( BOOST_WINDOWS_API ) #include +#endif using boost::system::system_error; using boost::system::error_code;