errors.odin 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. //+build haiku
  2. package sys_haiku
  3. import "core:c"
  4. Errno :: enum c.int {
  5. // Error baselines
  6. GENERAL_ERROR_BASE = min(c.int),
  7. OS_ERROR_BASE = GENERAL_ERROR_BASE + 0x1000,
  8. APP_ERROR_BASE = GENERAL_ERROR_BASE + 0x2000,
  9. INTERFACE_ERROR_BASE = GENERAL_ERROR_BASE + 0x3000,
  10. MEDIA_ERROR_BASE = GENERAL_ERROR_BASE + 0x4000,
  11. TRANSLATION_ERROR_BASE = GENERAL_ERROR_BASE + 0x4800,
  12. MIDI_ERROR_BASE = GENERAL_ERROR_BASE + 0x5000,
  13. STORAGE_ERROR_BASE = GENERAL_ERROR_BASE + 0x6000,
  14. POSIX_ERROR_BASE = GENERAL_ERROR_BASE + 0x7000,
  15. MAIL_ERROR_BASE = GENERAL_ERROR_BASE + 0x8000,
  16. PRINT_ERROR_BASE = GENERAL_ERROR_BASE + 0x9000,
  17. DEVICE_ERROR_BASE = GENERAL_ERROR_BASE + 0xa000,
  18. // Developer-defined errors start at (ERRORS_END+1)
  19. ERRORS_END = GENERAL_ERROR_BASE + 0xffff,
  20. // General Errors
  21. NO_MEMORY = GENERAL_ERROR_BASE + 0,
  22. IO_ERROR = GENERAL_ERROR_BASE + 1,
  23. PERMISSION_DENIED = GENERAL_ERROR_BASE + 2,
  24. BAD_INDEX = GENERAL_ERROR_BASE + 3,
  25. BAD_TYPE = GENERAL_ERROR_BASE + 4,
  26. BAD_VALUE = GENERAL_ERROR_BASE + 5,
  27. MISMATCHED_VALUES = GENERAL_ERROR_BASE + 6,
  28. NAME_NOT_FOUND = GENERAL_ERROR_BASE + 7,
  29. NAME_IN_USE = GENERAL_ERROR_BASE + 8,
  30. TIMED_OUT = GENERAL_ERROR_BASE + 9,
  31. INTERRUPTED = GENERAL_ERROR_BASE + 10,
  32. WOULD_BLOCK = GENERAL_ERROR_BASE + 11,
  33. CANCELED = GENERAL_ERROR_BASE + 12,
  34. NO_INIT = GENERAL_ERROR_BASE + 13,
  35. NOT_INITIALIZED = GENERAL_ERROR_BASE + 13,
  36. BUSY = GENERAL_ERROR_BASE + 14,
  37. NOT_ALLOWED = GENERAL_ERROR_BASE + 15,
  38. BAD_DATA = GENERAL_ERROR_BASE + 16,
  39. DONT_DO_THAT = GENERAL_ERROR_BASE + 17,
  40. ERROR = -1,
  41. OK = 0,
  42. NO_ERROR = 0,
  43. // Kernel Kit Errors
  44. BAD_SEM_ID = OS_ERROR_BASE + 0,
  45. NO_MORE_SEMS = OS_ERROR_BASE + 1,
  46. BAD_THREAD_ID = OS_ERROR_BASE + 0x100,
  47. NO_MORE_THREADS = OS_ERROR_BASE + 0x101,
  48. BAD_THREAD_STATE = OS_ERROR_BASE + 0x102,
  49. BAD_TEAM_ID = OS_ERROR_BASE + 0x103,
  50. NO_MORE_TEAMS = OS_ERROR_BASE + 0x104,
  51. BAD_PORT_ID = OS_ERROR_BASE + 0x200,
  52. NO_MORE_PORTS = OS_ERROR_BASE + 0x201,
  53. BAD_IMAGE_ID = OS_ERROR_BASE + 0x300,
  54. BAD_ADDRESS = OS_ERROR_BASE + 0x301,
  55. NOT_AN_EXECUTABLE = OS_ERROR_BASE + 0x302,
  56. MISSING_LIBRARY = OS_ERROR_BASE + 0x303,
  57. MISSING_SYMBOL = OS_ERROR_BASE + 0x304,
  58. UNKNOWN_EXECUTABLE = OS_ERROR_BASE + 0x305,
  59. LEGACY_EXECUTABLE = OS_ERROR_BASE + 0x306,
  60. DEBUGGER_ALREADY_INSTALLED = OS_ERROR_BASE + 0x400,
  61. // Application Kit Errors
  62. BAD_REPLY = APP_ERROR_BASE + 0,
  63. DUPLICATE_REPLY = APP_ERROR_BASE + 1,
  64. MESSAGE_TO_SELF = APP_ERROR_BASE + 2,
  65. BAD_HANDLER = APP_ERROR_BASE + 3,
  66. ALREADY_RUNNING = APP_ERROR_BASE + 4,
  67. LAUNCH_FAILED = APP_ERROR_BASE + 5,
  68. AMBIGUOUS_APP_LAUNCH = APP_ERROR_BASE + 6,
  69. UNKNOWN_MIME_TYPE = APP_ERROR_BASE + 7,
  70. BAD_SCRIPT_SYNTAX = APP_ERROR_BASE + 8,
  71. LAUNCH_FAILED_NO_RESOLVE_LINK = APP_ERROR_BASE + 9,
  72. LAUNCH_FAILED_EXECUTABLE = APP_ERROR_BASE + 10,
  73. LAUNCH_FAILED_APP_NOT_FOUND = APP_ERROR_BASE + 11,
  74. LAUNCH_FAILED_APP_IN_TRASH = APP_ERROR_BASE + 12,
  75. LAUNCH_FAILED_NO_PREFERRED_APP = APP_ERROR_BASE + 13,
  76. LAUNCH_FAILED_FILES_APP_NOT_FOUND = APP_ERROR_BASE + 14,
  77. BAD_MIME_SNIFFER_RULE = APP_ERROR_BASE + 15,
  78. NOT_A_MESSAGE = APP_ERROR_BASE + 16,
  79. SHUTDOWN_CANCELLED = APP_ERROR_BASE + 17,
  80. SHUTTING_DOWN = APP_ERROR_BASE + 18,
  81. // Storage Kit/File System Errors
  82. FILE_ERROR = STORAGE_ERROR_BASE + 0,
  83. // 1 was B_FILE_NOT_FOUND (deprecated)
  84. FILE_EXISTS = STORAGE_ERROR_BASE + 2,
  85. ENTRY_NOT_FOUND = STORAGE_ERROR_BASE + 3,
  86. NAME_TOO_LONG = STORAGE_ERROR_BASE + 4,
  87. NOT_A_DIRECTORY = STORAGE_ERROR_BASE + 5,
  88. DIRECTORY_NOT_EMPTY = STORAGE_ERROR_BASE + 6,
  89. DEVICE_FULL = STORAGE_ERROR_BASE + 7,
  90. READ_ONLY_DEVICE = STORAGE_ERROR_BASE + 8,
  91. IS_A_DIRECTORY = STORAGE_ERROR_BASE + 9,
  92. NO_MORE_FDS = STORAGE_ERROR_BASE + 10,
  93. CROSS_DEVICE_LINK = STORAGE_ERROR_BASE + 11,
  94. LINK_LIMIT = STORAGE_ERROR_BASE + 12,
  95. BUSTED_PIPE = STORAGE_ERROR_BASE + 13,
  96. UNSUPPORTED = STORAGE_ERROR_BASE + 14,
  97. PARTITION_TOO_SMALL = STORAGE_ERROR_BASE + 15,
  98. PARTIAL_READ = STORAGE_ERROR_BASE + 16,
  99. PARTIAL_WRITE = STORAGE_ERROR_BASE + 17,
  100. // Some POSIX errors
  101. E2BIG = POSIX_ERROR_BASE + 1,
  102. EFBIG = POSIX_ERROR_BASE + 4,
  103. ENODEV = POSIX_ERROR_BASE + 7,
  104. ERANGE = POSIX_ERROR_BASE + 17,
  105. EOVERFLOW = POSIX_ERROR_BASE + 41,
  106. EOPNOTSUPP = POSIX_ERROR_BASE + 43,
  107. ENOSYS = POSIX_ERROR_BASE + 9,
  108. EAGAIN = WOULD_BLOCK,
  109. // New error codes that can be mapped to POSIX errors
  110. TOO_MANY_ARGS_NEG = E2BIG,
  111. FILE_TOO_LARGE_NEG = EFBIG,
  112. DEVICE_NOT_FOUND_NEG = ENODEV,
  113. RESULT_NOT_REPRESENTABLE_NEG = ERANGE,
  114. BUFFER_OVERFLOW_NEG = EOVERFLOW,
  115. NOT_SUPPORTED_NEG = EOPNOTSUPP,
  116. TOO_MANY_ARGS_POS = -E2BIG,
  117. FILE_TOO_LARGE_POS = -EFBIG,
  118. DEVICE_NOT_FOUND_POS = -ENODEV,
  119. RESULT_NOT_REPRESENTABLE_POS = -ERANGE,
  120. BUFFER_OVERFLOW_POS = -EOVERFLOW,
  121. NOT_SUPPORTED_POS = -EOPNOTSUPP,
  122. // Media Kit Errors
  123. STREAM_NOT_FOUND = MEDIA_ERROR_BASE + 0,
  124. SERVER_NOT_FOUND = MEDIA_ERROR_BASE + 1,
  125. RESOURCE_NOT_FOUND = MEDIA_ERROR_BASE + 2,
  126. RESOURCE_UNAVAILABLE = MEDIA_ERROR_BASE + 3,
  127. BAD_SUBSCRIBER = MEDIA_ERROR_BASE + 4,
  128. SUBSCRIBER_NOT_ENTERED = MEDIA_ERROR_BASE + 5,
  129. BUFFER_NOT_AVAILABLE = MEDIA_ERROR_BASE + 6,
  130. LAST_BUFFER_ERROR = MEDIA_ERROR_BASE + 7,
  131. MEDIA_SYSTEM_FAILURE = MEDIA_ERROR_BASE + 100,
  132. MEDIA_BAD_NODE = MEDIA_ERROR_BASE + 101,
  133. MEDIA_NODE_BUSY = MEDIA_ERROR_BASE + 102,
  134. MEDIA_BAD_FORMAT = MEDIA_ERROR_BASE + 103,
  135. MEDIA_BAD_BUFFER = MEDIA_ERROR_BASE + 104,
  136. MEDIA_TOO_MANY_NODES = MEDIA_ERROR_BASE + 105,
  137. MEDIA_TOO_MANY_BUFFERS = MEDIA_ERROR_BASE + 106,
  138. MEDIA_NODE_ALREADY_EXISTS = MEDIA_ERROR_BASE + 107,
  139. MEDIA_BUFFER_ALREADY_EXISTS = MEDIA_ERROR_BASE + 108,
  140. MEDIA_CANNOT_SEEK = MEDIA_ERROR_BASE + 109,
  141. MEDIA_CANNOT_CHANGE_RUN_MODE = MEDIA_ERROR_BASE + 110,
  142. MEDIA_APP_ALREADY_REGISTERED = MEDIA_ERROR_BASE + 111,
  143. MEDIA_APP_NOT_REGISTERED = MEDIA_ERROR_BASE + 112,
  144. MEDIA_CANNOT_RECLAIM_BUFFERS = MEDIA_ERROR_BASE + 113,
  145. MEDIA_BUFFERS_NOT_RECLAIMED = MEDIA_ERROR_BASE + 114,
  146. MEDIA_TIME_SOURCE_STOPPED = MEDIA_ERROR_BASE + 115,
  147. MEDIA_TIME_SOURCE_BUSY = MEDIA_ERROR_BASE + 116,
  148. MEDIA_BAD_SOURCE = MEDIA_ERROR_BASE + 117,
  149. MEDIA_BAD_DESTINATION = MEDIA_ERROR_BASE + 118,
  150. MEDIA_ALREADY_CONNECTED = MEDIA_ERROR_BASE + 119,
  151. MEDIA_NOT_CONNECTED = MEDIA_ERROR_BASE + 120,
  152. MEDIA_BAD_CLIP_FORMAT = MEDIA_ERROR_BASE + 121,
  153. MEDIA_ADDON_FAILED = MEDIA_ERROR_BASE + 122,
  154. MEDIA_ADDON_DISABLED = MEDIA_ERROR_BASE + 123,
  155. MEDIA_CHANGE_IN_PROGRESS = MEDIA_ERROR_BASE + 124,
  156. MEDIA_STALE_CHANGE_COUNT = MEDIA_ERROR_BASE + 125,
  157. MEDIA_ADDON_RESTRICTED = MEDIA_ERROR_BASE + 126,
  158. MEDIA_NO_HANDLER = MEDIA_ERROR_BASE + 127,
  159. MEDIA_DUPLICATE_FORMAT = MEDIA_ERROR_BASE + 128,
  160. MEDIA_REALTIME_DISABLED = MEDIA_ERROR_BASE + 129,
  161. MEDIA_REALTIME_UNAVAILABLE = MEDIA_ERROR_BASE + 130,
  162. // Mail Kit Errors
  163. MAIL_NO_DAEMON = MAIL_ERROR_BASE + 0,
  164. MAIL_UNKNOWN_USER = MAIL_ERROR_BASE + 1,
  165. MAIL_WRONG_PASSWORD = MAIL_ERROR_BASE + 2,
  166. MAIL_UNKNOWN_HOST = MAIL_ERROR_BASE + 3,
  167. MAIL_ACCESS_ERROR = MAIL_ERROR_BASE + 4,
  168. MAIL_UNKNOWN_FIELD = MAIL_ERROR_BASE + 5,
  169. MAIL_NO_RECIPIENT = MAIL_ERROR_BASE + 6,
  170. MAIL_INVALID_MAIL = MAIL_ERROR_BASE + 7,
  171. // Printing Errors
  172. NO_PRINT_SERVER = PRINT_ERROR_BASE + 0,
  173. // Device Kit Errors
  174. DEV_INVALID_IOCTL = DEVICE_ERROR_BASE + 0,
  175. DEV_NO_MEMORY = DEVICE_ERROR_BASE + 1,
  176. DEV_BAD_DRIVE_NUM = DEVICE_ERROR_BASE + 2,
  177. DEV_NO_MEDIA = DEVICE_ERROR_BASE + 3,
  178. DEV_UNREADABLE = DEVICE_ERROR_BASE + 4,
  179. DEV_FORMAT_ERROR = DEVICE_ERROR_BASE + 5,
  180. DEV_TIMEOUT = DEVICE_ERROR_BASE + 6,
  181. DEV_RECALIBRATE_ERROR = DEVICE_ERROR_BASE + 7,
  182. DEV_SEEK_ERROR = DEVICE_ERROR_BASE + 8,
  183. DEV_ID_ERROR = DEVICE_ERROR_BASE + 9,
  184. DEV_READ_ERROR = DEVICE_ERROR_BASE + 10,
  185. DEV_WRITE_ERROR = DEVICE_ERROR_BASE + 11,
  186. DEV_NOT_READY = DEVICE_ERROR_BASE + 12,
  187. DEV_MEDIA_CHANGED = DEVICE_ERROR_BASE + 13,
  188. DEV_MEDIA_CHANGE_REQUESTED = DEVICE_ERROR_BASE + 14,
  189. DEV_RESOURCE_CONFLICT = DEVICE_ERROR_BASE + 15,
  190. DEV_CONFIGURATION_ERROR = DEVICE_ERROR_BASE + 16,
  191. DEV_DISABLED_BY_USER = DEVICE_ERROR_BASE + 17,
  192. DEV_DOOR_OPEN = DEVICE_ERROR_BASE + 18,
  193. DEV_INVALID_PIPE = DEVICE_ERROR_BASE + 19,
  194. DEV_CRC_ERROR = DEVICE_ERROR_BASE + 20,
  195. DEV_STALLED = DEVICE_ERROR_BASE + 21,
  196. DEV_BAD_PID = DEVICE_ERROR_BASE + 22,
  197. DEV_UNEXPECTED_PID = DEVICE_ERROR_BASE + 23,
  198. DEV_DATA_OVERRUN = DEVICE_ERROR_BASE + 24,
  199. DEV_DATA_UNDERRUN = DEVICE_ERROR_BASE + 25,
  200. DEV_FIFO_OVERRUN = DEVICE_ERROR_BASE + 26,
  201. DEV_FIFO_UNDERRUN = DEVICE_ERROR_BASE + 27,
  202. DEV_PENDING = DEVICE_ERROR_BASE + 28,
  203. DEV_MULTIPLE_ERRORS = DEVICE_ERROR_BASE + 29,
  204. DEV_TOO_LATE = DEVICE_ERROR_BASE + 30,
  205. // Translation Kit Errors
  206. TRANSLATION_BASE_ERROR = TRANSLATION_ERROR_BASE + 0,
  207. NO_TRANSLATOR = TRANSLATION_ERROR_BASE + 1,
  208. ILLEGAL_DATA = TRANSLATION_ERROR_BASE + 2,
  209. }
  210. errno :: #force_inline proc "contextless" () -> Errno {
  211. return Errno(_errnop()^)
  212. }
  213. foreign import libroot "system:c"
  214. foreign libroot {
  215. _to_positive_error :: proc(error: c.int) -> c.int ---
  216. _to_negative_error :: proc(error: c.int) -> c.int ---
  217. _errnop :: proc() -> ^c.int ---
  218. }