summaryrefslogtreecommitdiff
path: root/boost/system/detail/error_code.ipp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/system/detail/error_code.ipp')
-rw-r--r--boost/system/detail/error_code.ipp212
1 files changed, 114 insertions, 98 deletions
diff --git a/boost/system/detail/error_code.ipp b/boost/system/detail/error_code.ipp
index 71c60f61da..51ba3f4747 100644
--- a/boost/system/detail/error_code.ipp
+++ b/boost/system/detail/error_code.ipp
@@ -1,4 +1,4 @@
-// error_code support implementation file ----------------------------------//
+// error_code support implementation file --------------------------------------------//
// Copyright Beman Dawes 2002, 2006
// Copyright (c) Microsoft Corporation 2014
@@ -7,7 +7,7 @@
// See library home page at http://www.boost.org/libs/system
-//----------------------------------------------------------------------------//
+//--------------------------------------------------------------------------------------//
#include <boost/config/warning_disable.hpp>
@@ -21,7 +21,9 @@
#include <cstring> // for strerror/strerror_r
# if defined( BOOST_WINDOWS_API )
-# include <windows.h>
+# include <boost/detail/winapi/error_codes.hpp>
+# include <boost/detail/winapi/error_handling.hpp>
+# include <boost/detail/winapi/character_code_conversion.hpp>
# if !BOOST_PLAT_WINDOWS_RUNTIME
# include <boost/system/detail/local_free_on_destruction.hpp>
# endif
@@ -30,7 +32,7 @@
# endif
# endif
-//----------------------------------------------------------------------------//
+//--------------------------------------------------------------------------------------//
namespace boost
{
namespace system
@@ -39,7 +41,7 @@ namespace boost
namespace
{
- // standard error categories ---------------------------------------------//
+ // standard error categories -------------------------------------------------------//
class generic_error_category : public error_category
{
@@ -84,7 +86,8 @@ namespace
// -- VMS doesn't provide strerror_r, but on this platform, strerror is
// thread safe.
# if defined(BOOST_WINDOWS_API) || defined(__hpux) || defined(__sun)\
- || (defined(__linux) && (!defined(__USE_XOPEN2K) || defined(BOOST_SYSTEM_USE_STRERROR)))\
+ || (defined(__linux) && (!defined(__USE_XOPEN2K)\
+ || defined(BOOST_SYSTEM_USE_STRERROR)))\
|| (defined(__osf__) && !defined(_REENTRANT))\
|| (defined(__INTEGRITY))\
|| (defined(__vms))\
@@ -156,14 +159,15 @@ namespace
# endif // else POSIX version of strerror_r
# endif // else use strerror_r
}
- // system_error_category implementation --------------------------------//
+ // system_error_category implementation --------------------------------------------//
const char * system_error_category::name() const BOOST_SYSTEM_NOEXCEPT
{
return "system";
}
- error_condition system_error_category::default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT
+ error_condition system_error_category::default_error_condition( int ev ) const
+ BOOST_SYSTEM_NOEXCEPT
{
using namespace boost::system::errc;
#if defined(__PGI)
@@ -181,11 +185,17 @@ namespace
# endif
# endif
+# if defined(BOOST_WINDOWS_API)
+
+ using namespace boost::detail::winapi; // for error codes
+
+# endif
+
switch ( ev )
{
case 0: return make_error_condition( success );
# if defined(BOOST_POSIX_API)
- // POSIX-like O/S -> posix_errno decode table ---------------------------//
+ // POSIX-like O/S -> posix_errno decode table -------------------------------------//
case E2BIG: return make_error_condition( argument_list_too_long );
case EACCES: return make_error_condition( permission_denied );
case EADDRINUSE: return make_error_condition( address_in_use );
@@ -279,80 +289,81 @@ namespace
#else
// Windows system -> posix_errno decode table ---------------------------//
// see WinError.h comments for descriptions of errors
- case ERROR_ACCESS_DENIED: return make_error_condition( permission_denied );
- case ERROR_ALREADY_EXISTS: return make_error_condition( file_exists );
- case ERROR_BAD_UNIT: return make_error_condition( no_such_device );
- case ERROR_BUFFER_OVERFLOW: return make_error_condition( filename_too_long );
- case ERROR_BUSY: return make_error_condition( device_or_resource_busy );
- case ERROR_BUSY_DRIVE: return make_error_condition( device_or_resource_busy );
- case ERROR_CANNOT_MAKE: return make_error_condition( permission_denied );
- case ERROR_CANTOPEN: return make_error_condition( io_error );
- case ERROR_CANTREAD: return make_error_condition( io_error );
- case ERROR_CANTWRITE: return make_error_condition( io_error );
- case ERROR_CURRENT_DIRECTORY: return make_error_condition( permission_denied );
- case ERROR_DEV_NOT_EXIST: return make_error_condition( no_such_device );
- case ERROR_DEVICE_IN_USE: return make_error_condition( device_or_resource_busy );
- case ERROR_DIR_NOT_EMPTY: return make_error_condition( directory_not_empty );
- case ERROR_DIRECTORY: return make_error_condition( invalid_argument ); // WinError.h: "The directory name is invalid"
- case ERROR_DISK_FULL: return make_error_condition( no_space_on_device );
- case ERROR_FILE_EXISTS: return make_error_condition( file_exists );
- case ERROR_FILE_NOT_FOUND: return make_error_condition( no_such_file_or_directory );
- case ERROR_HANDLE_DISK_FULL: return make_error_condition( no_space_on_device );
- case ERROR_INVALID_ACCESS: return make_error_condition( permission_denied );
- case ERROR_INVALID_DRIVE: return make_error_condition( no_such_device );
- case ERROR_INVALID_FUNCTION: return make_error_condition( function_not_supported );
- case ERROR_INVALID_HANDLE: return make_error_condition( invalid_argument );
- case ERROR_INVALID_NAME: return make_error_condition( invalid_argument );
- case ERROR_LOCK_VIOLATION: return make_error_condition( no_lock_available );
- case ERROR_LOCKED: return make_error_condition( no_lock_available );
- case ERROR_NEGATIVE_SEEK: return make_error_condition( invalid_argument );
- case ERROR_NOACCESS: return make_error_condition( permission_denied );
- case ERROR_NOT_ENOUGH_MEMORY: return make_error_condition( not_enough_memory );
- case ERROR_NOT_READY: return make_error_condition( resource_unavailable_try_again );
- case ERROR_NOT_SAME_DEVICE: return make_error_condition( cross_device_link );
- case ERROR_OPEN_FAILED: return make_error_condition( io_error );
- case ERROR_OPEN_FILES: return make_error_condition( device_or_resource_busy );
- case ERROR_OPERATION_ABORTED: return make_error_condition( operation_canceled );
- case ERROR_OUTOFMEMORY: return make_error_condition( not_enough_memory );
- case ERROR_PATH_NOT_FOUND: return make_error_condition( no_such_file_or_directory );
- case ERROR_READ_FAULT: return make_error_condition( io_error );
- case ERROR_RETRY: return make_error_condition( resource_unavailable_try_again );
- case ERROR_SEEK: return make_error_condition( io_error );
- case ERROR_SHARING_VIOLATION: return make_error_condition( permission_denied );
- case ERROR_TOO_MANY_OPEN_FILES: return make_error_condition( too_many_files_open );
- case ERROR_WRITE_FAULT: return make_error_condition( io_error );
- case ERROR_WRITE_PROTECT: return make_error_condition( permission_denied );
- case WSAEACCES: return make_error_condition( permission_denied );
- case WSAEADDRINUSE: return make_error_condition( address_in_use );
- case WSAEADDRNOTAVAIL: return make_error_condition( address_not_available );
- case WSAEAFNOSUPPORT: return make_error_condition( address_family_not_supported );
- case WSAEALREADY: return make_error_condition( connection_already_in_progress );
- case WSAEBADF: return make_error_condition( bad_file_descriptor );
- case WSAECONNABORTED: return make_error_condition( connection_aborted );
- case WSAECONNREFUSED: return make_error_condition( connection_refused );
- case WSAECONNRESET: return make_error_condition( connection_reset );
- case WSAEDESTADDRREQ: return make_error_condition( destination_address_required );
- case WSAEFAULT: return make_error_condition( bad_address );
- case WSAEHOSTUNREACH: return make_error_condition( host_unreachable );
- case WSAEINPROGRESS: return make_error_condition( operation_in_progress );
- case WSAEINTR: return make_error_condition( interrupted );
- case WSAEINVAL: return make_error_condition( invalid_argument );
- case WSAEISCONN: return make_error_condition( already_connected );
- case WSAEMFILE: return make_error_condition( too_many_files_open );
- case WSAEMSGSIZE: return make_error_condition( message_size );
- case WSAENAMETOOLONG: return make_error_condition( filename_too_long );
- case WSAENETDOWN: return make_error_condition( network_down );
- case WSAENETRESET: return make_error_condition( network_reset );
- case WSAENETUNREACH: return make_error_condition( network_unreachable );
- case WSAENOBUFS: return make_error_condition( no_buffer_space );
- case WSAENOPROTOOPT: return make_error_condition( no_protocol_option );
- case WSAENOTCONN: return make_error_condition( not_connected );
- case WSAENOTSOCK: return make_error_condition( not_a_socket );
- case WSAEOPNOTSUPP: return make_error_condition( operation_not_supported );
- case WSAEPROTONOSUPPORT: return make_error_condition( protocol_not_supported );
- case WSAEPROTOTYPE: return make_error_condition( wrong_protocol_type );
- case WSAETIMEDOUT: return make_error_condition( timed_out );
- case WSAEWOULDBLOCK: return make_error_condition( operation_would_block );
+ case ERROR_ACCESS_DENIED_: return make_error_condition( permission_denied );
+ case ERROR_ALREADY_EXISTS_: return make_error_condition( file_exists );
+ case ERROR_BAD_UNIT_: return make_error_condition( no_such_device );
+ case ERROR_BUFFER_OVERFLOW_: return make_error_condition( filename_too_long );
+ case ERROR_BUSY_: return make_error_condition( device_or_resource_busy );
+ case ERROR_BUSY_DRIVE_: return make_error_condition( device_or_resource_busy );
+ case ERROR_CANNOT_MAKE_: return make_error_condition( permission_denied );
+ case ERROR_CANTOPEN_: return make_error_condition( io_error );
+ case ERROR_CANTREAD_: return make_error_condition( io_error );
+ case ERROR_CANTWRITE_: return make_error_condition( io_error );
+ case ERROR_CURRENT_DIRECTORY_: return make_error_condition( permission_denied );
+ case ERROR_DEV_NOT_EXIST_: return make_error_condition( no_such_device );
+ case ERROR_DEVICE_IN_USE_: return make_error_condition( device_or_resource_busy );
+ case ERROR_DIR_NOT_EMPTY_: return make_error_condition( directory_not_empty );
+ case ERROR_DIRECTORY_: return make_error_condition( invalid_argument );\
+ // WinError.h: "The directory name is invalid"
+ case ERROR_DISK_FULL_: return make_error_condition( no_space_on_device );
+ case ERROR_FILE_EXISTS_: return make_error_condition( file_exists );
+ case ERROR_FILE_NOT_FOUND_: return make_error_condition( no_such_file_or_directory );
+ case ERROR_HANDLE_DISK_FULL_: return make_error_condition( no_space_on_device );
+ case ERROR_INVALID_ACCESS_: return make_error_condition( permission_denied );
+ case ERROR_INVALID_DRIVE_: return make_error_condition( no_such_device );
+ case ERROR_INVALID_FUNCTION_: return make_error_condition( function_not_supported );
+ case ERROR_INVALID_HANDLE_: return make_error_condition( invalid_argument );
+ case ERROR_INVALID_NAME_: return make_error_condition( invalid_argument );
+ case ERROR_LOCK_VIOLATION_: return make_error_condition( no_lock_available );
+ case ERROR_LOCKED_: return make_error_condition( no_lock_available );
+ case ERROR_NEGATIVE_SEEK_: return make_error_condition( invalid_argument );
+ case ERROR_NOACCESS_: return make_error_condition( permission_denied );
+ case ERROR_NOT_ENOUGH_MEMORY_: return make_error_condition( not_enough_memory );
+ case ERROR_NOT_READY_: return make_error_condition( resource_unavailable_try_again );
+ case ERROR_NOT_SAME_DEVICE_: return make_error_condition( cross_device_link );
+ case ERROR_OPEN_FAILED_: return make_error_condition( io_error );
+ case ERROR_OPEN_FILES_: return make_error_condition( device_or_resource_busy );
+ case ERROR_OPERATION_ABORTED_: return make_error_condition( operation_canceled );
+ case ERROR_OUTOFMEMORY_: return make_error_condition( not_enough_memory );
+ case ERROR_PATH_NOT_FOUND_: return make_error_condition( no_such_file_or_directory );
+ case ERROR_READ_FAULT_: return make_error_condition( io_error );
+ case ERROR_RETRY_: return make_error_condition( resource_unavailable_try_again );
+ case ERROR_SEEK_: return make_error_condition( io_error );
+ case ERROR_SHARING_VIOLATION_: return make_error_condition( permission_denied );
+ case ERROR_TOO_MANY_OPEN_FILES_: return make_error_condition( too_many_files_open );
+ case ERROR_WRITE_FAULT_: return make_error_condition( io_error );
+ case ERROR_WRITE_PROTECT_: return make_error_condition( permission_denied );
+ case WSAEACCES_: return make_error_condition( permission_denied );
+ case WSAEADDRINUSE_: return make_error_condition( address_in_use );
+ case WSAEADDRNOTAVAIL_: return make_error_condition( address_not_available );
+ case WSAEAFNOSUPPORT_: return make_error_condition( address_family_not_supported );
+ case WSAEALREADY_: return make_error_condition( connection_already_in_progress );
+ case WSAEBADF_: return make_error_condition( bad_file_descriptor );
+ case WSAECONNABORTED_: return make_error_condition( connection_aborted );
+ case WSAECONNREFUSED_: return make_error_condition( connection_refused );
+ case WSAECONNRESET_: return make_error_condition( connection_reset );
+ case WSAEDESTADDRREQ_: return make_error_condition( destination_address_required );
+ case WSAEFAULT_: return make_error_condition( bad_address );
+ case WSAEHOSTUNREACH_: return make_error_condition( host_unreachable );
+ case WSAEINPROGRESS_: return make_error_condition( operation_in_progress );
+ case WSAEINTR_: return make_error_condition( interrupted );
+ case WSAEINVAL_: return make_error_condition( invalid_argument );
+ case WSAEISCONN_: return make_error_condition( already_connected );
+ case WSAEMFILE_: return make_error_condition( too_many_files_open );
+ case WSAEMSGSIZE_: return make_error_condition( message_size );
+ case WSAENAMETOOLONG_: return make_error_condition( filename_too_long );
+ case WSAENETDOWN_: return make_error_condition( network_down );
+ case WSAENETRESET_: return make_error_condition( network_reset );
+ case WSAENETUNREACH_: return make_error_condition( network_unreachable );
+ case WSAENOBUFS_: return make_error_condition( no_buffer_space );
+ case WSAENOPROTOOPT_: return make_error_condition( no_protocol_option );
+ case WSAENOTCONN_: return make_error_condition( not_connected );
+ case WSAENOTSOCK_: return make_error_condition( not_a_socket );
+ case WSAEOPNOTSUPP_: return make_error_condition( operation_not_supported );
+ case WSAEPROTONOSUPPORT_: return make_error_condition( protocol_not_supported );
+ case WSAEPROTOTYPE_: return make_error_condition( wrong_protocol_type );
+ case WSAETIMEDOUT_: return make_error_condition( timed_out );
+ case WSAEWOULDBLOCK_: return make_error_condition( operation_would_block );
#endif
default: return error_condition( ev, system_category() );
}
@@ -372,12 +383,13 @@ namespace
std::wstring buf(128, wchar_t());
for (;;)
{
- DWORD retval = ::FormatMessageW(
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
+ boost::detail::winapi::DWORD_ retval = boost::detail::winapi::FormatMessageW(
+ boost::detail::winapi::FORMAT_MESSAGE_FROM_SYSTEM_ |
+ boost::detail::winapi::FORMAT_MESSAGE_IGNORE_INSERTS_,
NULL,
ev,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+ boost::detail::winapi::MAKELANGID_(boost::detail::winapi::LANG_NEUTRAL_,
+ boost::detail::winapi::SUBLANG_DEFAULT_), // Default language
&buf[0],
buf.size(),
NULL
@@ -388,7 +400,8 @@ namespace
buf.resize(retval);
break;
}
- else if ( ::GetLastError() != ERROR_INSUFFICIENT_BUFFER )
+ else if (boost::detail::winapi::GetLastError() !=
+ boost::detail::winapi::ERROR_INSUFFICIENT_BUFFER_)
{
return std::string("Unknown error");
}
@@ -399,23 +412,26 @@ namespace
}
int num_chars = (buf.size() + 1) * 2;
- LPSTR narrow_buffer = (LPSTR)_alloca( num_chars );
- if (::WideCharToMultiByte(CP_ACP, 0, buf.c_str(), -1, narrow_buffer, num_chars, NULL, NULL) == 0)
+ boost::detail::winapi::LPSTR_ narrow_buffer =
+ (boost::detail::winapi::LPSTR_)_alloca(num_chars);
+ if (boost::detail::winapi::WideCharToMultiByte(boost::detail::winapi::CP_ACP_, 0,
+ buf.c_str(), -1, narrow_buffer, num_chars, NULL, NULL) == 0)
{
return std::string("Unknown error");
}
std::string str( narrow_buffer );
#else
- LPVOID lpMsgBuf = 0;
- DWORD retval = ::FormatMessageA(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
+ boost::detail::winapi::LPVOID_ lpMsgBuf = 0;
+ boost::detail::winapi::DWORD_ retval = boost::detail::winapi::FormatMessageA(
+ boost::detail::winapi::FORMAT_MESSAGE_ALLOCATE_BUFFER_ |
+ boost::detail::winapi::FORMAT_MESSAGE_FROM_SYSTEM_ |
+ boost::detail::winapi::FORMAT_MESSAGE_IGNORE_INSERTS_,
NULL,
ev,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
- (LPSTR) &lpMsgBuf,
+ boost::detail::winapi::MAKELANGID_(boost::detail::winapi::LANG_NEUTRAL_,
+ boost::detail::winapi::SUBLANG_DEFAULT_), // Default language
+ (boost::detail::winapi::LPSTR_) &lpMsgBuf,
0,
NULL
);
@@ -423,7 +439,7 @@ namespace
if (retval == 0)
return std::string("Unknown error");
- std::string str( static_cast<LPCSTR>(lpMsgBuf) );
+ std::string str(static_cast<boost::detail::winapi::LPCSTR_>(lpMsgBuf));
# endif
while ( str.size()
&& (str[str.size()-1] == '\n' || str[str.size()-1] == '\r') )