cloudabi_errno.c revision 285641
1285641Sed/*-
2285641Sed * Copyright (c) 2015 Nuxi, https://nuxi.nl/
3285641Sed *
4285641Sed * Redistribution and use in source and binary forms, with or without
5285641Sed * modification, are permitted provided that the following conditions
6285641Sed * are met:
7285641Sed * 1. Redistributions of source code must retain the above copyright
8285641Sed *    notice, this list of conditions and the following disclaimer.
9285641Sed * 2. Redistributions in binary form must reproduce the above copyright
10285641Sed *    notice, this list of conditions and the following disclaimer in the
11285641Sed *    documentation and/or other materials provided with the distribution.
12285641Sed *
13285641Sed * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14285641Sed * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15285641Sed * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16285641Sed * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17285641Sed * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18285641Sed * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19285641Sed * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20285641Sed * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21285641Sed * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22285641Sed * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23285641Sed * SUCH DAMAGE.
24285641Sed */
25285641Sed
26285641Sed#include <sys/cdefs.h>
27285641Sed__FBSDID("$FreeBSD: head/sys/compat/cloudabi/cloudabi_errno.c 285641 2015-07-16 18:24:06Z ed $");
28285641Sed
29285641Sed#include <sys/param.h>
30285641Sed
31285641Sed#include <compat/cloudabi/cloudabi_syscalldefs.h>
32285641Sed#include <compat/cloudabi/cloudabi_util.h>
33285641Sed
34285641Sed/* Converts a FreeBSD errno to a CloudABI errno. */
35285641Sedcloudabi_errno_t
36285641Sedcloudabi_convert_errno(int error)
37285641Sed{
38285641Sed	static const int table[] = {
39285641Sed		[E2BIG]			= CLOUDABI_E2BIG,
40285641Sed		[EACCES]		= CLOUDABI_EACCES,
41285641Sed		[EADDRINUSE]		= CLOUDABI_EADDRINUSE,
42285641Sed		[EADDRNOTAVAIL]		= CLOUDABI_EADDRNOTAVAIL,
43285641Sed		[EAFNOSUPPORT]		= CLOUDABI_EAFNOSUPPORT,
44285641Sed		[EAGAIN]		= CLOUDABI_EAGAIN,
45285641Sed		[EALREADY]		= CLOUDABI_EALREADY,
46285641Sed		[EBADF]			= CLOUDABI_EBADF,
47285641Sed		[EBADMSG]		= CLOUDABI_EBADMSG,
48285641Sed		[EBUSY]			= CLOUDABI_EBUSY,
49285641Sed		[ECANCELED]		= CLOUDABI_ECANCELED,
50285641Sed		[ECHILD]		= CLOUDABI_ECHILD,
51285641Sed		[ECONNABORTED]		= CLOUDABI_ECONNABORTED,
52285641Sed		[ECONNREFUSED]		= CLOUDABI_ECONNREFUSED,
53285641Sed		[ECONNRESET]		= CLOUDABI_ECONNRESET,
54285641Sed		[EDEADLK]		= CLOUDABI_EDEADLK,
55285641Sed		[EDESTADDRREQ]		= CLOUDABI_EDESTADDRREQ,
56285641Sed		[EDOM]			= CLOUDABI_EDOM,
57285641Sed		[EDQUOT]		= CLOUDABI_EDQUOT,
58285641Sed		[EEXIST]		= CLOUDABI_EEXIST,
59285641Sed		[EFAULT]		= CLOUDABI_EFAULT,
60285641Sed		[EFBIG]			= CLOUDABI_EFBIG,
61285641Sed		[EHOSTUNREACH]		= CLOUDABI_EHOSTUNREACH,
62285641Sed		[EIDRM]			= CLOUDABI_EIDRM,
63285641Sed		[EILSEQ]		= CLOUDABI_EILSEQ,
64285641Sed		[EINPROGRESS]		= CLOUDABI_EINPROGRESS,
65285641Sed		[EINTR]			= CLOUDABI_EINTR,
66285641Sed		[EINVAL]		= CLOUDABI_EINVAL,
67285641Sed		[EIO]			= CLOUDABI_EIO,
68285641Sed		[EISCONN]		= CLOUDABI_EISCONN,
69285641Sed		[EISDIR]		= CLOUDABI_EISDIR,
70285641Sed		[ELOOP]			= CLOUDABI_ELOOP,
71285641Sed		[EMFILE]		= CLOUDABI_EMFILE,
72285641Sed		[EMLINK]		= CLOUDABI_EMLINK,
73285641Sed		[EMSGSIZE]		= CLOUDABI_EMSGSIZE,
74285641Sed		[EMULTIHOP]		= CLOUDABI_EMULTIHOP,
75285641Sed		[ENAMETOOLONG]		= CLOUDABI_ENAMETOOLONG,
76285641Sed		[ENETDOWN]		= CLOUDABI_ENETDOWN,
77285641Sed		[ENETRESET]		= CLOUDABI_ENETRESET,
78285641Sed		[ENETUNREACH]		= CLOUDABI_ENETUNREACH,
79285641Sed		[ENFILE]		= CLOUDABI_ENFILE,
80285641Sed		[ENOBUFS]		= CLOUDABI_ENOBUFS,
81285641Sed		[ENODEV]		= CLOUDABI_ENODEV,
82285641Sed		[ENOENT]		= CLOUDABI_ENOENT,
83285641Sed		[ENOEXEC]		= CLOUDABI_ENOEXEC,
84285641Sed		[ENOLCK]		= CLOUDABI_ENOLCK,
85285641Sed		[ENOLINK]		= CLOUDABI_ENOLINK,
86285641Sed		[ENOMEM]		= CLOUDABI_ENOMEM,
87285641Sed		[ENOMSG]		= CLOUDABI_ENOMSG,
88285641Sed		[ENOPROTOOPT]		= CLOUDABI_ENOPROTOOPT,
89285641Sed		[ENOSPC]		= CLOUDABI_ENOSPC,
90285641Sed		[ENOSYS]		= CLOUDABI_ENOSYS,
91285641Sed		[ENOTCONN]		= CLOUDABI_ENOTCONN,
92285641Sed		[ENOTDIR]		= CLOUDABI_ENOTDIR,
93285641Sed		[ENOTEMPTY]		= CLOUDABI_ENOTEMPTY,
94285641Sed		[ENOTRECOVERABLE]	= CLOUDABI_ENOTRECOVERABLE,
95285641Sed		[ENOTSOCK]		= CLOUDABI_ENOTSOCK,
96285641Sed		[ENOTSUP]		= CLOUDABI_ENOTSUP,
97285641Sed		[ENOTTY]		= CLOUDABI_ENOTTY,
98285641Sed		[ENXIO]			= CLOUDABI_ENXIO,
99285641Sed		[EOVERFLOW]		= CLOUDABI_EOVERFLOW,
100285641Sed		[EOWNERDEAD]		= CLOUDABI_EOWNERDEAD,
101285641Sed		[EPERM]			= CLOUDABI_EPERM,
102285641Sed		[EPIPE]			= CLOUDABI_EPIPE,
103285641Sed		[EPROTO]		= CLOUDABI_EPROTO,
104285641Sed		[EPROTONOSUPPORT]	= CLOUDABI_EPROTONOSUPPORT,
105285641Sed		[EPROTOTYPE]		= CLOUDABI_EPROTOTYPE,
106285641Sed		[ERANGE]		= CLOUDABI_ERANGE,
107285641Sed		[EROFS]			= CLOUDABI_EROFS,
108285641Sed		[ESPIPE]		= CLOUDABI_ESPIPE,
109285641Sed		[ESRCH]			= CLOUDABI_ESRCH,
110285641Sed		[ESTALE]		= CLOUDABI_ESTALE,
111285641Sed		[ETIMEDOUT]		= CLOUDABI_ETIMEDOUT,
112285641Sed		[ETXTBSY]		= CLOUDABI_ETXTBSY,
113285641Sed		[EXDEV]			= CLOUDABI_EXDEV,
114285641Sed		[ENOTCAPABLE]		= CLOUDABI_ENOTCAPABLE,
115285641Sed	};
116285641Sed
117285641Sed	/* Unknown error: fall back to returning ENOSYS. */
118285641Sed	if (error < 0 || error >= nitems(table) || table[error] == 0)
119285641Sed		return (error == 0 ? 0 : CLOUDABI_ENOSYS);
120285641Sed	return (table[error]);
121285641Sed}
122