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. */ 36cloudabi_errno_t 37cloudabi_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} 124