From 84083dff6fee290a38bc34596a90ae4cc821d3d8 Mon Sep 17 00:00:00 2001 From: Bert Belder Date: Wed, 27 Sep 2017 17:18:05 +0200 Subject: [PATCH] all-in-one: rebuild --- allinone/epoll-all-in-one.c | 810 ++++++------------------------------ 1 file changed, 128 insertions(+), 682 deletions(-) diff --git a/allinone/epoll-all-in-one.c b/allinone/epoll-all-in-one.c index 70ea1eb..61cf4e6 100644 --- a/allinone/epoll-all-in-one.c +++ b/allinone/epoll-all-in-one.c @@ -206,22 +206,6 @@ typedef NTSTATUS* PNTSTATUS; #define STATUS_SEVERITY_ERROR 0x3 #endif -#ifndef FACILITY_NTWIN32 -#define FACILITY_NTWIN32 0x7 -#endif - -/* This is not the NTSTATUS_FROM_WIN32 that the DDK provides, because the - * DDK got it wrong! - */ -#ifdef NTSTATUS_FROM_WIN32 -#undef NTSTATUS_FROM_WIN32 -#endif -#define NTSTATUS_FROM_WIN32(error) \ - ((NTSTATUS)(error) <= 0 \ - ? ((NTSTATUS)(error)) \ - : ((NTSTATUS)(((error) &0x0000FFFF) | (FACILITY_NTWIN32 << 16) | \ - ERROR_SEVERITY_WARNING))) - #include #ifndef _SSIZE_T_DEFINED @@ -235,7 +219,7 @@ typedef intptr_t ssize_t; ((type*) ((char*) (ptr) -offsetof(type, member))) #define safe_container_of(ptr, type, member) \ - ((type*) _util_safe_container_of_helper((ptr), offsetof(type, member))) + ((type*) util_safe_container_of_helper((ptr), offsetof(type, member))) #define unused(v) ((void) (v)) @@ -245,7 +229,7 @@ typedef intptr_t ssize_t; (unused)) int __static_assert_##__LINE__[(condition) ? 1 : -1]; #endif -EPOLL_INTERNAL void* _util_safe_container_of_helper(void* ptr, size_t offset); +EPOLL_INTERNAL void* util_safe_container_of_helper(void* ptr, size_t offset); /* clang-format off */ @@ -321,21 +305,17 @@ static const GUID AFD_PROVIDER_GUID_LIST[] = { #include -EPOLL_INTERNAL DWORD we_map_ntstatus_to_win_error(NTSTATUS ntstatus); -EPOLL_INTERNAL DWORD we_map_ntstatus_to_ws_error(NTSTATUS ntstatus); -EPOLL_INTERNAL errno_t we_map_win_error_to_errno(DWORD error); - -EPOLL_INTERNAL void we_set_win_error(DWORD error); - -#define _return_error_helper(error, value) \ - do { \ - we_set_win_error(error); \ - /* { printf("%d\n", error); DebugBreak(); } */ \ - return (value); \ +#define _return_error_helper(error, value) \ + do { \ + err_set_win_error(error); \ + return (value); \ } while (0) #define return_error(value, ...) _return_error_helper(__VA_ARGS__ + 0, value) +EPOLL_INTERNAL errno_t err_map_win_error_to_errno(DWORD error); +EPOLL_INTERNAL void err_set_win_error(DWORD error); + EPOLL_INTERNAL int nt_global_init(void); typedef struct _IO_STATUS_BLOCK { @@ -400,8 +380,8 @@ typedef struct _OBJECT_ATTRIBUTES { NtReleaseKeyedEvent, \ (HANDLE handle, PVOID key, BOOLEAN alertable, PLARGE_INTEGER mstimeout)) -#define X(return_type, declarators, name, parameters) \ - EPOLL_INTERNAL_EXTERN return_type(declarators* name) parameters; +#define X(return_type, attributes, name, parameters) \ + EPOLL_INTERNAL_EXTERN return_type(attributes* name) parameters; NTDLL_IMPORT_LIST(X) #undef X @@ -485,7 +465,7 @@ int afd_poll(SOCKET driver_socket, else if (status == STATUS_PENDING) return_error(-1, ERROR_IO_PENDING); else - return_error(-1, we_map_ntstatus_to_win_error(status)); + return_error(-1, RtlNtStatusToDosError(status)); } static SOCKET _afd_get_base_socket(SOCKET socket) { @@ -1166,15 +1146,13 @@ EPOLL_INTERNAL void ep_sock_delete(ep_port_t* port_info, ep_sock_t* sock_info); EPOLL_INTERNAL void ep_sock_force_delete(ep_port_t* port_info, ep_sock_t* sock_info); -EPOLL_INTERNAL ep_sock_t* ep_sock_from_overlapped(OVERLAPPED* overlapped); - EPOLL_INTERNAL int ep_sock_set_event(ep_port_t* port_info, ep_sock_t* sock_info, const struct epoll_event* ev); EPOLL_INTERNAL int ep_sock_update(ep_port_t* port_info, ep_sock_t* sock_info); EPOLL_INTERNAL int ep_sock_feed_event(ep_port_t* port_info, - ep_sock_t* sock_info, + OVERLAPPED* overlapped, struct epoll_event* ev); typedef struct ep_port ep_port_t; @@ -1337,645 +1315,119 @@ int epoll_wait(HANDLE ephnd, return result; } -/* clang-format off */ +#define _ERROR_ERRNO_MAP(X) \ + X(ERROR_ACCESS_DENIED, EACCES) \ + X(ERROR_ALREADY_EXISTS, EEXIST) \ + X(ERROR_BAD_COMMAND, EACCES) \ + X(ERROR_BAD_EXE_FORMAT, ENOEXEC) \ + X(ERROR_BAD_LENGTH, EACCES) \ + X(ERROR_BAD_NETPATH, ENOENT) \ + X(ERROR_BAD_NET_NAME, ENOENT) \ + X(ERROR_BAD_NET_RESP, ENETDOWN) \ + X(ERROR_BAD_PATHNAME, ENOENT) \ + X(ERROR_BROKEN_PIPE, EPIPE) \ + X(ERROR_CANNOT_MAKE, EACCES) \ + X(ERROR_COMMITMENT_LIMIT, ENOMEM) \ + X(ERROR_CONNECTION_ABORTED, ECONNABORTED) \ + X(ERROR_CONNECTION_ACTIVE, EISCONN) \ + X(ERROR_CONNECTION_REFUSED, ECONNREFUSED) \ + X(ERROR_CRC, EACCES) \ + X(ERROR_DIR_NOT_EMPTY, ENOTEMPTY) \ + X(ERROR_DISK_FULL, ENOSPC) \ + X(ERROR_DUP_NAME, EADDRINUSE) \ + X(ERROR_FILENAME_EXCED_RANGE, ENOENT) \ + X(ERROR_FILE_NOT_FOUND, ENOENT) \ + X(ERROR_GEN_FAILURE, EACCES) \ + X(ERROR_GRACEFUL_DISCONNECT, EPIPE) \ + X(ERROR_HOST_DOWN, EHOSTUNREACH) \ + X(ERROR_HOST_UNREACHABLE, EHOSTUNREACH) \ + X(ERROR_INSUFFICIENT_BUFFER, EFAULT) \ + X(ERROR_INVALID_ADDRESS, EADDRNOTAVAIL) \ + X(ERROR_INVALID_FUNCTION, EINVAL) \ + X(ERROR_INVALID_HANDLE, EBADF) \ + X(ERROR_INVALID_NETNAME, EADDRNOTAVAIL) \ + X(ERROR_INVALID_PARAMETER, EINVAL) \ + X(ERROR_INVALID_USER_BUFFER, EMSGSIZE) \ + X(ERROR_IO_PENDING, EINPROGRESS) \ + X(ERROR_LOCK_VIOLATION, EACCES) \ + X(ERROR_MORE_DATA, EMSGSIZE) \ + X(ERROR_NETNAME_DELETED, ECONNABORTED) \ + X(ERROR_NETWORK_ACCESS_DENIED, EACCES) \ + X(ERROR_NETWORK_BUSY, ENETDOWN) \ + X(ERROR_NETWORK_UNREACHABLE, ENETUNREACH) \ + X(ERROR_NOACCESS, EFAULT) \ + X(ERROR_NOT_ENOUGH_MEMORY, ENOMEM) \ + X(ERROR_NOT_ENOUGH_QUOTA, ENOMEM) \ + X(ERROR_NOT_FOUND, ENOENT) \ + X(ERROR_NOT_LOCKED, EACCES) \ + X(ERROR_NOT_READY, EACCES) \ + X(ERROR_NOT_SAME_DEVICE, EXDEV) \ + X(ERROR_NOT_SUPPORTED, EOPNOTSUPP) \ + X(ERROR_NO_MORE_FILES, ENOENT) \ + X(ERROR_NO_SYSTEM_RESOURCES, ENOMEM) \ + X(ERROR_OPERATION_ABORTED, EINTR) \ + X(ERROR_OUT_OF_PAPER, EACCES) \ + X(ERROR_PAGEFILE_QUOTA, ENOMEM) \ + X(ERROR_PATH_NOT_FOUND, ENOENT) \ + X(ERROR_PIPE_NOT_CONNECTED, EPIPE) \ + X(ERROR_PORT_UNREACHABLE, ECONNRESET) \ + X(ERROR_PROTOCOL_UNREACHABLE, ENETUNREACH) \ + X(ERROR_REM_NOT_LIST, ECONNREFUSED) \ + X(ERROR_REQUEST_ABORTED, EINTR) \ + X(ERROR_REQ_NOT_ACCEP, EWOULDBLOCK) \ + X(ERROR_SECTOR_NOT_FOUND, EACCES) \ + X(ERROR_SEM_TIMEOUT, ETIMEDOUT) \ + X(ERROR_SHARING_VIOLATION, EACCES) \ + X(ERROR_TOO_MANY_NAMES, ENOMEM) \ + X(ERROR_TOO_MANY_OPEN_FILES, EMFILE) \ + X(ERROR_UNEXP_NET_ERR, ECONNABORTED) \ + X(ERROR_WAIT_NO_CHILDREN, ECHILD) \ + X(ERROR_WORKING_SET_QUOTA, ENOMEM) \ + X(ERROR_WRITE_PROTECT, EACCES) \ + X(ERROR_WRONG_DISK, EACCES) \ + X(WSAEACCES, EACCES) \ + X(WSAEADDRINUSE, EADDRINUSE) \ + X(WSAEADDRNOTAVAIL, EADDRNOTAVAIL) \ + X(WSAEAFNOSUPPORT, EAFNOSUPPORT) \ + X(WSAECONNABORTED, ECONNABORTED) \ + X(WSAECONNREFUSED, ECONNREFUSED) \ + X(WSAECONNRESET, ECONNRESET) \ + X(WSAEDISCON, EPIPE) \ + X(WSAEFAULT, EFAULT) \ + X(WSAEHOSTDOWN, EHOSTUNREACH) \ + X(WSAEHOSTUNREACH, EHOSTUNREACH) \ + X(WSAEINTR, EINTR) \ + X(WSAEINVAL, EINVAL) \ + X(WSAEISCONN, EISCONN) \ + X(WSAEMSGSIZE, EMSGSIZE) \ + X(WSAENETDOWN, ENETDOWN) \ + X(WSAENETRESET, EHOSTUNREACH) \ + X(WSAENETUNREACH, ENETUNREACH) \ + X(WSAENOBUFS, ENOMEM) \ + X(WSAENOTCONN, ENOTCONN) \ + X(WSAENOTSOCK, EBADF) \ + X(WSAEOPNOTSUPP, EOPNOTSUPP) \ + X(WSAESHUTDOWN, EPIPE) \ + X(WSAETIMEDOUT, ETIMEDOUT) \ + X(WSAEWOULDBLOCK, EWOULDBLOCK) -#define WE_ERROR_MAP(X) \ - X(/* STATUS_ABANDONED */ 0x00000080, \ - ERROR_WAIT_NO_CHILDREN, ECHILD, \ - -1, -1) \ - X(/* STATUS_PENDING */ 0x00000103, \ - ERROR_IO_PENDING, EINPROGRESS, \ - ERROR_IO_PENDING, EINPROGRESS) \ - X(/* STATUS_WORKING_SET_LIMIT_RANGE */ 0x40000002, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_BUFFER_OVERFLOW */ 0x80000005, \ - ERROR_MORE_DATA, EMSGSIZE, \ - WSAEMSGSIZE, EMSGSIZE) \ - X(/* STATUS_NO_MORE_FILES */ 0x80000006, \ - ERROR_NO_MORE_FILES, ENOENT, \ - -1, -1) \ - X(/* STATUS_DEVICE_PAPER_EMPTY */ 0x8000000e, \ - ERROR_OUT_OF_PAPER, EACCES, \ - -1, -1) \ - X(/* STATUS_DEVICE_POWERED_OFF */ 0x8000000f, \ - ERROR_NOT_READY, EACCES, \ - -1, -1) \ - X(/* STATUS_DEVICE_OFF_LINE */ 0x80000010, \ - ERROR_NOT_READY, EACCES, \ - -1, -1) \ - X(/* STATUS_UNSUCCESSFUL */ 0xc0000001, \ - ERROR_GEN_FAILURE, EACCES, \ - -1, -1) \ - X(/* STATUS_NOT_IMPLEMENTED */ 0xc0000002, \ - ERROR_INVALID_FUNCTION, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_INFO_CLASS */ 0xc0000003, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INFO_LENGTH_MISMATCH */ 0xc0000004, \ - ERROR_BAD_LENGTH, EACCES, \ - -1, -1) \ - X(/* STATUS_ACCESS_VIOLATION */ 0xc0000005, \ - ERROR_NOACCESS, EFAULT, \ - WSAEFAULT, EFAULT) \ - X(/* STATUS_PAGEFILE_QUOTA */ 0xc0000007, \ - ERROR_PAGEFILE_QUOTA, ENOBUFS, \ - WSAENOBUFS, ENOBUFS) \ - X(/* STATUS_INVALID_HANDLE */ 0xc0000008, \ - ERROR_INVALID_HANDLE, EBADF, \ - WSAENOTSOCK, ENOTSOCK) \ - X(/* STATUS_BAD_INITIAL_PC */ 0xc000000a, \ - ERROR_BAD_EXE_FORMAT, ENOEXEC, \ - -1, -1) \ - X(/* STATUS_INVALID_CID */ 0xc000000b, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_PARAMETER */ 0xc000000d, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_NO_SUCH_DEVICE */ 0xc000000e, \ - ERROR_FILE_NOT_FOUND, ENOENT, \ - WSAENETDOWN, ENETDOWN) \ - X(/* STATUS_NO_SUCH_FILE */ 0xc000000f, \ - ERROR_FILE_NOT_FOUND, ENOENT, \ - WSAENETDOWN, ENETDOWN) \ - X(/* STATUS_INVALID_DEVICE_REQUEST */ 0xc0000010, \ - ERROR_INVALID_FUNCTION, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_WRONG_VOLUME */ 0xc0000012, \ - ERROR_WRONG_DISK, EACCES, \ - -1, -1) \ - X(/* STATUS_NO_MEDIA_IN_DEVICE */ 0xc0000013, \ - ERROR_NOT_READY, EACCES, \ - -1, -1) \ - X(/* STATUS_NONEXISTENT_SECTOR */ 0xc0000015, \ - ERROR_SECTOR_NOT_FOUND, EACCES, \ - -1, -1) \ - X(/* STATUS_NO_MEMORY */ 0xc0000017, \ - ERROR_NOT_ENOUGH_MEMORY, ENOMEM, \ - WSAENOBUFS, ENOBUFS) \ - X(/* STATUS_CONFLICTING_ADDRESSES */ 0xc0000018, \ - ERROR_INVALID_ADDRESS, ENOBUFS, \ - WSAENOBUFS, ENOBUFS) \ - X(/* STATUS_UNABLE_TO_FREE_VM */ 0xc000001a, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_UNABLE_TO_DELETE_SECTION */ 0xc000001b, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_SYSTEM_SERVICE */ 0xc000001c, \ - ERROR_INVALID_FUNCTION, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_LOCK_SEQUENCE */ 0xc000001e, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_INVALID_VIEW_SIZE */ 0xc000001f, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_INVALID_FILE_FOR_SECTION */ 0xc0000020, \ - ERROR_BAD_EXE_FORMAT, ENOEXEC, \ - -1, -1) \ - X(/* STATUS_ALREADY_COMMITTED */ 0xc0000021, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_ACCESS_DENIED */ 0xc0000022, \ - ERROR_ACCESS_DENIED, EACCES, \ - WSAEACCES, EACCES) \ - X(/* STATUS_BUFFER_TOO_SMALL */ 0xc0000023, \ - ERROR_INSUFFICIENT_BUFFER, EFAULT, \ - WSAEFAULT, EFAULT) \ - X(/* STATUS_OBJECT_TYPE_MISMATCH */ 0xc0000024, \ - ERROR_INVALID_HANDLE, EBADF, \ - WSAENOTSOCK, ENOTSOCK) \ - X(/* STATUS_NOT_LOCKED */ 0xc000002a, \ - ERROR_NOT_LOCKED, EACCES, \ - -1, -1) \ - X(/* STATUS_INVALID_PARAMETER_MIX */ 0xc0000030, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_OBJECT_NAME_NOT_FOUND */ 0xc0000034, \ - ERROR_FILE_NOT_FOUND, ENOENT, \ - WSAENETDOWN, ENETDOWN) \ - X(/* STATUS_OBJECT_NAME_COLLISION */ 0xc0000035, \ - ERROR_ALREADY_EXISTS, EEXIST, \ - -1, -1) \ - X(/* STATUS_PORT_DISCONNECTED */ 0xc0000037, \ - ERROR_INVALID_HANDLE, EBADF, \ - -1, -1) \ - X(/* STATUS_OBJECT_PATH_INVALID */ 0xc0000039, \ - ERROR_BAD_PATHNAME, ENOENT, \ - -1, -1) \ - X(/* STATUS_OBJECT_PATH_NOT_FOUND */ 0xc000003a, \ - ERROR_PATH_NOT_FOUND, ENOENT, \ - WSAENETDOWN, ENETDOWN) \ - X(/* STATUS_OBJECT_PATH_SYNTAX_BAD */ 0xc000003b, \ - ERROR_BAD_PATHNAME, ENOENT, \ - -1, -1) \ - X(/* STATUS_DATA_ERROR */ 0xc000003e, \ - ERROR_CRC, EACCES, \ - -1, -1) \ - X(/* STATUS_CRC_ERROR */ 0xc000003f, \ - ERROR_CRC, EACCES, \ - -1, -1) \ - X(/* STATUS_SECTION_TOO_BIG */ 0xc0000040, \ - ERROR_NOT_ENOUGH_MEMORY, ENOMEM, \ - -1, -1) \ - X(/* STATUS_PORT_CONNECTION_REFUSED */ 0xc0000041, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_INVALID_PORT_HANDLE */ 0xc0000042, \ - ERROR_INVALID_HANDLE, EBADF, \ - -1, -1) \ - X(/* STATUS_SHARING_VIOLATION */ 0xc0000043, \ - ERROR_SHARING_VIOLATION, EACCES, \ - WSAEADDRINUSE, EADDRINUSE) \ - X(/* STATUS_QUOTA_EXCEEDED */ 0xc0000044, \ - ERROR_NOT_ENOUGH_QUOTA, ENOMEM, \ - WSAENOBUFS, ENOBUFS) \ - X(/* STATUS_INVALID_PAGE_PROTECTION */ 0xc0000045, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_PORT_ALREADY_SET */ 0xc0000048, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_SECTION_NOT_IMAGE */ 0xc0000049, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_THREAD_IS_TERMINATING */ 0xc000004b, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_BAD_WORKING_SET_LIMIT */ 0xc000004c, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INCOMPATIBLE_FILE_MAP */ 0xc000004d, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_SECTION_PROTECTION */ 0xc000004e, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_FILE_LOCK_CONFLICT */ 0xc0000054, \ - ERROR_LOCK_VIOLATION, EACCES, \ - -1, -1) \ - X(/* STATUS_LOCK_NOT_GRANTED */ 0xc0000055, \ - ERROR_LOCK_VIOLATION, EACCES, \ - -1, -1) \ - X(/* STATUS_DELETE_PENDING */ 0xc0000056, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_INVALID_IMAGE_FORMAT */ 0xc000007b, \ - ERROR_BAD_EXE_FORMAT, ENOEXEC, \ - -1, -1) \ - X(/* STATUS_RANGE_NOT_LOCKED */ 0xc000007e, \ - ERROR_NOT_LOCKED, EACCES, \ - -1, -1) \ - X(/* STATUS_DISK_FULL */ 0xc000007f, \ - ERROR_DISK_FULL, ENOSPC, \ - -1, -1) \ - X(/* STATUS_TOO_MANY_PAGING_FILES */ 0xc0000097, \ - ERROR_NOT_ENOUGH_MEMORY, ENOMEM, \ - WSAENOBUFS, ENOBUFS) \ - X(/* STATUS_INSUFFICIENT_RESOURCES */ 0xc000009a, \ - ERROR_NO_SYSTEM_RESOURCES, ENOBUFS, \ - WSAENOBUFS, ENOBUFS) \ - X(/* STATUS_DFS_EXIT_PATH_FOUND */ 0xc000009b, \ - ERROR_PATH_NOT_FOUND, ENOENT, \ - -1, -1) \ - X(/* STATUS_DEVICE_DATA_ERROR */ 0xc000009c, \ - ERROR_CRC, EACCES, \ - -1, -1) \ - X(/* STATUS_DEVICE_POWER_FAILURE */ 0xc000009e, \ - ERROR_NOT_READY, EACCES, \ - -1, -1) \ - X(/* STATUS_WORKING_SET_QUOTA */ 0xc00000a1, \ - ERROR_WORKING_SET_QUOTA, ENOBUFS, \ - WSAENOBUFS, ENOBUFS) \ - X(/* STATUS_MEDIA_WRITE_PROTECTED */ 0xc00000a2, \ - ERROR_WRITE_PROTECT, EACCES, \ - -1, -1) \ - X(/* STATUS_DEVICE_NOT_READY */ 0xc00000a3, \ - ERROR_NOT_READY, EACCES, \ - WSAEWOULDBLOCK, EWOULDBLOCK) \ - X(/* STATUS_BAD_MASTER_BOOT_RECORD */ 0xc00000a9, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_ILLEGAL_FUNCTION */ 0xc00000af, \ - ERROR_INVALID_FUNCTION, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_PIPE_DISCONNECTED */ 0xc00000b0, \ - ERROR_PIPE_NOT_CONNECTED, EPIPE, \ - WSAESHUTDOWN, EPIPE) \ - X(/* STATUS_IO_TIMEOUT */ 0xc00000b5, \ - ERROR_SEM_TIMEOUT, ETIMEDOUT, \ - WSAETIMEDOUT, ETIMEDOUT) \ - X(/* STATUS_FILE_IS_A_DIRECTORY */ 0xc00000ba, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_NOT_SUPPORTED */ 0xc00000bb, \ - ERROR_NOT_SUPPORTED, EOPNOTSUPP, \ - WSAEOPNOTSUPP, EOPNOTSUPP) \ - X(/* STATUS_REMOTE_NOT_LISTENING */ 0xc00000bc, \ - ERROR_REM_NOT_LIST, ECONNREFUSED, \ - WSAECONNREFUSED, ECONNREFUSED) \ - X(/* STATUS_BAD_NETWORK_PATH */ 0xc00000be, \ - ERROR_BAD_NETPATH, ENOENT, \ - WSAENETUNREACH, ENETUNREACH) \ - X(/* STATUS_NETWORK_BUSY */ 0xc00000bf, \ - ERROR_NETWORK_BUSY, ENETDOWN, \ - WSAENETDOWN, ENETDOWN) \ - X(/* STATUS_INVALID_NETWORK_RESPONSE */ 0xc00000c3, \ - ERROR_BAD_NET_RESP, ENETDOWN, \ - WSAENETDOWN, ENETDOWN) \ - X(/* STATUS_UNEXPECTED_NETWORK_ERROR */ 0xc00000c4, \ - ERROR_UNEXP_NET_ERR, ENETDOWN, \ - WSAENETDOWN, ENETDOWN) \ - X(/* STATUS_NETWORK_ACCESS_DENIED */ 0xc00000ca, \ - ERROR_NETWORK_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_BAD_NETWORK_NAME */ 0xc00000cc, \ - ERROR_BAD_NET_NAME, ENOENT, \ - -1, -1) \ - X(/* STATUS_REQUEST_NOT_ACCEPTED */ 0xc00000d0, \ - ERROR_REQ_NOT_ACCEP, EWOULDBLOCK, \ - WSAEWOULDBLOCK, EWOULDBLOCK) \ - X(/* STATUS_NOT_SAME_DEVICE */ 0xc00000d4, \ - ERROR_NOT_SAME_DEVICE, EXDEV, \ - -1, -1) \ - X(/* STATUS_FILE_RENAMED */ 0xc00000d5, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_INVALID_PARAMETER_1 */ 0xc00000ef, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_PARAMETER_2 */ 0xc00000f0, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_PARAMETER_3 */ 0xc00000f1, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_PARAMETER_4 */ 0xc00000f2, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_PARAMETER_5 */ 0xc00000f3, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_PARAMETER_6 */ 0xc00000f4, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_PARAMETER_7 */ 0xc00000f5, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_PARAMETER_8 */ 0xc00000f6, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_PARAMETER_9 */ 0xc00000f7, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_PARAMETER_10 */ 0xc00000f8, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_PARAMETER_11 */ 0xc00000f9, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_PARAMETER_12 */ 0xc00000fa, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_REDIRECTOR_NOT_STARTED */ 0xc00000fb, \ - ERROR_PATH_NOT_FOUND, ENOENT, \ - -1, -1) \ - X(/* STATUS_DIRECTORY_NOT_EMPTY */ 0xc0000101, \ - ERROR_DIR_NOT_EMPTY, ENOTEMPTY, \ - -1, -1) \ - X(/* STATUS_NAME_TOO_LONG */ 0xc0000106, \ - ERROR_FILENAME_EXCED_RANGE, ENOENT, \ - -1, -1) \ - X(/* STATUS_PROCESS_IS_TERMINATING */ 0xc000010a, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_INVALID_IMAGE_NE_FORMAT */ 0xc000011b, \ - ERROR_BAD_EXE_FORMAT, ENOEXEC, \ - -1, -1) \ - X(/* STATUS_TOO_MANY_OPENED_FILES */ 0xc000011f, \ - ERROR_TOO_MANY_OPEN_FILES, EMFILE, \ - -1, -1) \ - X(/* STATUS_CANCELLED */ 0xc0000120, \ - ERROR_OPERATION_ABORTED, ECANCELED, \ - ERROR_OPERATION_ABORTED, ECANCELED) \ - X(/* STATUS_CANNOT_DELETE */ 0xc0000121, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_FILE_DELETED */ 0xc0000123, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_FILE_CLOSED */ 0xc0000128, \ - ERROR_INVALID_HANDLE, EBADF, \ - -1, -1) \ - X(/* STATUS_COMMITMENT_LIMIT */ 0xc000012d, \ - ERROR_COMMITMENT_LIMIT, ENOBUFS, \ - WSAENOBUFS, ENOBUFS) \ - X(/* STATUS_INVALID_IMAGE_LE_FORMAT */ 0xc000012e, \ - ERROR_BAD_EXE_FORMAT, ENOEXEC, \ - -1, -1) \ - X(/* STATUS_INVALID_IMAGE_NOT_MZ */ 0xc000012f, \ - ERROR_BAD_EXE_FORMAT, ENOEXEC, \ - -1, -1) \ - X(/* STATUS_INVALID_IMAGE_PROTECT */ 0xc0000130, \ - ERROR_BAD_EXE_FORMAT, ENOEXEC, \ - -1, -1) \ - X(/* STATUS_INVALID_IMAGE_WIN_16 */ 0xc0000131, \ - ERROR_BAD_EXE_FORMAT, ENOEXEC, \ - -1, -1) \ - X(/* STATUS_LOCAL_DISCONNECT */ 0xc000013b, \ - ERROR_NETNAME_DELETED, ECONNABORTED, \ - WSAECONNABORTED, ECONNABORTED) \ - X(/* STATUS_REMOTE_DISCONNECT */ 0xc000013c, \ - ERROR_NETNAME_DELETED, ECONNRESET, \ - WSAECONNRESET, ECONNRESET) \ - X(/* STATUS_REMOTE_RESOURCES */ 0xc000013d, \ - ERROR_REM_NOT_LIST, ENOBUFS, \ - WSAENOBUFS, ENOBUFS) \ - X(/* STATUS_LINK_FAILED */ 0xc000013e, \ - ERROR_UNEXP_NET_ERR, ECONNRESET, \ - WSAECONNRESET, ECONNRESET) \ - X(/* STATUS_LINK_TIMEOUT */ 0xc000013f, \ - ERROR_UNEXP_NET_ERR, ETIMEDOUT, \ - WSAETIMEDOUT, ETIMEDOUT) \ - X(/* STATUS_INVALID_CONNECTION */ 0xc0000140, \ - ERROR_UNEXP_NET_ERR, ENOTCONN, \ - WSAENOTCONN, ENOTCONN) \ - X(/* STATUS_INVALID_ADDRESS */ 0xc0000141, \ - ERROR_UNEXP_NET_ERR, EADDRNOTAVAIL, \ - WSAEADDRNOTAVAIL, EADDRNOTAVAIL) \ - X(/* STATUS_PIPE_BROKEN */ 0xc000014b, \ - ERROR_BROKEN_PIPE, EPIPE, \ - -1, -1) \ - X(/* STATUS_DEVICE_CONFIGURATION_ERROR */ 0xc0000182, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_DEVICE_STATE */ 0xc0000184, \ - ERROR_BAD_COMMAND, EACCES, \ - -1, -1) \ - X(/* STATUS_TOO_LATE */ 0xc0000189, \ - ERROR_WRITE_PROTECT, EACCES, \ - -1, -1) \ - X(/* unknown */ 0xc00001ad, \ - ERROR_NOT_ENOUGH_MEMORY, ENOMEM, \ - -1, -1) \ - X(/* STATUS_NETWORK_OPEN_RESTRICTION */ 0xc0000201, \ - ERROR_NETWORK_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_INVALID_BUFFER_SIZE */ 0xc0000206, \ - ERROR_INVALID_USER_BUFFER, EMSGSIZE, \ - WSAEMSGSIZE, EMSGSIZE) \ - X(/* STATUS_INVALID_ADDRESS_COMPONENT */ 0xc0000207, \ - ERROR_INVALID_NETNAME, EADDRNOTAVAIL, \ - WSAEADDRNOTAVAIL, EADDRNOTAVAIL) \ - X(/* STATUS_TOO_MANY_ADDRESSES */ 0xc0000209, \ - ERROR_TOO_MANY_NAMES, ENOBUFS, \ - WSAENOBUFS, ENOBUFS) \ - X(/* STATUS_ADDRESS_ALREADY_EXISTS */ 0xc000020a, \ - ERROR_DUP_NAME, EADDRINUSE, \ - WSAEADDRINUSE, EADDRINUSE) \ - X(/* STATUS_CONNECTION_DISCONNECTED */ 0xc000020c, \ - ERROR_NETNAME_DELETED, ECONNRESET, \ - WSAECONNRESET, ECONNRESET) \ - X(/* STATUS_CONNECTION_RESET */ 0xc000020d, \ - ERROR_NETNAME_DELETED, ECONNRESET, \ - WSAECONNRESET, ECONNRESET) \ - X(/* STATUS_TRANSACTION_ABORTED */ 0xc000020f, \ - ERROR_UNEXP_NET_ERR, ECONNABORTED, \ - WSAECONNABORTED, ECONNABORTED) \ - X(/* STATUS_IMAGE_CHECKSUM_MISMATCH */ 0xc0000221, \ - ERROR_BAD_EXE_FORMAT, ENOEXEC, \ - -1, -1) \ - X(/* STATUS_FAIL_CHECK */ 0xc0000229, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_HANDLE_NOT_CLOSABLE */ 0xc0000235, \ - ERROR_INVALID_HANDLE, EBADF, \ - -1, -1) \ - X(/* STATUS_CONNECTION_REFUSED */ 0xc0000236, \ - ERROR_CONNECTION_REFUSED, ECONNREFUSED, \ - WSAECONNREFUSED, ECONNREFUSED) \ - X(/* STATUS_GRACEFUL_DISCONNECT */ 0xc0000237, \ - ERROR_GRACEFUL_DISCONNECT, EPIPE, \ - WSAEDISCON, EPIPE) \ - X(/* STATUS_CONNECTION_ACTIVE */ 0xc000023b, \ - ERROR_CONNECTION_ACTIVE, EISCONN, \ - WSAEISCONN, EISCONN) \ - X(/* STATUS_NETWORK_UNREACHABLE */ 0xc000023c, \ - ERROR_NETWORK_UNREACHABLE, ENETUNREACH, \ - WSAENETUNREACH, ENETUNREACH) \ - X(/* STATUS_HOST_UNREACHABLE */ 0xc000023d, \ - ERROR_HOST_UNREACHABLE, EHOSTUNREACH, \ - WSAEHOSTUNREACH, EHOSTUNREACH) \ - X(/* STATUS_PROTOCOL_UNREACHABLE */ 0xc000023e, \ - ERROR_PROTOCOL_UNREACHABLE, ENETUNREACH, \ - WSAENETUNREACH, ENETUNREACH) \ - X(/* STATUS_PORT_UNREACHABLE */ 0xc000023f, \ - ERROR_PORT_UNREACHABLE, ECONNRESET, \ - WSAECONNRESET, ECONNRESET) \ - X(/* STATUS_REQUEST_ABORTED */ 0xc0000240, \ - ERROR_REQUEST_ABORTED, EINTR, \ - WSAEINTR, EINTR) \ - X(/* STATUS_CONNECTION_ABORTED */ 0xc0000241, \ - ERROR_CONNECTION_ABORTED, ECONNABORTED, \ - WSAECONNABORTED, ECONNABORTED) \ - X(/* STATUS_IMAGE_MP_UP_MISMATCH */ 0xc0000249, \ - ERROR_BAD_EXE_FORMAT, ENOEXEC, \ - -1, -1) \ - X(/* STATUS_VOLUME_DISMOUNTED */ 0xc000026e, \ - ERROR_NOT_READY, EACCES, \ - -1, -1) \ - X(/* STATUS_DIRECTORY_IS_A_REPARSE_POINT */ 0xc0000281, \ - ERROR_BAD_PATHNAME, ENOENT, \ - -1, -1) \ - X(/* STATUS_ENCRYPTION_FAILED */ 0xc000028a, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_DECRYPTION_FAILED */ 0xc000028b, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_NO_RECOVERY_POLICY */ 0xc000028d, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_NO_EFS */ 0xc000028e, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_WRONG_EFS */ 0xc000028f, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_NO_USER_KEYS */ 0xc0000290, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) \ - X(/* STATUS_VOLUME_NOT_UPGRADED */ 0xc000029c, \ - ERROR_INVALID_FUNCTION, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_DATATYPE_MISALIGNMENT_ERROR */ 0xc00002c5, \ - ERROR_NOACCESS, EFAULT, \ - WSAEFAULT, EFAULT) \ - X(/* STATUS_POWER_STATE_INVALID */ 0xc00002d3, \ - ERROR_NOT_READY, EACCES, \ - -1, -1) \ - X(/* STATUS_CANNOT_MAKE */ 0xc00002ea, \ - ERROR_CANNOT_MAKE, EACCES, \ - -1, -1) \ - X(/* STATUS_OBJECTID_NOT_FOUND */ 0xc00002f0, \ - ERROR_FILE_NOT_FOUND, ENOENT, \ - -1, -1) \ - X(/* STATUS_HOST_DOWN */ 0xc0000350, \ - ERROR_HOST_DOWN, EHOSTUNREACH, \ - WSAEHOSTDOWN, EHOSTUNREACH) \ - X(/* STATUS_INVALID_IMAGE_WIN_32 */ 0xc0000359, \ - ERROR_BAD_EXE_FORMAT, ENOEXEC, \ - -1, -1) \ - X(/* STATUS_INVALID_IMAGE_WIN_64 */ 0xc000035a, \ - ERROR_BAD_EXE_FORMAT, ENOEXEC, \ - -1, -1) \ - X(/* STATUS_FAILED_STACK_SWITCH */ 0xc0000373, \ - ERROR_NOT_ENOUGH_MEMORY, ENOMEM, \ - -1, -1) \ - X(/* unknown */ 0xc0000416, \ - ERROR_NOT_ENOUGH_MEMORY, ENOMEM, \ - -1, -1) \ - X(/* unknown */ 0xc0000455, \ - ERROR_INVALID_HANDLE, EBADF, \ - -1, -1) \ - X(/* unknown */ 0xc0000456, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* unknown */ 0xc0000457, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* unknown */ 0xc0000458, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* unknown */ 0xc0000467, \ - ERROR_SHARING_VIOLATION, EACCES, \ - -1, -1) \ - X(/* unknown */ 0xc0000487, \ - ERROR_GEN_FAILURE, EACCES, \ - -1, -1) \ - X(/* unknown */ 0xc0000491, \ - ERROR_FILE_NOT_FOUND, ENOENT, \ - -1, -1) \ - X(/* unknown */ 0xc0000495, \ - ERROR_NOT_READY, EACCES, \ - -1, -1) \ - X(/* STATUS_CALLBACK_BYPASS */ 0xc0000503, \ - ERROR_NOT_READY, EACCES, \ - -1, -1) \ - X(/* STATUS_INVALID_MESSAGE */ 0xc0000702, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_LPC_RECEIVE_BUFFER_EXPECTED */ 0xc0000705, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_LPC_INVALID_CONNECTION_USAGE */ 0xc0000706, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_THREADPOOL_HANDLE_EXCEPTION */ 0xc000070a, \ - ERROR_INVALID_HANDLE, EBADF, \ - -1, -1) \ - X(/* unknown */ 0xc000070b, \ - ERROR_INVALID_HANDLE, EBADF, \ - -1, -1) \ - X(/* unknown */ 0xc000070c, \ - ERROR_INVALID_HANDLE, EBADF, \ - -1, -1) \ - X(/* unknown */ 0xc000070d, \ - ERROR_INVALID_HANDLE, EBADF, \ - -1, -1) \ - X(/* unknown */ 0xc000070e, \ - ERROR_INVALID_HANDLE, EBADF, \ - -1, -1) \ - X(/* STATUS_THREADPOOL_RELEASED_DURING_OPERATION */ 0xc000070f, \ - ERROR_INVALID_HANDLE, EBADF, \ - -1, -1) \ - X(/* STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING */ 0xc0000710, \ - ERROR_INVALID_FUNCTION, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_APC_RETURNED_WHILE_IMPERSONATING */ 0xc0000711, \ - ERROR_INVALID_FUNCTION, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_CALLBACK_RETURNED_THREAD_PRIORITY */ 0xc000071b, \ - ERROR_INVALID_FUNCTION, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_INVALID_THREAD */ 0xc000071c, \ - ERROR_INVALID_PARAMETER, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_CALLBACK_RETURNED_TRANSACTION */ 0xc000071d, \ - ERROR_INVALID_FUNCTION, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_CALLBACK_RETURNED_LDR_LOCK */ 0xc000071e, \ - ERROR_INVALID_FUNCTION, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_CALLBACK_RETURNED_LANG */ 0xc000071f, \ - ERROR_INVALID_FUNCTION, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_CALLBACK_RETURNED_PRI_BACK */ 0xc0000720, \ - ERROR_INVALID_FUNCTION, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_CALLBACK_RETURNED_THREAD_AFFINITY */ 0xc0000721, \ - ERROR_INVALID_FUNCTION, EINVAL, \ - WSAEINVAL, EINVAL) \ - X(/* STATUS_AUTH_TAG_MISMATCH */ 0xc000a002, \ - ERROR_CRC, EACCES, \ - -1, -1) \ - X(/* STATUS_HOPLIMIT_EXCEEDED */ 0xc000a012, \ - ERROR_HOST_UNREACHABLE, EHOSTUNREACH, \ - WSAENETRESET, EHOSTUNREACH) \ - X(/* STATUS_PROTOCOL_NOT_SUPPORTED */ 0xc000a013, \ - ERROR_NOT_SUPPORTED, EAFNOSUPPORT, \ - WSAEAFNOSUPPORT, EAFNOSUPPORT) \ - X(/* unknown */ 0xc000a203, \ - ERROR_ACCESS_DENIED, EACCES, \ - -1, -1) - -/* clang-format on */ - -#pragma warning(push) -#pragma warning(disable : 4127) /* "conditional expression is constant" */ - -DWORD we_map_ntstatus_to_win_error(NTSTATUS status) { - if (NT_SUCCESS(status)) - return ERROR_SUCCESS; -#define X(ntstatus, win_error, win_errno, ws_error, ws_errno) \ - if (status == (NTSTATUS) ntstatus && win_error != -1) \ - return (DWORD) win_error; - WE_ERROR_MAP(X) -#undef X - return RtlNtStatusToDosError(status); -} - -DWORD we_map_ntstatus_to_ws_error(NTSTATUS status) { -#define X(ntstatus, win_error, win_errno, ws_error, ws_errno) \ - if (status == (NTSTATUS) ntstatus && ws_error != -1) \ - return (DWORD) ws_error; - WE_ERROR_MAP(X) -#undef X - return we_map_ntstatus_to_win_error(status); -} - -errno_t we_map_win_error_to_errno(DWORD error) { -#define X(ntstatus, win_error, win_errno, ws_error, ws_errno) \ - if (error == (DWORD) win_error && win_errno != -1) \ - return win_errno; \ - if (error == (DWORD) ws_error && ws_errno != -1) \ - return ws_errno; - WE_ERROR_MAP(X) +errno_t err_map_win_error_to_errno(DWORD error) { + switch (error) { +#define X(error_sym, errno_sym) \ + case error_sym: \ + return errno_sym; + _ERROR_ERRNO_MAP(X) #undef X + } return EINVAL; } -#pragma warning(pop) - -void we_set_win_error(DWORD error) { +void err_set_win_error(DWORD error) { if (error == 0) error = GetLastError(); else SetLastError(error); - errno = we_map_win_error_to_errno(error); + errno = err_map_win_error_to_errno(error); } static bool _initialized = false; @@ -2015,8 +1467,8 @@ int init(void) { return 0; } -#define X(return_type, declarators, name, parameters) \ - EPOLL_INTERNAL return_type(declarators* name) parameters = NULL; +#define X(return_type, attributes, name, parameters) \ + EPOLL_INTERNAL return_type(attributes* name) parameters = NULL; NTDLL_IMPORT_LIST(X) #undef X @@ -2027,9 +1479,9 @@ int nt_global_init(void) { if (ntdll == NULL) return -1; -#define X(return_type, declarators, name, parameters) \ - name = (return_type(declarators*) parameters) GetProcAddress(ntdll, #name); \ - if (name == NULL) \ +#define X(return_type, attributes, name, parameters) \ + name = (return_type(attributes*) parameters) GetProcAddress(ntdll, #name); \ + if (name == NULL) \ return -1; NTDLL_IMPORT_LIST(X) #undef X @@ -2294,10 +1746,9 @@ static int _ep_port_feed_events(ep_port_t* port_info, for (int i = 0; i < iocp_event_count; i++) { OVERLAPPED* overlapped = iocp_events[i].lpOverlapped; - ep_sock_t* sock_info = ep_sock_from_overlapped(overlapped); struct epoll_event* ev = &epoll_events[epoll_event_count]; - epoll_event_count += ep_sock_feed_event(port_info, sock_info, ev); + epoll_event_count += ep_sock_feed_event(port_info, overlapped, ev); } return epoll_event_count; @@ -2985,12 +2436,6 @@ void ep_sock_force_delete(ep_port_t* port_info, ep_sock_t* sock_info) { ep_sock_delete(port_info, sock_info); } -ep_sock_t* ep_sock_from_overlapped(OVERLAPPED* overlapped) { - _ep_sock_private_t* sock_private = - container_of(overlapped, _ep_sock_private_t, poll_req.overlapped); - return &sock_private->pub; -} - int ep_sock_set_event(ep_port_t* port_info, ep_sock_t* sock_info, const struct epoll_event* ev) { @@ -3069,10 +2514,11 @@ int ep_sock_update(ep_port_t* port_info, ep_sock_t* sock_info) { } int ep_sock_feed_event(ep_port_t* port_info, - ep_sock_t* sock_info, + OVERLAPPED* overlapped, struct epoll_event* ev) { - _ep_sock_private_t* sock_private = _ep_sock_private(sock_info); - + _ep_sock_private_t* sock_private = + container_of(overlapped, _ep_sock_private_t, poll_req.overlapped); + ep_sock_t* sock_info = &sock_private->pub; uint32_t epoll_events; bool drop_socket; int ev_count = 0; @@ -3172,7 +2618,7 @@ tree_node_t* tree_root(tree_t* tree) { return RB_ROOT(tree); } -void* _util_safe_container_of_helper(void* ptr, size_t offset) { +void* util_safe_container_of_helper(void* ptr, size_t offset) { if (ptr == NULL) return NULL; else