Skip to main content

sys/ffi/linux/common/
errno.rs

1//! # Error Codes
2//!
3//! Linux follows the UNIX tradition in using integer error codes across all
4//! its interfaces. These are untyped and can be returned by any code in the
5//! kernel. Some have special meaning you can rely upon, yet this is usually
6//! not enforced by the kernel in any way (with few exceptions).
7//!
8//! Kernel syscalls return error codes in its return value. The `errno` concept
9//! is not used (it is merely emulated by the C Standard Library). The range of
10//! error codes is limited to `[1-4096]` (inclusive; note that `0` is not a
11//! valid error code). For this reason, we use `u16` as underlying data-type.
12//! Virtually all syscalls return error codes as negative values `-1` to
13//! `-4096`. Any return value outside this range is not considered an error but
14//! a successful syscall invocation.
15//!
16//! *Note*: This representation is compatible with pointer values. This is
17//! because the kernel never returns pointers for the highest memory maps, as
18//! those are reserved for kernel-internal pages, anyway. This means, even
19//! syscalls that return pointers will use this scheme.
20
21use super::abi;
22
23// Base error codes
24pub const EPERM: abi::U16 = abi::num(1);
25pub const ENOENT: abi::U16 = abi::num(2);
26pub const ESRCH: abi::U16 = abi::num(3);
27pub const EINTR: abi::U16 = abi::num(4);
28pub const EIO: abi::U16 = abi::num(5);
29pub const ENXIO: abi::U16 = abi::num(6);
30pub const E2BIG: abi::U16 = abi::num(7);
31pub const ENOEXEC: abi::U16 = abi::num(8);
32pub const EBADF: abi::U16 = abi::num(9);
33pub const ECHILD: abi::U16 = abi::num(10);
34pub const EAGAIN: abi::U16 = abi::num(11);
35pub const ENOMEM: abi::U16 = abi::num(12);
36pub const EACCES: abi::U16 = abi::num(13);
37pub const EFAULT: abi::U16 = abi::num(14);
38pub const ENOTBLK: abi::U16 = abi::num(15);
39pub const EBUSY: abi::U16 = abi::num(16);
40pub const EEXIST: abi::U16 = abi::num(17);
41pub const EXDEV: abi::U16 = abi::num(18);
42pub const ENODEV: abi::U16 = abi::num(19);
43pub const ENOTDIR: abi::U16 = abi::num(20);
44pub const EISDIR: abi::U16 = abi::num(21);
45pub const EINVAL: abi::U16 = abi::num(22);
46pub const ENFILE: abi::U16 = abi::num(23);
47pub const EMFILE: abi::U16 = abi::num(24);
48pub const ENOTTY: abi::U16 = abi::num(25);
49pub const ETXTBSY: abi::U16 = abi::num(26);
50pub const EFBIG: abi::U16 = abi::num(27);
51pub const ENOSPC: abi::U16 = abi::num(28);
52pub const ESPIPE: abi::U16 = abi::num(29);
53pub const EROFS: abi::U16 = abi::num(30);
54pub const EMLINK: abi::U16 = abi::num(31);
55pub const EPIPE: abi::U16 = abi::num(32);
56pub const EDOM: abi::U16 = abi::num(33);
57pub const ERANGE: abi::U16 = abi::num(34);
58
59// Extended error codes
60pub const EDEADLK: abi::U16 = abi::num(35);
61pub const ENAMETOOLONG: abi::U16 = abi::num(36);
62pub const ENOLCK: abi::U16 = abi::num(37);
63pub const ENOSYS: abi::U16 = abi::num(38);
64pub const ENOTEMPTY: abi::U16 = abi::num(39);
65pub const ELOOP: abi::U16 = abi::num(40);
66// 41 is unused (EWOULDBLOCK on UNIX).
67pub const ENOMSG: abi::U16 = abi::num(42);
68pub const EIDRM: abi::U16 = abi::num(43);
69pub const ECHRNG: abi::U16 = abi::num(44);
70pub const EL2NSYNC: abi::U16 = abi::num(45);
71pub const EL3HLT: abi::U16 = abi::num(46);
72pub const EL3RST: abi::U16 = abi::num(47);
73pub const ELNRNG: abi::U16 = abi::num(48);
74pub const EUNATCH: abi::U16 = abi::num(49);
75pub const ENOCSI: abi::U16 = abi::num(50);
76pub const EL2HLT: abi::U16 = abi::num(51);
77pub const EBADE: abi::U16 = abi::num(52);
78pub const EBADR: abi::U16 = abi::num(53);
79pub const EXFULL: abi::U16 = abi::num(54);
80pub const ENOANO: abi::U16 = abi::num(55);
81pub const EBADRQC: abi::U16 = abi::num(56);
82pub const EBADSLT: abi::U16 = abi::num(57);
83// 58 is unused (EDEADLOCK on UNIX).
84pub const EBFONT: abi::U16 = abi::num(59);
85pub const ENOSTR: abi::U16 = abi::num(60);
86pub const ENODATA: abi::U16 = abi::num(61);
87pub const ETIME: abi::U16 = abi::num(62);
88pub const ENOSR: abi::U16 = abi::num(63);
89pub const ENONET: abi::U16 = abi::num(64);
90pub const ENOPKG: abi::U16 = abi::num(65);
91pub const EREMOTE: abi::U16 = abi::num(66);
92pub const ENOLINK: abi::U16 = abi::num(67);
93pub const EADV: abi::U16 = abi::num(68);
94pub const ESRMNT: abi::U16 = abi::num(69);
95pub const ECOMM: abi::U16 = abi::num(70);
96pub const EPROTO: abi::U16 = abi::num(71);
97pub const EMULTIHOP: abi::U16 = abi::num(72);
98pub const EDOTDOT: abi::U16 = abi::num(73);
99pub const EBADMSG: abi::U16 = abi::num(74);
100pub const EOVERFLOW: abi::U16 = abi::num(75);
101pub const ENOTUNIQ: abi::U16 = abi::num(76);
102pub const EBADFD: abi::U16 = abi::num(77);
103pub const EREMCHG: abi::U16 = abi::num(78);
104pub const ELIBACC: abi::U16 = abi::num(79);
105pub const ELIBBAD: abi::U16 = abi::num(80);
106pub const ELIBSCN: abi::U16 = abi::num(81);
107pub const ELIBMAX: abi::U16 = abi::num(82);
108pub const ELIBEXEC: abi::U16 = abi::num(83);
109pub const EILSEQ: abi::U16 = abi::num(84);
110pub const ERESTART: abi::U16 = abi::num(85);
111pub const ESTRPIPE: abi::U16 = abi::num(86);
112pub const EUSERS: abi::U16 = abi::num(87);
113pub const ENOTSOCK: abi::U16 = abi::num(88);
114pub const EDESTADDRREQ: abi::U16 = abi::num(89);
115pub const EMSGSIZE: abi::U16 = abi::num(90);
116pub const EPROTOTYPE: abi::U16 = abi::num(91);
117pub const ENOPROTOOPT: abi::U16 = abi::num(92);
118pub const EPROTONOSUPPORT: abi::U16 = abi::num(93);
119pub const ESOCKTNOSUPPORT: abi::U16 = abi::num(94);
120pub const EOPNOTSUPP: abi::U16 = abi::num(95);
121pub const EPFNOSUPPORT: abi::U16 = abi::num(96);
122pub const EAFNOSUPPORT: abi::U16 = abi::num(97);
123pub const EADDRINUSE: abi::U16 = abi::num(98);
124pub const EADDRNOTAVAIL: abi::U16 = abi::num(99);
125pub const ENETDOWN: abi::U16 = abi::num(100);
126pub const ENETUNREACH: abi::U16 = abi::num(101);
127pub const ENETRESET: abi::U16 = abi::num(102);
128pub const ECONNABORTED: abi::U16 = abi::num(103);
129pub const ECONNRESET: abi::U16 = abi::num(104);
130pub const ENOBUFS: abi::U16 = abi::num(105);
131pub const EISCONN: abi::U16 = abi::num(106);
132pub const ENOTCONN: abi::U16 = abi::num(107);
133pub const ESHUTDOWN: abi::U16 = abi::num(108);
134pub const ETOOMANYREFS: abi::U16 = abi::num(109);
135pub const ETIMEDOUT: abi::U16 = abi::num(110);
136pub const ECONNREFUSED: abi::U16 = abi::num(111);
137pub const EHOSTDOWN: abi::U16 = abi::num(112);
138pub const EHOSTUNREACH: abi::U16 = abi::num(113);
139pub const EALREADY: abi::U16 = abi::num(114);
140pub const EINPROGRESS: abi::U16 = abi::num(115);
141pub const ESTALE: abi::U16 = abi::num(116);
142pub const EUCLEAN: abi::U16 = abi::num(117);
143pub const ENOTNAM: abi::U16 = abi::num(118);
144pub const ENAVAIL: abi::U16 = abi::num(119);
145pub const EISNAM: abi::U16 = abi::num(120);
146pub const EREMOTEIO: abi::U16 = abi::num(121);
147pub const EDQUOT: abi::U16 = abi::num(122);
148pub const ENOMEDIUM: abi::U16 = abi::num(123);
149pub const EMEDIUMTYPE: abi::U16 = abi::num(124);
150pub const ECANCELED: abi::U16 = abi::num(125);
151pub const ENOKEY: abi::U16 = abi::num(126);
152pub const EKEYEXPIRED: abi::U16 = abi::num(127);
153pub const EKEYREVOKED: abi::U16 = abi::num(128);
154pub const EKEYREJECTED: abi::U16 = abi::num(129);
155pub const EOWNERDEAD: abi::U16 = abi::num(130);
156pub const ENOTRECOVERABLE: abi::U16 = abi::num(131);
157pub const ERFKILL: abi::U16 = abi::num(132);
158pub const EHWPOISON: abi::U16 = abi::num(133);
159
160// Aliases to the canonical linux codes.
161pub const EWOULDBLOCK: abi::U16 = abi::num(11); // EAGAIN
162pub const EDEADLOCK: abi::U16 = abi::num(35); // EDEADLCK