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$"); 28285641Sed 29285641Sed#include <sys/param.h> 30285641Sed 31297247Sed#include <contrib/cloudabi/cloudabi_types_common.h> 32297247Sed 33285641Sed#include <compat/cloudabi/cloudabi_util.h> 34285641Sed 35285641Sed/* Converts a FreeBSD errno to a CloudABI errno. */ 36285641Sedcloudabi_errno_t 37285641Sedcloudabi_convert_errno(int error) 38285641Sed{ 39285641Sed static const int table[] = { 40285641Sed [E2BIG] = CLOUDABI_E2BIG, 41285641Sed [EACCES] = CLOUDABI_EACCES, 42285641Sed [EADDRINUSE] = CLOUDABI_EADDRINUSE, 43285641Sed [EADDRNOTAVAIL] = CLOUDABI_EADDRNOTAVAIL, 44285641Sed [EAFNOSUPPORT] = CLOUDABI_EAFNOSUPPORT, 45285641Sed [EAGAIN] = CLOUDABI_EAGAIN, 46285641Sed [EALREADY] = CLOUDABI_EALREADY, 47285641Sed [EBADF] = CLOUDABI_EBADF, 48285641Sed [EBADMSG] = CLOUDABI_EBADMSG, 49285641Sed [EBUSY] = CLOUDABI_EBUSY, 50285641Sed [ECANCELED] = CLOUDABI_ECANCELED, 51285641Sed [ECHILD] = CLOUDABI_ECHILD, 52285641Sed [ECONNABORTED] = CLOUDABI_ECONNABORTED, 53285641Sed [ECONNREFUSED] = CLOUDABI_ECONNREFUSED, 54285641Sed [ECONNRESET] = CLOUDABI_ECONNRESET, 55285641Sed [EDEADLK] = CLOUDABI_EDEADLK, 56285641Sed [EDESTADDRREQ] = CLOUDABI_EDESTADDRREQ, 57285641Sed [EDOM] = CLOUDABI_EDOM, 58285641Sed [EDQUOT] = CLOUDABI_EDQUOT, 59285641Sed [EEXIST] = CLOUDABI_EEXIST, 60285641Sed [EFAULT] = CLOUDABI_EFAULT, 61285641Sed [EFBIG] = CLOUDABI_EFBIG, 62285641Sed [EHOSTUNREACH] = CLOUDABI_EHOSTUNREACH, 63285641Sed [EIDRM] = CLOUDABI_EIDRM, 64285641Sed [EILSEQ] = CLOUDABI_EILSEQ, 65285641Sed [EINPROGRESS] = CLOUDABI_EINPROGRESS, 66285641Sed [EINTR] = CLOUDABI_EINTR, 67285641Sed [EINVAL] = CLOUDABI_EINVAL, 68285641Sed [EIO] = CLOUDABI_EIO, 69285641Sed [EISCONN] = CLOUDABI_EISCONN, 70285641Sed [EISDIR] = CLOUDABI_EISDIR, 71285641Sed [ELOOP] = CLOUDABI_ELOOP, 72285641Sed [EMFILE] = CLOUDABI_EMFILE, 73285641Sed [EMLINK] = CLOUDABI_EMLINK, 74285641Sed [EMSGSIZE] = CLOUDABI_EMSGSIZE, 75285641Sed [EMULTIHOP] = CLOUDABI_EMULTIHOP, 76285641Sed [ENAMETOOLONG] = CLOUDABI_ENAMETOOLONG, 77285641Sed [ENETDOWN] = CLOUDABI_ENETDOWN, 78285641Sed [ENETRESET] = CLOUDABI_ENETRESET, 79285641Sed [ENETUNREACH] = CLOUDABI_ENETUNREACH, 80285641Sed [ENFILE] = CLOUDABI_ENFILE, 81285641Sed [ENOBUFS] = CLOUDABI_ENOBUFS, 82285641Sed [ENODEV] = CLOUDABI_ENODEV, 83285641Sed [ENOENT] = CLOUDABI_ENOENT, 84285641Sed [ENOEXEC] = CLOUDABI_ENOEXEC, 85285641Sed [ENOLCK] = CLOUDABI_ENOLCK, 86285641Sed [ENOLINK] = CLOUDABI_ENOLINK, 87285641Sed [ENOMEM] = CLOUDABI_ENOMEM, 88285641Sed [ENOMSG] = CLOUDABI_ENOMSG, 89285641Sed [ENOPROTOOPT] = CLOUDABI_ENOPROTOOPT, 90285641Sed [ENOSPC] = CLOUDABI_ENOSPC, 91285641Sed [ENOSYS] = CLOUDABI_ENOSYS, 92285641Sed [ENOTCONN] = CLOUDABI_ENOTCONN, 93285641Sed [ENOTDIR] = CLOUDABI_ENOTDIR, 94285641Sed [ENOTEMPTY] = CLOUDABI_ENOTEMPTY, 95285641Sed [ENOTRECOVERABLE] = CLOUDABI_ENOTRECOVERABLE, 96285641Sed [ENOTSOCK] = CLOUDABI_ENOTSOCK, 97285641Sed [ENOTSUP] = CLOUDABI_ENOTSUP, 98285641Sed [ENOTTY] = CLOUDABI_ENOTTY, 99285641Sed [ENXIO] = CLOUDABI_ENXIO, 100285641Sed [EOVERFLOW] = CLOUDABI_EOVERFLOW, 101285641Sed [EOWNERDEAD] = CLOUDABI_EOWNERDEAD, 102285641Sed [EPERM] = CLOUDABI_EPERM, 103285641Sed [EPIPE] = CLOUDABI_EPIPE, 104285641Sed [EPROTO] = CLOUDABI_EPROTO, 105285641Sed [EPROTONOSUPPORT] = CLOUDABI_EPROTONOSUPPORT, 106285641Sed [EPROTOTYPE] = CLOUDABI_EPROTOTYPE, 107285641Sed [ERANGE] = CLOUDABI_ERANGE, 108285641Sed [EROFS] = CLOUDABI_EROFS, 109285641Sed [ESPIPE] = CLOUDABI_ESPIPE, 110285641Sed [ESRCH] = CLOUDABI_ESRCH, 111285641Sed [ESTALE] = CLOUDABI_ESTALE, 112285641Sed [ETIMEDOUT] = CLOUDABI_ETIMEDOUT, 113285641Sed [ETXTBSY] = CLOUDABI_ETXTBSY, 114285641Sed [EXDEV] = CLOUDABI_EXDEV, 115285641Sed [ENOTCAPABLE] = CLOUDABI_ENOTCAPABLE, 116285641Sed }; 117285641Sed 118285641Sed /* Unknown error: fall back to returning ENOSYS. */ 119285641Sed if (error < 0 || error >= nitems(table) || table[error] == 0) 120285641Sed return (error == 0 ? 0 : CLOUDABI_ENOSYS); 121285641Sed return (table[error]); 122285641Sed} 123