123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- int
- winerror_to_errno(int winerror)
- {
- // Unwrap FACILITY_WIN32 HRESULT errors.
- if ((winerror & 0xFFFF0000) == 0x80070000) {
- winerror &= 0x0000FFFF;
- }
- // Winsock error codes (10000-11999) are errno values.
- if (winerror >= 10000 && winerror < 12000) {
- switch (winerror) {
- case WSAEINTR:
- case WSAEBADF:
- case WSAEACCES:
- case WSAEFAULT:
- case WSAEINVAL:
- case WSAEMFILE:
- // Winsock definitions of errno values. See WinSock2.h
- return winerror - 10000;
- default:
- return winerror;
- }
- }
- switch (winerror) {
- case ERROR_FILE_NOT_FOUND: // 2
- case ERROR_PATH_NOT_FOUND: // 3
- case ERROR_INVALID_DRIVE: // 15
- case ERROR_NO_MORE_FILES: // 18
- case ERROR_BAD_NETPATH: // 53
- case ERROR_BAD_NET_NAME: // 67
- case ERROR_BAD_PATHNAME: // 161
- case ERROR_FILENAME_EXCED_RANGE: // 206
- return ENOENT;
- case ERROR_BAD_ENVIRONMENT: // 10
- return E2BIG;
- case ERROR_BAD_FORMAT: // 11
- case ERROR_INVALID_STARTING_CODESEG: // 188
- case ERROR_INVALID_STACKSEG: // 189
- case ERROR_INVALID_MODULETYPE: // 190
- case ERROR_INVALID_EXE_SIGNATURE: // 191
- case ERROR_EXE_MARKED_INVALID: // 192
- case ERROR_BAD_EXE_FORMAT: // 193
- case ERROR_ITERATED_DATA_EXCEEDS_64k: // 194
- case ERROR_INVALID_MINALLOCSIZE: // 195
- case ERROR_DYNLINK_FROM_INVALID_RING: // 196
- case ERROR_IOPL_NOT_ENABLED: // 197
- case ERROR_INVALID_SEGDPL: // 198
- case ERROR_AUTODATASEG_EXCEEDS_64k: // 199
- case ERROR_RING2SEG_MUST_BE_MOVABLE: // 200
- case ERROR_RELOC_CHAIN_XEEDS_SEGLIM: // 201
- case ERROR_INFLOOP_IN_RELOC_CHAIN: // 202
- return ENOEXEC;
- case ERROR_INVALID_HANDLE: // 6
- case ERROR_INVALID_TARGET_HANDLE: // 114
- case ERROR_DIRECT_ACCESS_HANDLE: // 130
- return EBADF;
- case ERROR_WAIT_NO_CHILDREN: // 128
- case ERROR_CHILD_NOT_COMPLETE: // 129
- return ECHILD;
- case ERROR_NO_PROC_SLOTS: // 89
- case ERROR_MAX_THRDS_REACHED: // 164
- case ERROR_NESTING_NOT_ALLOWED: // 215
- return EAGAIN;
- case ERROR_ARENA_TRASHED: // 7
- case ERROR_NOT_ENOUGH_MEMORY: // 8
- case ERROR_INVALID_BLOCK: // 9
- case ERROR_NOT_ENOUGH_QUOTA: // 1816
- return ENOMEM;
- case ERROR_ACCESS_DENIED: // 5
- case ERROR_CURRENT_DIRECTORY: // 16
- case ERROR_WRITE_PROTECT: // 19
- case ERROR_BAD_UNIT: // 20
- case ERROR_NOT_READY: // 21
- case ERROR_BAD_COMMAND: // 22
- case ERROR_CRC: // 23
- case ERROR_BAD_LENGTH: // 24
- case ERROR_SEEK: // 25
- case ERROR_NOT_DOS_DISK: // 26
- case ERROR_SECTOR_NOT_FOUND: // 27
- case ERROR_OUT_OF_PAPER: // 28
- case ERROR_WRITE_FAULT: // 29
- case ERROR_READ_FAULT: // 30
- case ERROR_GEN_FAILURE: // 31
- case ERROR_SHARING_VIOLATION: // 32
- case ERROR_LOCK_VIOLATION: // 33
- case ERROR_WRONG_DISK: // 34
- case ERROR_SHARING_BUFFER_EXCEEDED: // 36
- case ERROR_NETWORK_ACCESS_DENIED: // 65
- case ERROR_CANNOT_MAKE: // 82
- case ERROR_FAIL_I24: // 83
- case ERROR_DRIVE_LOCKED: // 108
- case ERROR_SEEK_ON_DEVICE: // 132
- case ERROR_NOT_LOCKED: // 158
- case ERROR_LOCK_FAILED: // 167
- case 35: // 35 (undefined)
- return EACCES;
- case ERROR_FILE_EXISTS: // 80
- case ERROR_ALREADY_EXISTS: // 183
- return EEXIST;
- case ERROR_NOT_SAME_DEVICE: // 17
- return EXDEV;
- case ERROR_DIRECTORY: // 267 (bpo-12802)
- return ENOTDIR;
- case ERROR_TOO_MANY_OPEN_FILES: // 4
- return EMFILE;
- case ERROR_DISK_FULL: // 112
- return ENOSPC;
- case ERROR_BROKEN_PIPE: // 109
- case ERROR_NO_DATA: // 232 (bpo-13063)
- return EPIPE;
- case ERROR_DIR_NOT_EMPTY: // 145
- return ENOTEMPTY;
- case ERROR_NO_UNICODE_TRANSLATION: // 1113
- return EILSEQ;
- case ERROR_INVALID_FUNCTION: // 1
- case ERROR_INVALID_ACCESS: // 12
- case ERROR_INVALID_DATA: // 13
- case ERROR_INVALID_PARAMETER: // 87
- case ERROR_NEGATIVE_SEEK: // 131
- default:
- return EINVAL;
- }
- }
|