]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/system/detail/system_category_condition_win32.hpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / boost / system / detail / system_category_condition_win32.hpp
1 #ifndef BOOST_SYSTEM_DETAIL_SYSTEM_CATEGORY_CONDITION_WIN32_HPP_INCLUDED
2 #define BOOST_SYSTEM_DETAIL_SYSTEM_CATEGORY_CONDITION_WIN32_HPP_INCLUDED
3
4 // Copyright Beman Dawes 2002, 2006
5 // Copyright (c) Microsoft Corporation 2014
6 // Copyright 2018 Peter Dimov
7 //
8 // Distributed under the Boost Software License, Version 1.0. (See accompanying
9 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
10 //
11 // See library home page at http://www.boost.org/libs/system
12
13 #include <boost/system/detail/errc.hpp>
14 #include <boost/winapi/error_codes.hpp>
15 #include <boost/config.hpp>
16
17 //
18
19 namespace boost
20 {
21
22 namespace system
23 {
24
25 namespace detail
26 {
27
28 inline int system_category_condition_win32( int ev ) BOOST_NOEXCEPT
29 {
30 // When using the Windows Runtime, most system errors are reported as HRESULTs.
31 // We want to map the common Win32 errors to their equivalent error condition,
32 // whether or not they are reported via an HRESULT.
33
34 #define BOOST_SYSTEM_FAILED(hr) ((hr) < 0)
35 #define BOOST_SYSTEM_HRESULT_FACILITY(hr) (((hr) >> 16) & 0x1fff)
36 #define BOOST_SYSTEM_HRESULT_CODE(hr) ((hr) & 0xFFFF)
37 #define BOOST_SYSTEM_FACILITY_WIN32 7
38
39 if( BOOST_SYSTEM_FAILED( ev ) && BOOST_SYSTEM_HRESULT_FACILITY( ev ) == BOOST_SYSTEM_FACILITY_WIN32 )
40 {
41 ev = BOOST_SYSTEM_HRESULT_CODE( ev );
42 }
43
44 #undef BOOST_SYSTEM_FAILED
45 #undef BOOST_SYSTEM_HRESULT_FACILITY
46 #undef BOOST_SYSTEM_HRESULT_CODE
47 #undef BOOST_SYSTEM_FACILITY_WIN32
48
49 using namespace boost::winapi;
50 using namespace errc;
51
52 // Windows system -> posix_errno decode table
53 // see WinError.h comments for descriptions of errors
54
55 switch ( ev )
56 {
57 case 0: return success;
58
59 case ERROR_ACCESS_DENIED_: return permission_denied;
60 case ERROR_ALREADY_EXISTS_: return file_exists;
61 case ERROR_BAD_UNIT_: return no_such_device;
62 case ERROR_BUFFER_OVERFLOW_: return filename_too_long;
63 case ERROR_BUSY_: return device_or_resource_busy;
64 case ERROR_BUSY_DRIVE_: return device_or_resource_busy;
65 case ERROR_CANNOT_MAKE_: return permission_denied;
66 case ERROR_CANTOPEN_: return io_error;
67 case ERROR_CANTREAD_: return io_error;
68 case ERROR_CANTWRITE_: return io_error;
69 case ERROR_CONNECTION_ABORTED_: return connection_aborted;
70 case ERROR_CURRENT_DIRECTORY_: return permission_denied;
71 case ERROR_DEV_NOT_EXIST_: return no_such_device;
72 case ERROR_DEVICE_IN_USE_: return device_or_resource_busy;
73 case ERROR_DIR_NOT_EMPTY_: return directory_not_empty;
74 case ERROR_DIRECTORY_: return invalid_argument; // WinError.h: "The directory name is invalid"
75 case ERROR_DISK_FULL_: return no_space_on_device;
76 case ERROR_FILE_EXISTS_: return file_exists;
77 case ERROR_FILE_NOT_FOUND_: return no_such_file_or_directory;
78 case ERROR_HANDLE_DISK_FULL_: return no_space_on_device;
79 case ERROR_INVALID_ACCESS_: return permission_denied;
80 case ERROR_INVALID_DRIVE_: return no_such_device;
81 case ERROR_INVALID_FUNCTION_: return function_not_supported;
82 case ERROR_INVALID_HANDLE_: return invalid_argument;
83 case ERROR_INVALID_NAME_: return invalid_argument;
84 case ERROR_LOCK_VIOLATION_: return no_lock_available;
85 case ERROR_LOCKED_: return no_lock_available;
86 case ERROR_NEGATIVE_SEEK_: return invalid_argument;
87 case ERROR_NOACCESS_: return permission_denied;
88 case ERROR_NOT_ENOUGH_MEMORY_: return not_enough_memory;
89 case ERROR_NOT_READY_: return resource_unavailable_try_again;
90 case ERROR_NOT_SAME_DEVICE_: return cross_device_link;
91 case ERROR_OPEN_FAILED_: return io_error;
92 case ERROR_OPEN_FILES_: return device_or_resource_busy;
93 case ERROR_OPERATION_ABORTED_: return operation_canceled;
94 case ERROR_OUTOFMEMORY_: return not_enough_memory;
95 case ERROR_PATH_NOT_FOUND_: return no_such_file_or_directory;
96 case ERROR_READ_FAULT_: return io_error;
97 case ERROR_RETRY_: return resource_unavailable_try_again;
98 case ERROR_SEEK_: return io_error;
99 case ERROR_SHARING_VIOLATION_: return permission_denied;
100 case ERROR_TOO_MANY_OPEN_FILES_: return too_many_files_open;
101 case ERROR_WRITE_FAULT_: return io_error;
102 case ERROR_WRITE_PROTECT_: return permission_denied;
103
104 case WSAEACCES_: return permission_denied;
105 case WSAEADDRINUSE_: return address_in_use;
106 case WSAEADDRNOTAVAIL_: return address_not_available;
107 case WSAEAFNOSUPPORT_: return address_family_not_supported;
108 case WSAEALREADY_: return connection_already_in_progress;
109 case WSAEBADF_: return bad_file_descriptor;
110 case WSAECONNABORTED_: return connection_aborted;
111 case WSAECONNREFUSED_: return connection_refused;
112 case WSAECONNRESET_: return connection_reset;
113 case WSAEDESTADDRREQ_: return destination_address_required;
114 case WSAEFAULT_: return bad_address;
115 case WSAEHOSTUNREACH_: return host_unreachable;
116 case WSAEINPROGRESS_: return operation_in_progress;
117 case WSAEINTR_: return interrupted;
118 case WSAEINVAL_: return invalid_argument;
119 case WSAEISCONN_: return already_connected;
120 case WSAEMFILE_: return too_many_files_open;
121 case WSAEMSGSIZE_: return message_size;
122 case WSAENAMETOOLONG_: return filename_too_long;
123 case WSAENETDOWN_: return network_down;
124 case WSAENETRESET_: return network_reset;
125 case WSAENETUNREACH_: return network_unreachable;
126 case WSAENOBUFS_: return no_buffer_space;
127 case WSAENOPROTOOPT_: return no_protocol_option;
128 case WSAENOTCONN_: return not_connected;
129 case WSAENOTSOCK_: return not_a_socket;
130 case WSAEOPNOTSUPP_: return operation_not_supported;
131 case WSAEPROTONOSUPPORT_: return protocol_not_supported;
132 case WSAEPROTOTYPE_: return wrong_protocol_type;
133 case WSAETIMEDOUT_: return timed_out;
134 case WSAEWOULDBLOCK_: return operation_would_block;
135
136 default: return -1;
137 }
138 }
139
140 } // namespace detail
141
142 } // namespace system
143
144 } // namespace boost
145
146 #endif // #ifndef BOOST_SYSTEM_DETAIL_SYSTEM_CATEGORY_CONDITION_WIN32_HPP_INCLUDED