errors_windows.odin 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #+private
  2. package os2
  3. import "base:runtime"
  4. import "core:slice"
  5. import win32 "core:sys/windows"
  6. _Platform_Error :: win32.System_Error
  7. _error_string :: proc(errno: i32) -> string {
  8. e := win32.DWORD(errno)
  9. if e == 0 {
  10. return ""
  11. }
  12. err := runtime.Type_Info_Enum_Value(e)
  13. ti := &runtime.type_info_base(type_info_of(win32.System_Error)).variant.(runtime.Type_Info_Enum)
  14. if idx, ok := slice.binary_search(ti.values, err); ok {
  15. return ti.names[idx]
  16. }
  17. return "<unknown platform error>"
  18. }
  19. _get_platform_error :: proc() -> Error {
  20. err := win32.GetLastError()
  21. if err == 0 {
  22. return nil
  23. }
  24. switch err {
  25. case win32.ERROR_ACCESS_DENIED, win32.ERROR_SHARING_VIOLATION:
  26. return .Permission_Denied
  27. case win32.ERROR_FILE_EXISTS, win32.ERROR_ALREADY_EXISTS:
  28. return .Exist
  29. case win32.ERROR_FILE_NOT_FOUND, win32.ERROR_PATH_NOT_FOUND:
  30. return .Not_Exist
  31. case win32.ERROR_NO_DATA:
  32. return .Closed
  33. case win32.ERROR_TIMEOUT, win32.WAIT_TIMEOUT:
  34. return .Timeout
  35. case win32.ERROR_NOT_SUPPORTED:
  36. return .Unsupported
  37. case win32.ERROR_HANDLE_EOF:
  38. return .EOF
  39. case win32.ERROR_INVALID_HANDLE:
  40. return .Invalid_File
  41. case win32.ERROR_NEGATIVE_SEEK:
  42. return .Invalid_Offset
  43. case win32.ERROR_BROKEN_PIPE:
  44. return .Broken_Pipe
  45. case
  46. win32.ERROR_BAD_ARGUMENTS,
  47. win32.ERROR_INVALID_PARAMETER,
  48. win32.ERROR_NOT_ENOUGH_MEMORY,
  49. win32.ERROR_NO_MORE_FILES,
  50. win32.ERROR_LOCK_VIOLATION,
  51. win32.ERROR_CALL_NOT_IMPLEMENTED,
  52. win32.ERROR_INSUFFICIENT_BUFFER,
  53. win32.ERROR_INVALID_NAME,
  54. win32.ERROR_LOCK_FAILED,
  55. win32.ERROR_ENVVAR_NOT_FOUND,
  56. win32.ERROR_OPERATION_ABORTED,
  57. win32.ERROR_IO_PENDING,
  58. win32.ERROR_NO_UNICODE_TRANSLATION:
  59. // fallthrough
  60. }
  61. return Platform_Error(err)
  62. }