errors_windows.odin 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. //+private
  2. package os2
  3. import win32 "core:sys/windows"
  4. _error_string :: proc(errno: i32) -> string {
  5. e := win32.DWORD(errno)
  6. if e == 0 {
  7. return ""
  8. }
  9. // TODO(bill): _error_string for windows
  10. // FormatMessageW
  11. return ""
  12. }
  13. _get_platform_error :: proc() -> Error {
  14. err := win32.GetLastError()
  15. if err == 0 {
  16. return nil
  17. }
  18. switch err {
  19. case win32.ERROR_ACCESS_DENIED, win32.ERROR_SHARING_VIOLATION:
  20. return .Permission_Denied
  21. case win32.ERROR_FILE_EXISTS, win32.ERROR_ALREADY_EXISTS:
  22. return .Exist
  23. case win32.ERROR_FILE_NOT_FOUND, win32.ERROR_PATH_NOT_FOUND:
  24. return .Not_Exist
  25. case win32.ERROR_NO_DATA:
  26. return .Closed
  27. case win32.ERROR_TIMEOUT, win32.WAIT_TIMEOUT:
  28. return .Timeout
  29. case win32.ERROR_NOT_SUPPORTED:
  30. return .Unsupported
  31. case win32.ERROR_HANDLE_EOF:
  32. return .EOF
  33. case win32.ERROR_INVALID_HANDLE:
  34. return .Invalid_File
  35. case
  36. win32.ERROR_BAD_ARGUMENTS,
  37. win32.ERROR_INVALID_PARAMETER,
  38. win32.ERROR_NOT_ENOUGH_MEMORY,
  39. win32.ERROR_NO_MORE_FILES,
  40. win32.ERROR_LOCK_VIOLATION,
  41. win32.ERROR_BROKEN_PIPE,
  42. win32.ERROR_CALL_NOT_IMPLEMENTED,
  43. win32.ERROR_INSUFFICIENT_BUFFER,
  44. win32.ERROR_INVALID_NAME,
  45. win32.ERROR_LOCK_FAILED,
  46. win32.ERROR_ENVVAR_NOT_FOUND,
  47. win32.ERROR_OPERATION_ABORTED,
  48. win32.ERROR_IO_PENDING,
  49. win32.ERROR_NO_UNICODE_TRANSLATION:
  50. // fallthrough
  51. }
  52. return Platform_Error(err)
  53. }