errno.odin 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. #+build haiku
  2. package sys_haiku
  3. import "core:sys/posix"
  4. foreign import libroot "system:c"
  5. USE_POSITIVE_POSIX_ERRORS :: posix._HAIKU_USE_POSITIVE_POSIX_ERRORS
  6. POSIX_ERROR_FACTOR :: posix._POSIX_ERROR_FACTOR
  7. // Error baselines
  8. GENERAL_ERROR_BASE :: min(i32)
  9. OS_ERROR_BASE :: GENERAL_ERROR_BASE + 0x1000
  10. APP_ERROR_BASE :: GENERAL_ERROR_BASE + 0x2000
  11. INTERFACE_ERROR_BASE :: GENERAL_ERROR_BASE + 0x3000
  12. MEDIA_ERROR_BASE :: GENERAL_ERROR_BASE + 0x4000
  13. TRANSLATION_ERROR_BASE :: GENERAL_ERROR_BASE + 0x4800
  14. MIDI_ERROR_BASE :: GENERAL_ERROR_BASE + 0x5000
  15. STORAGE_ERROR_BASE :: GENERAL_ERROR_BASE + 0x6000
  16. POSIX_ERROR_BASE :: GENERAL_ERROR_BASE + 0x7000
  17. MAIL_ERROR_BASE :: GENERAL_ERROR_BASE + 0x8000
  18. PRINT_ERROR_BASE :: GENERAL_ERROR_BASE + 0x9000
  19. DEVICE_ERROR_BASE :: GENERAL_ERROR_BASE + 0xA000
  20. // Developer-defined errors start at (ERRORS_END+1)
  21. ERRORS_END :: GENERAL_ERROR_BASE + 0xFFFF
  22. Errno :: enum i32 {
  23. // General Errors
  24. NO_MEMORY = GENERAL_ERROR_BASE + 0,
  25. IO_ERROR = GENERAL_ERROR_BASE + 1,
  26. PERMISSION_DENIED = GENERAL_ERROR_BASE + 2,
  27. BAD_INDEX = GENERAL_ERROR_BASE + 3,
  28. BAD_TYPE = GENERAL_ERROR_BASE + 4,
  29. BAD_VALUE = GENERAL_ERROR_BASE + 5,
  30. MISMATCHED_VALUES = GENERAL_ERROR_BASE + 6,
  31. NAME_NOT_FOUND = GENERAL_ERROR_BASE + 7,
  32. NAME_IN_USE = GENERAL_ERROR_BASE + 8,
  33. TIMED_OUT = GENERAL_ERROR_BASE + 9,
  34. INTERRUPTED = GENERAL_ERROR_BASE + 10,
  35. WOULD_BLOCK = GENERAL_ERROR_BASE + 11,
  36. CANCELED = GENERAL_ERROR_BASE + 12,
  37. NO_INIT = GENERAL_ERROR_BASE + 13,
  38. NOT_INITIALIZED = GENERAL_ERROR_BASE + 13,
  39. BUSY = GENERAL_ERROR_BASE + 14,
  40. NOT_ALLOWED = GENERAL_ERROR_BASE + 15,
  41. BAD_DATA = GENERAL_ERROR_BASE + 16,
  42. DONT_DO_THAT = GENERAL_ERROR_BASE + 17,
  43. ERROR = -1,
  44. OK = 0,
  45. NO_ERROR = 0,
  46. // Kernel Kit Errors
  47. BAD_SEM_ID = OS_ERROR_BASE + 0,
  48. NO_MORE_SEMS = OS_ERROR_BASE + 1,
  49. BAD_THREAD_ID = OS_ERROR_BASE + 0x100,
  50. NO_MORE_THREADS = OS_ERROR_BASE + 0x101,
  51. BAD_THREAD_STATE = OS_ERROR_BASE + 0x102,
  52. BAD_TEAM_ID = OS_ERROR_BASE + 0x103,
  53. NO_MORE_TEAMS = OS_ERROR_BASE + 0x104,
  54. BAD_PORT_ID = OS_ERROR_BASE + 0x200,
  55. NO_MORE_PORTS = OS_ERROR_BASE + 0x201,
  56. BAD_IMAGE_ID = OS_ERROR_BASE + 0x300,
  57. BAD_ADDRESS = OS_ERROR_BASE + 0x301,
  58. NOT_AN_EXECUTABLE = OS_ERROR_BASE + 0x302,
  59. MISSING_LIBRARY = OS_ERROR_BASE + 0x303,
  60. MISSING_SYMBOL = OS_ERROR_BASE + 0x304,
  61. UNKNOWN_EXECUTABLE = OS_ERROR_BASE + 0x305,
  62. LEGACY_EXECUTABLE = OS_ERROR_BASE + 0x306,
  63. DEBUGGER_ALREADY_INSTALLED = OS_ERROR_BASE + 0x400,
  64. // Application Kit Errors
  65. BAD_REPLY = APP_ERROR_BASE + 0,
  66. DUPLICATE_REPLY = APP_ERROR_BASE + 1,
  67. MESSAGE_TO_SELF = APP_ERROR_BASE + 2,
  68. BAD_HANDLER = APP_ERROR_BASE + 3,
  69. ALREADY_RUNNING = APP_ERROR_BASE + 4,
  70. LAUNCH_FAILED = APP_ERROR_BASE + 5,
  71. AMBIGUOUS_APP_LAUNCH = APP_ERROR_BASE + 6,
  72. UNKNOWN_MIME_TYPE = APP_ERROR_BASE + 7,
  73. BAD_SCRIPT_SYNTAX = APP_ERROR_BASE + 8,
  74. LAUNCH_FAILED_NO_RESOLVE_LINK = APP_ERROR_BASE + 9,
  75. LAUNCH_FAILED_EXECUTABLE = APP_ERROR_BASE + 10,
  76. LAUNCH_FAILED_APP_NOT_FOUND = APP_ERROR_BASE + 11,
  77. LAUNCH_FAILED_APP_IN_TRASH = APP_ERROR_BASE + 12,
  78. LAUNCH_FAILED_NO_PREFERRED_APP = APP_ERROR_BASE + 13,
  79. LAUNCH_FAILED_FILES_APP_NOT_FOUND = APP_ERROR_BASE + 14,
  80. BAD_MIME_SNIFFER_RULE = APP_ERROR_BASE + 15,
  81. NOT_A_MESSAGE = APP_ERROR_BASE + 16,
  82. SHUTDOWN_CANCELLED = APP_ERROR_BASE + 17,
  83. SHUTTING_DOWN = APP_ERROR_BASE + 18,
  84. // Storage Kit/File System Errors
  85. FILE_ERROR = STORAGE_ERROR_BASE + 0,
  86. // 1 was B_FILE_NOT_FOUND (deprecated)
  87. FILE_EXISTS = STORAGE_ERROR_BASE + 2,
  88. ENTRY_NOT_FOUND = STORAGE_ERROR_BASE + 3,
  89. NAME_TOO_LONG = STORAGE_ERROR_BASE + 4,
  90. NOT_A_DIRECTORY = STORAGE_ERROR_BASE + 5,
  91. DIRECTORY_NOT_EMPTY = STORAGE_ERROR_BASE + 6,
  92. DEVICE_FULL = STORAGE_ERROR_BASE + 7,
  93. READ_ONLY_DEVICE = STORAGE_ERROR_BASE + 8,
  94. IS_A_DIRECTORY = STORAGE_ERROR_BASE + 9,
  95. NO_MORE_FDS = STORAGE_ERROR_BASE + 10,
  96. CROSS_DEVICE_LINK = STORAGE_ERROR_BASE + 11,
  97. LINK_LIMIT = STORAGE_ERROR_BASE + 12,
  98. BUSTED_PIPE = STORAGE_ERROR_BASE + 13,
  99. UNSUPPORTED = STORAGE_ERROR_BASE + 14,
  100. PARTITION_TOO_SMALL = STORAGE_ERROR_BASE + 15,
  101. PARTIAL_READ = STORAGE_ERROR_BASE + 16,
  102. PARTIAL_WRITE = STORAGE_ERROR_BASE + 17,
  103. EIO = posix.EIO,
  104. EACCES = posix.EACCES,
  105. EINVAL = posix.EINVAL,
  106. ETIMEDOUT = posix.ETIMEDOUT,
  107. EINTR = posix.EINTR,
  108. EAGAIN = posix.EAGAIN,
  109. EWOULDBLOCK = posix.EWOULDBLOCK,
  110. EBUSY = posix.EBUSY,
  111. EPERM = posix.EPERM,
  112. EFAULT = posix.EFAULT,
  113. ENOEXEC = posix.ENOEXEC,
  114. EBADF = posix.EBADF,
  115. EEXIST = posix.EEXIST,
  116. ENOENT = posix.ENOENT,
  117. ENAMETOOLONG = posix.ENAMETOOLONG,
  118. ENOTDIR = posix.ENOTDIR,
  119. ENOTEMPTY = posix.ENOTEMPTY,
  120. ENOSPC = posix.ENOSPC,
  121. EROFS = posix.EROFS,
  122. EISDIR = posix.EISDIR,
  123. EMFILE = posix.EMFILE,
  124. EXDEV = posix.EXDEV,
  125. ELOOP = posix.ELOOP,
  126. EPIPE = posix.EPIPE,
  127. ENOMEM = posix.ENOMEM,
  128. E2BIG = posix.E2BIG,
  129. ECHILD = posix.ECHILD,
  130. EDEADLK = posix.EDEADLK,
  131. EFBIG = posix.EFBIG,
  132. EMLINK = posix.EMLINK,
  133. ENFILE = posix.ENFILE,
  134. ENODEV = posix.ENODEV,
  135. ENOLCK = posix.ENOLCK,
  136. ENOSYS = posix.ENOSYS,
  137. ENOTTY = posix.ENOTTY,
  138. ENXIO = posix.ENXIO,
  139. ESPIPE = posix.ESPIPE,
  140. ESRCH = posix.ESRCH,
  141. EDOM = posix.EDOM,
  142. ERANGE = posix.ERANGE,
  143. EPROTOTYPE = posix.EPROTOTYPE,
  144. EPROTONOSUPPORT = posix.EPROTONOSUPPORT,
  145. EAFNOSUPPORT = posix.EAFNOSUPPORT,
  146. EADDRINUSE = posix.EADDRINUSE,
  147. EADDRNOTAVAIL = posix.EADDRNOTAVAIL,
  148. ENETDOWN = posix.ENETDOWN,
  149. ENETUNREACH = posix.ENETUNREACH,
  150. ENETRESET = posix.ENETRESET,
  151. ECONNABORTED = posix.ECONNABORTED,
  152. ECONNRESET = posix.ECONNRESET,
  153. EISCONN = posix.EISCONN,
  154. ENOTCONN = posix.ENOTCONN,
  155. ECONNREFUSED = posix.ECONNREFUSED,
  156. EHOSTUNREACH = posix.EHOSTUNREACH,
  157. ENOPROTOOPT = posix.ENOPROTOOPT,
  158. ENOBUFS = posix.ENOBUFS,
  159. EINPROGRESS = posix.EINPROGRESS,
  160. EALREADY = posix.EALREADY,
  161. EILSEQ = posix.EILSEQ,
  162. ENOMSG = posix.ENOMSG,
  163. ESTALE = posix.ESTALE,
  164. EOVERFLOW = posix.EOVERFLOW,
  165. EMSGSIZE = posix.EMSGSIZE,
  166. EOPNOTSUPP = posix.EOPNOTSUPP,
  167. ENOTSOCK = posix.ENOTSOCK,
  168. EBADMSG = posix.EBADMSG,
  169. ECANCELED = posix.ECANCELED,
  170. EDESTADDRREQ = posix.EDESTADDRREQ,
  171. EDQUOT = posix.EDQUOT,
  172. EIDRM = posix.EIDRM,
  173. EMULTIHOP = posix.EMULTIHOP,
  174. ENODATA = posix.ENODATA,
  175. ENOLINK = posix.ENOLINK,
  176. ENOSR = posix.ENOSR,
  177. ENOSTR = posix.ENOSTR,
  178. ENOTSUP = posix.ENOTSUP,
  179. EPROTO = posix.EPROTO,
  180. ETIME = posix.ETIME,
  181. ETXTBSY = posix.ETXTBSY,
  182. ENOTRECOVERABLE = posix.ENOTRECOVERABLE,
  183. EOWNERDEAD = posix.EOWNERDEAD,
  184. // New error codes that can be mapped to POSIX errors
  185. TOO_MANY_ARGS = POSIX_ERROR_FACTOR * E2BIG,
  186. FILE_TOO_LARGE = POSIX_ERROR_FACTOR * EFBIG,
  187. DEVICE_NOT_FOUND = POSIX_ERROR_FACTOR * ENODEV,
  188. RESULT_NOT_REPRESENTABLE = POSIX_ERROR_FACTOR * ERANGE,
  189. BUFFER_OVERFLOW = POSIX_ERROR_FACTOR * EOVERFLOW,
  190. NOT_SUPPORTED = POSIX_ERROR_FACTOR * EOPNOTSUPP,
  191. // Media Kit Errors
  192. STREAM_NOT_FOUND = MEDIA_ERROR_BASE + 0,
  193. SERVER_NOT_FOUND = MEDIA_ERROR_BASE + 1,
  194. RESOURCE_NOT_FOUND = MEDIA_ERROR_BASE + 2,
  195. RESOURCE_UNAVAILABLE = MEDIA_ERROR_BASE + 3,
  196. BAD_SUBSCRIBER = MEDIA_ERROR_BASE + 4,
  197. SUBSCRIBER_NOT_ENTERED = MEDIA_ERROR_BASE + 5,
  198. BUFFER_NOT_AVAILABLE = MEDIA_ERROR_BASE + 6,
  199. LAST_BUFFER_ERROR = MEDIA_ERROR_BASE + 7,
  200. MEDIA_SYSTEM_FAILURE = MEDIA_ERROR_BASE + 100,
  201. MEDIA_BAD_NODE = MEDIA_ERROR_BASE + 101,
  202. MEDIA_NODE_BUSY = MEDIA_ERROR_BASE + 102,
  203. MEDIA_BAD_FORMAT = MEDIA_ERROR_BASE + 103,
  204. MEDIA_BAD_BUFFER = MEDIA_ERROR_BASE + 104,
  205. MEDIA_TOO_MANY_NODES = MEDIA_ERROR_BASE + 105,
  206. MEDIA_TOO_MANY_BUFFERS = MEDIA_ERROR_BASE + 106,
  207. MEDIA_NODE_ALREADY_EXISTS = MEDIA_ERROR_BASE + 107,
  208. MEDIA_BUFFER_ALREADY_EXISTS = MEDIA_ERROR_BASE + 108,
  209. MEDIA_CANNOT_SEEK = MEDIA_ERROR_BASE + 109,
  210. MEDIA_CANNOT_CHANGE_RUN_MODE = MEDIA_ERROR_BASE + 110,
  211. MEDIA_APP_ALREADY_REGISTERED = MEDIA_ERROR_BASE + 111,
  212. MEDIA_APP_NOT_REGISTERED = MEDIA_ERROR_BASE + 112,
  213. MEDIA_CANNOT_RECLAIM_BUFFERS = MEDIA_ERROR_BASE + 113,
  214. MEDIA_BUFFERS_NOT_RECLAIMED = MEDIA_ERROR_BASE + 114,
  215. MEDIA_TIME_SOURCE_STOPPED = MEDIA_ERROR_BASE + 115,
  216. MEDIA_TIME_SOURCE_BUSY = MEDIA_ERROR_BASE + 116,
  217. MEDIA_BAD_SOURCE = MEDIA_ERROR_BASE + 117,
  218. MEDIA_BAD_DESTINATION = MEDIA_ERROR_BASE + 118,
  219. MEDIA_ALREADY_CONNECTED = MEDIA_ERROR_BASE + 119,
  220. MEDIA_NOT_CONNECTED = MEDIA_ERROR_BASE + 120,
  221. MEDIA_BAD_CLIP_FORMAT = MEDIA_ERROR_BASE + 121,
  222. MEDIA_ADDON_FAILED = MEDIA_ERROR_BASE + 122,
  223. MEDIA_ADDON_DISABLED = MEDIA_ERROR_BASE + 123,
  224. MEDIA_CHANGE_IN_PROGRESS = MEDIA_ERROR_BASE + 124,
  225. MEDIA_STALE_CHANGE_COUNT = MEDIA_ERROR_BASE + 125,
  226. MEDIA_ADDON_RESTRICTED = MEDIA_ERROR_BASE + 126,
  227. MEDIA_NO_HANDLER = MEDIA_ERROR_BASE + 127,
  228. MEDIA_DUPLICATE_FORMAT = MEDIA_ERROR_BASE + 128,
  229. MEDIA_REALTIME_DISABLED = MEDIA_ERROR_BASE + 129,
  230. MEDIA_REALTIME_UNAVAILABLE = MEDIA_ERROR_BASE + 130,
  231. // Mail Kit Errors
  232. MAIL_NO_DAEMON = MAIL_ERROR_BASE + 0,
  233. MAIL_UNKNOWN_USER = MAIL_ERROR_BASE + 1,
  234. MAIL_WRONG_PASSWORD = MAIL_ERROR_BASE + 2,
  235. MAIL_UNKNOWN_HOST = MAIL_ERROR_BASE + 3,
  236. MAIL_ACCESS_ERROR = MAIL_ERROR_BASE + 4,
  237. MAIL_UNKNOWN_FIELD = MAIL_ERROR_BASE + 5,
  238. MAIL_NO_RECIPIENT = MAIL_ERROR_BASE + 6,
  239. MAIL_INVALID_MAIL = MAIL_ERROR_BASE + 7,
  240. // Printing Errors
  241. NO_PRINT_SERVER = PRINT_ERROR_BASE + 0,
  242. // Device Kit Errors
  243. DEV_INVALID_IOCTL = DEVICE_ERROR_BASE + 0,
  244. DEV_NO_MEMORY = DEVICE_ERROR_BASE + 1,
  245. DEV_BAD_DRIVE_NUM = DEVICE_ERROR_BASE + 2,
  246. DEV_NO_MEDIA = DEVICE_ERROR_BASE + 3,
  247. DEV_UNREADABLE = DEVICE_ERROR_BASE + 4,
  248. DEV_FORMAT_ERROR = DEVICE_ERROR_BASE + 5,
  249. DEV_TIMEOUT = DEVICE_ERROR_BASE + 6,
  250. DEV_RECALIBRATE_ERROR = DEVICE_ERROR_BASE + 7,
  251. DEV_SEEK_ERROR = DEVICE_ERROR_BASE + 8,
  252. DEV_ID_ERROR = DEVICE_ERROR_BASE + 9,
  253. DEV_READ_ERROR = DEVICE_ERROR_BASE + 10,
  254. DEV_WRITE_ERROR = DEVICE_ERROR_BASE + 11,
  255. DEV_NOT_READY = DEVICE_ERROR_BASE + 12,
  256. DEV_MEDIA_CHANGED = DEVICE_ERROR_BASE + 13,
  257. DEV_MEDIA_CHANGE_REQUESTED = DEVICE_ERROR_BASE + 14,
  258. DEV_RESOURCE_CONFLICT = DEVICE_ERROR_BASE + 15,
  259. DEV_CONFIGURATION_ERROR = DEVICE_ERROR_BASE + 16,
  260. DEV_DISABLED_BY_USER = DEVICE_ERROR_BASE + 17,
  261. DEV_DOOR_OPEN = DEVICE_ERROR_BASE + 18,
  262. DEV_INVALID_PIPE = DEVICE_ERROR_BASE + 19,
  263. DEV_CRC_ERROR = DEVICE_ERROR_BASE + 20,
  264. DEV_STALLED = DEVICE_ERROR_BASE + 21,
  265. DEV_BAD_PID = DEVICE_ERROR_BASE + 22,
  266. DEV_UNEXPECTED_PID = DEVICE_ERROR_BASE + 23,
  267. DEV_DATA_OVERRUN = DEVICE_ERROR_BASE + 24,
  268. DEV_DATA_UNDERRUN = DEVICE_ERROR_BASE + 25,
  269. DEV_FIFO_OVERRUN = DEVICE_ERROR_BASE + 26,
  270. DEV_FIFO_UNDERRUN = DEVICE_ERROR_BASE + 27,
  271. DEV_PENDING = DEVICE_ERROR_BASE + 28,
  272. DEV_MULTIPLE_ERRORS = DEVICE_ERROR_BASE + 29,
  273. DEV_TOO_LATE = DEVICE_ERROR_BASE + 30,
  274. // Translation Kit Errors
  275. TRANSLATION_BASE_ERROR = TRANSLATION_ERROR_BASE + 0,
  276. NO_TRANSLATOR = TRANSLATION_ERROR_BASE + 1,
  277. ILLEGAL_DATA = TRANSLATION_ERROR_BASE + 2,
  278. }
  279. @(default_calling_convention="c")
  280. foreign libroot {
  281. _to_positive_error :: proc(error: i32) -> i32 ---
  282. _to_negative_error :: proc(error: i32) -> i32 ---
  283. }