2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
4 * Copyright (c) 1994-1996 Søren Schmidt
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 * Linux syscalls return negative errno's, we do positive and map them
34 * FreeBSD: src/sys/sys/errno.h
35 * Linux: include/uapi/asm-generic/errno-base.h
36 * include/uapi/asm-generic/errno.h
38 * XXX: The "XXX" comments below should be replaced with rationale
39 * for the errno value chosen.
41 static const int linux_errtbl[ELAST + 1] = {
44 [EPERM] = -LINUX_EPERM,
45 [ENOENT] = -LINUX_ENOENT,
46 [ESRCH] = -LINUX_ESRCH,
47 [EINTR] = -LINUX_EINTR,
49 [ENXIO] = -LINUX_ENXIO,
50 [E2BIG] = -LINUX_E2BIG,
51 [ENOEXEC] = -LINUX_ENOEXEC,
52 [EBADF] = -LINUX_EBADF,
55 [ECHILD] = -LINUX_ECHILD,
56 [EDEADLK] = -LINUX_EDEADLK,
57 [ENOMEM] = -LINUX_ENOMEM,
58 [EACCES] = -LINUX_EACCES,
59 [EFAULT] = -LINUX_EFAULT,
60 [ENOTBLK] = -LINUX_ENOTBLK,
61 [EBUSY] = -LINUX_EBUSY,
62 [EEXIST] = -LINUX_EEXIST,
63 [EXDEV] = -LINUX_EXDEV,
64 [ENODEV] = -LINUX_ENODEV,
67 [ENOTDIR] = -LINUX_ENOTDIR,
68 [EISDIR] = -LINUX_EISDIR,
69 [EINVAL] = -LINUX_EINVAL,
70 [ENFILE] = -LINUX_ENFILE,
71 [EMFILE] = -LINUX_EMFILE,
72 [ENOTTY] = -LINUX_ENOTTY,
73 [ETXTBSY] = -LINUX_ETXTBSY,
74 [EFBIG] = -LINUX_EFBIG,
75 [ENOSPC] = -LINUX_ENOSPC,
76 [ESPIPE] = -LINUX_ESPIPE,
79 [EROFS] = -LINUX_EROFS,
80 [EMLINK] = -LINUX_EMLINK,
81 [EPIPE] = -LINUX_EPIPE,
83 [ERANGE] = -LINUX_ERANGE,
84 [EAGAIN] = -LINUX_EAGAIN,
85 [EINPROGRESS] = -LINUX_EINPROGRESS,
86 [EALREADY] = -LINUX_EALREADY,
87 [ENOTSOCK] = -LINUX_ENOTSOCK,
88 [EDESTADDRREQ] = -LINUX_EDESTADDRREQ,
91 [EMSGSIZE] = -LINUX_EMSGSIZE,
92 [EPROTOTYPE] = -LINUX_EPROTOTYPE,
93 [ENOPROTOOPT] = -LINUX_ENOPROTOOPT,
94 [EPROTONOSUPPORT] = -LINUX_EPROTONOTSUPPORT,
95 [ESOCKTNOSUPPORT] = -LINUX_ESOCKNOTSUPPORT,
96 [EOPNOTSUPP] = -LINUX_EOPNOTSUPPORT,
97 [EPFNOSUPPORT] = -LINUX_EPFNOTSUPPORT,
98 [EAFNOSUPPORT] = -LINUX_EAFNOTSUPPORT,
99 [EADDRINUSE] = -LINUX_EADDRINUSE,
100 [EADDRNOTAVAIL] = -LINUX_EADDRNOTAVAIL,
103 [ENETDOWN] = -LINUX_ENETDOWN,
104 [ENETUNREACH] = -LINUX_ENETUNREACH,
105 [ENETRESET] = -LINUX_ENETRESET,
106 [ECONNABORTED] = -LINUX_ECONNABORTED,
107 [ECONNRESET] = -LINUX_ECONNRESET,
108 [ENOBUFS] = -LINUX_ENOBUFS,
109 [EISCONN] = -LINUX_EISCONN,
110 [ENOTCONN] = -LINUX_ENOTCONN,
111 [ESHUTDOWN] = -LINUX_ESHUTDOWN,
112 [ETOOMANYREFS] = -LINUX_ETOOMANYREFS,
115 [ETIMEDOUT] = -LINUX_ETIMEDOUT,
116 [ECONNREFUSED] = -LINUX_ECONNREFUSED,
117 [ELOOP] = -LINUX_ELOOP,
118 [ENAMETOOLONG] = -LINUX_ENAMETOOLONG,
119 [EHOSTDOWN] = -LINUX_EHOSTDOWN,
120 [EHOSTUNREACH] = -LINUX_EHOSTUNREACH,
121 [ENOTEMPTY] = -LINUX_ENOTEMPTY,
122 [EPROCLIM] = -LINUX_EAGAIN, /* XXX */
123 [EUSERS] = -LINUX_EUSERS,
124 [EDQUOT] = -LINUX_EDQUOT,
127 [ESTALE] = -LINUX_ESTALE,
128 [EREMOTE] = -LINUX_EREMOTE,
129 [EBADRPC] = -LINUX_ENXIO, /* XXX */
130 [ERPCMISMATCH] = -LINUX_ENXIO, /* XXX */
131 [EPROGUNAVAIL] = -LINUX_ENXIO, /* XXX */
132 [EPROGMISMATCH] = -LINUX_ENXIO, /* XXX */
133 [EPROCUNAVAIL] = -LINUX_ENXIO, /* XXX */
134 [ENOLCK] = -LINUX_ENOLCK,
135 [ENOSYS] = -LINUX_ENOSYS,
136 [EFTYPE] = -LINUX_EBADF, /* XXX */
139 [EAUTH] = -LINUX_ENXIO, /* XXX */
140 [ENEEDAUTH] = -LINUX_ENXIO, /* XXX */
141 [EIDRM] = -LINUX_EIDRM,
142 [ENOMSG] = -LINUX_ENOMSG,
143 [EOVERFLOW] = -LINUX_EOVERFLOW,
144 [ECANCELED] = -LINUX_ECANCELED,
145 [EILSEQ] = -LINUX_EILSEQ,
146 [ENOATTR] = -LINUX_ENODATA, /* XXX */
147 [EDOOFUS] = -LINUX_EINVAL, /* XXX */
148 [EBADMSG] = -LINUX_EBADMSG,
151 [EMULTIHOP] = -LINUX_EMULTIHOP,
152 [ENOLINK] = -LINUX_ENOLINK,
153 [EPROTO] = -LINUX_EPROTO,
154 [ENOTCAPABLE] = -LINUX_EPERM, /* XXX */
155 [ECAPMODE] = -LINUX_EPERM, /* XXX */
156 [ENOTRECOVERABLE] = -LINUX_ENOTRECOVERABLE,
157 [EOWNERDEAD] = -LINUX_EOWNERDEAD,
158 [EINTEGRITY] = -LINUX_EINVAL, /* XXX */
161 _Static_assert(ELAST == 97,
162 "missing errno entries in linux_errtbl");
164 static const int linux_to_bsd_errtbl[LINUX_ELAST + 1] = {
167 [LINUX_EPERM] = EPERM,
168 [LINUX_ENOENT] = ENOENT,
169 [LINUX_ESRCH] = ESRCH,
170 [LINUX_EINTR] = EINTR,
172 [LINUX_ENXIO] = ENXIO,
173 [LINUX_E2BIG] = E2BIG,
174 [LINUX_ENOEXEC] = ENOENT,
175 [LINUX_EBADF] = EBADF,
178 [LINUX_ECHILD] = ECHILD,
179 [LINUX_EAGAIN] = EAGAIN,
180 [LINUX_ENOMEM] = ENOMEM,
181 [LINUX_EACCES] = EACCES,
182 [LINUX_EFAULT] = EFAULT,
183 [LINUX_ENOTBLK] = ENOTBLK,
184 [LINUX_EBUSY] = EBUSY,
185 [LINUX_EEXIST] = EEXIST,
186 [LINUX_EXDEV] = EXDEV,
187 [LINUX_ENODEV] = ENODEV,
190 [LINUX_ENOTDIR] = ENOTDIR,
191 [LINUX_EISDIR] = EISDIR,
192 [LINUX_EINVAL] = EINVAL,
193 [LINUX_ENFILE] = ENFILE,
194 [LINUX_EMFILE] = EMFILE,
195 [LINUX_ENOTTY] = ENOTTY,
196 [LINUX_ETXTBSY] = ETXTBSY,
197 [LINUX_EFBIG] = EFBIG,
198 [LINUX_ENOSPC] = ENOSPC,
199 [LINUX_ESPIPE] = ESPIPE,
202 [LINUX_EROFS] = EROFS,
203 [LINUX_EMLINK] = EMLINK,
204 [LINUX_EPIPE] = EPIPE,
206 [LINUX_ERANGE] = ERANGE,
207 [LINUX_EDEADLK] = EDEADLK,
208 [LINUX_ENAMETOOLONG] = ENAMETOOLONG,
209 [LINUX_ENOLCK] = ENOLCK,
210 [LINUX_ENOSYS] = ENOSYS,
211 [LINUX_ENOTEMPTY] = ENOTEMPTY,
214 [LINUX_ELOOP] = ELOOP,
216 [LINUX_ENOMSG] = ENOMSG,
217 [LINUX_EIDRM] = EIDRM,
218 [LINUX_ECHRNG] = EINVAL, /* XXX */
219 [LINUX_EL2NSYNC] = EINVAL, /* XXX */
220 [LINUX_EL3HLT] = EINVAL, /* XXX */
221 [LINUX_EL3RST] = EINVAL, /* XXX */
222 [LINUX_ELNRNG] = EINVAL, /* XXX */
223 [LINUX_EUNATCH] = EINVAL, /* XXX */
226 [LINUX_ENOCSI] = EINVAL, /* XXX */
227 [LINUX_EL2HLT] = EINVAL, /* XXX */
228 [LINUX_EBADE] = EINVAL, /* XXX */
229 [LINUX_EBADR] = EINVAL, /* XXX */
230 [LINUX_EXFULL] = EINVAL, /* XXX */
231 [LINUX_ENOANO] = EINVAL, /* XXX */
232 [LINUX_EBADRQC] = EINVAL, /* XXX */
233 [LINUX_EBADSLT] = EINVAL, /* XXX */
235 [LINUX_EBFONT] = EINVAL, /* XXX */
238 [LINUX_ENOSTR] = EINVAL, /* XXX */
239 [LINUX_ENODATA] = ENOATTR, /* XXX */
240 [LINUX_ENOTIME] = EINVAL, /* XXX */
241 [LINUX_ENOSR] = EINVAL, /* XXX */
242 [LINUX_ENONET] = EINVAL, /* XXX */
243 [LINUX_ENOPKG] = EINVAL, /* XXX */
244 [LINUX_EREMOTE] = EREMOTE,
245 [LINUX_ENOLINK] = ENOLINK,
246 [LINUX_EADV] = EINVAL, /* XXX */
247 [LINUX_ESRMNT] = EINVAL, /* XXX */
250 [LINUX_ECOMM] = EINVAL, /* XXX */
251 [LINUX_EPROTO] = EPROTO,
252 [LINUX_EMULTIHOP] = EMULTIHOP,
253 [LINUX_EDOTDOT] = EINVAL, /* XXX */
254 [LINUX_EBADMSG] = EBADMSG,
255 [LINUX_EOVERFLOW] = EOVERFLOW,
256 [LINUX_ENOTUNIQ] = EINVAL, /* XXX */
257 [LINUX_EBADFD] = EBADF, /* XXX */
258 [LINUX_EREMCHG] = EINVAL, /* XXX */
259 [LINUX_ELIBACC] = EINVAL, /* XXX */
262 [LINUX_ELIBBAD] = EINVAL, /* XXX */
263 [LINUX_ELIBSCN] = EINVAL, /* XXX */
264 [LINUX_ELIBMAX] = EINVAL, /* XXX */
265 [LINUX_ELIBEXEC] = EINVAL, /* XXX */
266 [LINUX_EILSEQ] = EILSEQ,
267 [LINUX_ERESTART] = EAGAIN, /* XXX */
268 [LINUX_ESTRPIPE] = EINVAL, /* XXX */
269 [LINUX_EUSERS] = EUSERS,
270 [LINUX_ENOTSOCK] = ENOTSOCK,
271 [LINUX_EDESTADDRREQ] = EDESTADDRREQ,
274 [LINUX_EMSGSIZE] = EMSGSIZE,
275 [LINUX_EPROTOTYPE] = EPROTOTYPE,
276 [LINUX_ENOPROTOOPT] = ENOPROTOOPT,
277 [LINUX_EPROTONOTSUPPORT] = EPROTONOSUPPORT,
278 [LINUX_ESOCKNOTSUPPORT] = EPROTONOSUPPORT, /* XXX */
279 [LINUX_EOPNOTSUPPORT] = EOPNOTSUPP,
280 [LINUX_EPFNOTSUPPORT] = EPFNOSUPPORT,
281 [LINUX_EAFNOTSUPPORT] = EAFNOSUPPORT,
282 [LINUX_EADDRINUSE] = EADDRINUSE,
283 [LINUX_EADDRNOTAVAIL] = EADDRNOTAVAIL,
286 [LINUX_ENETDOWN] = ENETDOWN,
287 [LINUX_ENETUNREACH] = ENETUNREACH,
288 [LINUX_ENETRESET] = ENETRESET,
289 [LINUX_ECONNABORTED] = ECONNABORTED,
290 [LINUX_ECONNRESET] = ECONNRESET,
291 [LINUX_ENOBUFS] = ENOBUFS,
292 [LINUX_EISCONN] = EISCONN,
293 [LINUX_ENOTCONN] = ENOTCONN,
294 [LINUX_ESHUTDOWN] = ESHUTDOWN,
295 [LINUX_ETOOMANYREFS] = ETOOMANYREFS,
298 [LINUX_ETIMEDOUT] = ETIMEDOUT,
299 [LINUX_ECONNREFUSED] = ECONNREFUSED,
300 [LINUX_EHOSTDOWN] = EHOSTDOWN,
301 [LINUX_EHOSTUNREACH] = EHOSTUNREACH,
302 [LINUX_EALREADY] = EALREADY,
303 [LINUX_EINPROGRESS] = EINPROGRESS,
304 [LINUX_ESTALE] = ESTALE,
305 [LINUX_EUCLEAN] = EINVAL, /* XXX */
306 [LINUX_ENOTNAM] = EINVAL, /* XXX */
307 [LINUX_ENAVAIL] = EINVAL, /* XXX */
310 [LINUX_EISNAM] = EINVAL, /* XXX */
311 [LINUX_EREMOTEIO] = EINVAL, /* XXX */
312 [LINUX_EDQUOT] = EDQUOT,
313 [LINUX_ENOMEDIUM] = EIO, /* XXX */
314 [LINUX_EMEDIUMTYPE] = EIO, /* XXX */
315 [LINUX_ECANCELED] = ECANCELED,
316 [LINUX_ENOKEY] = EIO, /* XXX */
317 [LINUX_EKEYEXPIRED] = EIO, /* XXX */
318 [LINUX_EKEYREVOKED] = EIO, /* XXX */
319 [LINUX_EKEYREJECTED] = EIO, /* XXX */
322 [LINUX_EOWNERDEAD] = EOWNERDEAD,
323 [LINUX_ENOTRECOVERABLE] = ENOTRECOVERABLE,
324 [LINUX_ERFKILL] = ENETDOWN, /* XXX */
325 [LINUX_EHWPOISON] = EINVAL, /* XXX */
328 _Static_assert(LINUX_ELAST == 133,
329 "missing errno entries in linux_to_bsd_errtbl");