win: add ntstatus-to-winsock-error mapping
This commit is contained in:
parent
301d9283ee
commit
6622c35bc4
@ -258,6 +258,7 @@ void uv_set_error(uv_err_code code, int sys_errno);
|
||||
*/
|
||||
void uv_winapi_init();
|
||||
void uv_winsock_init();
|
||||
int uv_ntstatus_to_winsock_error(NTSTATUS status);
|
||||
|
||||
|
||||
#endif /* UV_WIN_INTERNAL_H_ */
|
||||
|
||||
4042
src/win/winapi.h
4042
src/win/winapi.h
File diff suppressed because it is too large
Load Diff
@ -153,3 +153,118 @@ void uv_winsock_init() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int uv_ntstatus_to_winsock_error(NTSTATUS status) {
|
||||
switch (status) {
|
||||
case STATUS_SUCCESS:
|
||||
return ERROR_SUCCESS;
|
||||
|
||||
case STATUS_PENDING:
|
||||
return ERROR_IO_PENDING;
|
||||
|
||||
case STATUS_INVALID_HANDLE:
|
||||
case STATUS_OBJECT_TYPE_MISMATCH:
|
||||
return WSAENOTSOCK;
|
||||
|
||||
case STATUS_INSUFFICIENT_RESOURCES:
|
||||
case STATUS_PAGEFILE_QUOTA:
|
||||
case STATUS_COMMITMENT_LIMIT:
|
||||
case STATUS_WORKING_SET_QUOTA:
|
||||
case STATUS_NO_MEMORY:
|
||||
case STATUS_CONFLICTING_ADDRESSES:
|
||||
case STATUS_QUOTA_EXCEEDED:
|
||||
case STATUS_TOO_MANY_PAGING_FILES:
|
||||
case STATUS_REMOTE_RESOURCES:
|
||||
case STATUS_TOO_MANY_ADDRESSES:
|
||||
return WSAENOBUFS;
|
||||
|
||||
case STATUS_SHARING_VIOLATION:
|
||||
case STATUS_ADDRESS_ALREADY_EXISTS:
|
||||
return WSAEADDRINUSE;
|
||||
|
||||
case STATUS_LINK_TIMEOUT:
|
||||
case STATUS_IO_TIMEOUT:
|
||||
case STATUS_TIMEOUT:
|
||||
return WSAETIMEDOUT;
|
||||
|
||||
case STATUS_GRACEFUL_DISCONNECT:
|
||||
return WSAEDISCON;
|
||||
|
||||
case STATUS_REMOTE_DISCONNECT:
|
||||
case STATUS_CONNECTION_RESET:
|
||||
case STATUS_LINK_FAILED:
|
||||
case STATUS_CONNECTION_DISCONNECTED:
|
||||
case STATUS_PORT_UNREACHABLE:
|
||||
return WSAECONNRESET;
|
||||
|
||||
case STATUS_LOCAL_DISCONNECT:
|
||||
case STATUS_TRANSACTION_ABORTED:
|
||||
case STATUS_CONNECTION_ABORTED:
|
||||
return WSAECONNABORTED;
|
||||
|
||||
case STATUS_BAD_NETWORK_PATH:
|
||||
case STATUS_NETWORK_UNREACHABLE:
|
||||
case STATUS_PROTOCOL_UNREACHABLE:
|
||||
return WSAENETUNREACH;
|
||||
|
||||
case STATUS_HOST_UNREACHABLE:
|
||||
return WSAEHOSTUNREACH;
|
||||
|
||||
case STATUS_CANCELLED:
|
||||
case STATUS_REQUEST_ABORTED:
|
||||
return WSAEINTR;
|
||||
|
||||
case STATUS_BUFFER_OVERFLOW:
|
||||
case STATUS_INVALID_BUFFER_SIZE:
|
||||
return WSAEMSGSIZE;
|
||||
|
||||
case STATUS_BUFFER_TOO_SMALL:
|
||||
case STATUS_ACCESS_VIOLATION:
|
||||
return WSAEFAULT;
|
||||
|
||||
case STATUS_DEVICE_NOT_READY:
|
||||
case STATUS_REQUEST_NOT_ACCEPTED:
|
||||
return WSAEWOULDBLOCK;
|
||||
|
||||
case STATUS_INVALID_NETWORK_RESPONSE:
|
||||
case STATUS_NETWORK_BUSY:
|
||||
case STATUS_NO_SUCH_DEVICE:
|
||||
case STATUS_NO_SUCH_FILE:
|
||||
case STATUS_OBJECT_PATH_NOT_FOUND:
|
||||
case STATUS_OBJECT_NAME_NOT_FOUND:
|
||||
case STATUS_UNEXPECTED_NETWORK_ERROR:
|
||||
return WSAENETDOWN;
|
||||
|
||||
case STATUS_INVALID_CONNECTION:
|
||||
return WSAENOTCONN;
|
||||
|
||||
case STATUS_REMOTE_NOT_LISTENING:
|
||||
case STATUS_CONNECTION_REFUSED:
|
||||
return WSAECONNREFUSED;
|
||||
|
||||
case STATUS_PIPE_DISCONNECTED:
|
||||
return WSAESHUTDOWN;
|
||||
|
||||
case STATUS_INVALID_ADDRESS:
|
||||
case STATUS_INVALID_ADDRESS_COMPONENT:
|
||||
return WSAEADDRNOTAVAIL;
|
||||
|
||||
case STATUS_NOT_SUPPORTED:
|
||||
case STATUS_NOT_IMPLEMENTED:
|
||||
return WSAEOPNOTSUPP;
|
||||
|
||||
case STATUS_ACCESS_DENIED:
|
||||
return WSAEACCES;
|
||||
|
||||
default:
|
||||
if (status & ((FACILITY_NTWIN32 << 16) | ERROR_SEVERITY_ERROR)) {
|
||||
/* It's a windows error that has been previously mapped to an */
|
||||
/* ntstatus code. */
|
||||
return (DWORD) (status & 0xffff);
|
||||
} else {
|
||||
/* The default fallback for unmappable ntstatus codes. */
|
||||
return WSAEINVAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user