2 * Copyright (c) 2015 Nuxi, https://nuxi.nl/
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 #include <sys/cdefs.h>
27 __FBSDID("$FreeBSD$");
29 #include <sys/param.h>
31 #include <contrib/cloudabi/cloudabi_types_common.h>
33 #include <compat/cloudabi/cloudabi_util.h>
35 /* Converts a FreeBSD errno to a CloudABI errno. */
37 cloudabi_convert_errno(int error)
39 static const int table[] = {
40 [E2BIG] = CLOUDABI_E2BIG,
41 [EACCES] = CLOUDABI_EACCES,
42 [EADDRINUSE] = CLOUDABI_EADDRINUSE,
43 [EADDRNOTAVAIL] = CLOUDABI_EADDRNOTAVAIL,
44 [EAFNOSUPPORT] = CLOUDABI_EAFNOSUPPORT,
45 [EAGAIN] = CLOUDABI_EAGAIN,
46 [EALREADY] = CLOUDABI_EALREADY,
47 [EBADF] = CLOUDABI_EBADF,
48 [EBADMSG] = CLOUDABI_EBADMSG,
49 [EBUSY] = CLOUDABI_EBUSY,
50 [ECANCELED] = CLOUDABI_ECANCELED,
51 [ECHILD] = CLOUDABI_ECHILD,
52 [ECONNABORTED] = CLOUDABI_ECONNABORTED,
53 [ECONNREFUSED] = CLOUDABI_ECONNREFUSED,
54 [ECONNRESET] = CLOUDABI_ECONNRESET,
55 [EDEADLK] = CLOUDABI_EDEADLK,
56 [EDESTADDRREQ] = CLOUDABI_EDESTADDRREQ,
57 [EDOM] = CLOUDABI_EDOM,
58 [EDQUOT] = CLOUDABI_EDQUOT,
59 [EEXIST] = CLOUDABI_EEXIST,
60 [EFAULT] = CLOUDABI_EFAULT,
61 [EFBIG] = CLOUDABI_EFBIG,
62 [EHOSTUNREACH] = CLOUDABI_EHOSTUNREACH,
63 [EIDRM] = CLOUDABI_EIDRM,
64 [EILSEQ] = CLOUDABI_EILSEQ,
65 [EINPROGRESS] = CLOUDABI_EINPROGRESS,
66 [EINTEGRITY] = CLOUDABI_EINVAL,
67 [EINTR] = CLOUDABI_EINTR,
68 [EINVAL] = CLOUDABI_EINVAL,
70 [EISCONN] = CLOUDABI_EISCONN,
71 [EISDIR] = CLOUDABI_EISDIR,
72 [ELOOP] = CLOUDABI_ELOOP,
73 [EMFILE] = CLOUDABI_EMFILE,
74 [EMLINK] = CLOUDABI_EMLINK,
75 [EMSGSIZE] = CLOUDABI_EMSGSIZE,
76 [EMULTIHOP] = CLOUDABI_EMULTIHOP,
77 [ENAMETOOLONG] = CLOUDABI_ENAMETOOLONG,
78 [ENETDOWN] = CLOUDABI_ENETDOWN,
79 [ENETRESET] = CLOUDABI_ENETRESET,
80 [ENETUNREACH] = CLOUDABI_ENETUNREACH,
81 [ENFILE] = CLOUDABI_ENFILE,
82 [ENOBUFS] = CLOUDABI_ENOBUFS,
83 [ENODEV] = CLOUDABI_ENODEV,
84 [ENOENT] = CLOUDABI_ENOENT,
85 [ENOEXEC] = CLOUDABI_ENOEXEC,
86 [ENOLCK] = CLOUDABI_ENOLCK,
87 [ENOLINK] = CLOUDABI_ENOLINK,
88 [ENOMEM] = CLOUDABI_ENOMEM,
89 [ENOMSG] = CLOUDABI_ENOMSG,
90 [ENOPROTOOPT] = CLOUDABI_ENOPROTOOPT,
91 [ENOSPC] = CLOUDABI_ENOSPC,
92 [ENOSYS] = CLOUDABI_ENOSYS,
93 [ENOTCONN] = CLOUDABI_ENOTCONN,
94 [ENOTDIR] = CLOUDABI_ENOTDIR,
95 [ENOTEMPTY] = CLOUDABI_ENOTEMPTY,
96 [ENOTRECOVERABLE] = CLOUDABI_ENOTRECOVERABLE,
97 [ENOTSOCK] = CLOUDABI_ENOTSOCK,
98 [ENOTSUP] = CLOUDABI_ENOTSUP,
99 [ENOTTY] = CLOUDABI_ENOTTY,
100 [ENXIO] = CLOUDABI_ENXIO,
101 [EOVERFLOW] = CLOUDABI_EOVERFLOW,
102 [EOWNERDEAD] = CLOUDABI_EOWNERDEAD,
103 [EPERM] = CLOUDABI_EPERM,
104 [EPIPE] = CLOUDABI_EPIPE,
105 [EPROTO] = CLOUDABI_EPROTO,
106 [EPROTONOSUPPORT] = CLOUDABI_EPROTONOSUPPORT,
107 [EPROTOTYPE] = CLOUDABI_EPROTOTYPE,
108 [ERANGE] = CLOUDABI_ERANGE,
109 [EROFS] = CLOUDABI_EROFS,
110 [ESPIPE] = CLOUDABI_ESPIPE,
111 [ESRCH] = CLOUDABI_ESRCH,
112 [ESTALE] = CLOUDABI_ESTALE,
113 [ETIMEDOUT] = CLOUDABI_ETIMEDOUT,
114 [ETXTBSY] = CLOUDABI_ETXTBSY,
115 [EXDEV] = CLOUDABI_EXDEV,
116 [ENOTCAPABLE] = CLOUDABI_ENOTCAPABLE,
119 /* Unknown error: fall back to returning ENOSYS. */
120 if (error < 0 || error >= nitems(table) || table[error] == 0)
121 return (error == 0 ? 0 : CLOUDABI_ENOSYS);
122 return (table[error]);