errmap.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. int
  2. winerror_to_errno(int winerror)
  3. {
  4. // Unwrap FACILITY_WIN32 HRESULT errors.
  5. if ((winerror & 0xFFFF0000) == 0x80070000) {
  6. winerror &= 0x0000FFFF;
  7. }
  8. // Winsock error codes (10000-11999) are errno values.
  9. if (winerror >= 10000 && winerror < 12000) {
  10. switch (winerror) {
  11. case WSAEINTR:
  12. case WSAEBADF:
  13. case WSAEACCES:
  14. case WSAEFAULT:
  15. case WSAEINVAL:
  16. case WSAEMFILE:
  17. // Winsock definitions of errno values. See WinSock2.h
  18. return winerror - 10000;
  19. default:
  20. return winerror;
  21. }
  22. }
  23. switch (winerror) {
  24. case ERROR_FILE_NOT_FOUND: // 2
  25. case ERROR_PATH_NOT_FOUND: // 3
  26. case ERROR_INVALID_DRIVE: // 15
  27. case ERROR_NO_MORE_FILES: // 18
  28. case ERROR_BAD_NETPATH: // 53
  29. case ERROR_BAD_NET_NAME: // 67
  30. case ERROR_BAD_PATHNAME: // 161
  31. case ERROR_FILENAME_EXCED_RANGE: // 206
  32. return ENOENT;
  33. case ERROR_BAD_ENVIRONMENT: // 10
  34. return E2BIG;
  35. case ERROR_BAD_FORMAT: // 11
  36. case ERROR_INVALID_STARTING_CODESEG: // 188
  37. case ERROR_INVALID_STACKSEG: // 189
  38. case ERROR_INVALID_MODULETYPE: // 190
  39. case ERROR_INVALID_EXE_SIGNATURE: // 191
  40. case ERROR_EXE_MARKED_INVALID: // 192
  41. case ERROR_BAD_EXE_FORMAT: // 193
  42. case ERROR_ITERATED_DATA_EXCEEDS_64k: // 194
  43. case ERROR_INVALID_MINALLOCSIZE: // 195
  44. case ERROR_DYNLINK_FROM_INVALID_RING: // 196
  45. case ERROR_IOPL_NOT_ENABLED: // 197
  46. case ERROR_INVALID_SEGDPL: // 198
  47. case ERROR_AUTODATASEG_EXCEEDS_64k: // 199
  48. case ERROR_RING2SEG_MUST_BE_MOVABLE: // 200
  49. case ERROR_RELOC_CHAIN_XEEDS_SEGLIM: // 201
  50. case ERROR_INFLOOP_IN_RELOC_CHAIN: // 202
  51. return ENOEXEC;
  52. case ERROR_INVALID_HANDLE: // 6
  53. case ERROR_INVALID_TARGET_HANDLE: // 114
  54. case ERROR_DIRECT_ACCESS_HANDLE: // 130
  55. return EBADF;
  56. case ERROR_WAIT_NO_CHILDREN: // 128
  57. case ERROR_CHILD_NOT_COMPLETE: // 129
  58. return ECHILD;
  59. case ERROR_NO_PROC_SLOTS: // 89
  60. case ERROR_MAX_THRDS_REACHED: // 164
  61. case ERROR_NESTING_NOT_ALLOWED: // 215
  62. return EAGAIN;
  63. case ERROR_ARENA_TRASHED: // 7
  64. case ERROR_NOT_ENOUGH_MEMORY: // 8
  65. case ERROR_INVALID_BLOCK: // 9
  66. case ERROR_NOT_ENOUGH_QUOTA: // 1816
  67. return ENOMEM;
  68. case ERROR_ACCESS_DENIED: // 5
  69. case ERROR_CURRENT_DIRECTORY: // 16
  70. case ERROR_WRITE_PROTECT: // 19
  71. case ERROR_BAD_UNIT: // 20
  72. case ERROR_NOT_READY: // 21
  73. case ERROR_BAD_COMMAND: // 22
  74. case ERROR_CRC: // 23
  75. case ERROR_BAD_LENGTH: // 24
  76. case ERROR_SEEK: // 25
  77. case ERROR_NOT_DOS_DISK: // 26
  78. case ERROR_SECTOR_NOT_FOUND: // 27
  79. case ERROR_OUT_OF_PAPER: // 28
  80. case ERROR_WRITE_FAULT: // 29
  81. case ERROR_READ_FAULT: // 30
  82. case ERROR_GEN_FAILURE: // 31
  83. case ERROR_SHARING_VIOLATION: // 32
  84. case ERROR_LOCK_VIOLATION: // 33
  85. case ERROR_WRONG_DISK: // 34
  86. case ERROR_SHARING_BUFFER_EXCEEDED: // 36
  87. case ERROR_NETWORK_ACCESS_DENIED: // 65
  88. case ERROR_CANNOT_MAKE: // 82
  89. case ERROR_FAIL_I24: // 83
  90. case ERROR_DRIVE_LOCKED: // 108
  91. case ERROR_SEEK_ON_DEVICE: // 132
  92. case ERROR_NOT_LOCKED: // 158
  93. case ERROR_LOCK_FAILED: // 167
  94. case 35: // 35 (undefined)
  95. return EACCES;
  96. case ERROR_FILE_EXISTS: // 80
  97. case ERROR_ALREADY_EXISTS: // 183
  98. return EEXIST;
  99. case ERROR_NOT_SAME_DEVICE: // 17
  100. return EXDEV;
  101. case ERROR_DIRECTORY: // 267 (bpo-12802)
  102. return ENOTDIR;
  103. case ERROR_TOO_MANY_OPEN_FILES: // 4
  104. return EMFILE;
  105. case ERROR_DISK_FULL: // 112
  106. return ENOSPC;
  107. case ERROR_BROKEN_PIPE: // 109
  108. case ERROR_NO_DATA: // 232 (bpo-13063)
  109. return EPIPE;
  110. case ERROR_DIR_NOT_EMPTY: // 145
  111. return ENOTEMPTY;
  112. case ERROR_NO_UNICODE_TRANSLATION: // 1113
  113. return EILSEQ;
  114. case ERROR_INVALID_FUNCTION: // 1
  115. case ERROR_INVALID_ACCESS: // 12
  116. case ERROR_INVALID_DATA: // 13
  117. case ERROR_INVALID_PARAMETER: // 87
  118. case ERROR_NEGATIVE_SEEK: // 131
  119. default:
  120. return EINVAL;
  121. }
  122. }