]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/compat/cloudabi/cloudabi_errno.c
Merge missed sources for lldb-specific TableGen tool.
[FreeBSD/FreeBSD.git] / sys / compat / cloudabi / cloudabi_errno.c
1 /*-
2  * Copyright (c) 2015 Nuxi, https://nuxi.nl/
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
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.
12  *
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
23  * SUCH DAMAGE.
24  */
25
26 #include <sys/cdefs.h>
27 __FBSDID("$FreeBSD$");
28
29 #include <sys/param.h>
30
31 #include <contrib/cloudabi/cloudabi_types_common.h>
32
33 #include <compat/cloudabi/cloudabi_util.h>
34
35 /* Converts a FreeBSD errno to a CloudABI errno. */
36 cloudabi_errno_t
37 cloudabi_convert_errno(int error)
38 {
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,
69                 [EIO]                   = CLOUDABI_EIO,
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,
117         };
118
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]);
123 }