/*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright (c) 1994-1996 Søren Schmidt * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $FreeBSD$ */ /* * Linux syscalls return negative errno's, we do positive and map them * Reference: * FreeBSD: src/sys/sys/errno.h * Linux: include/uapi/asm-generic/errno-base.h * include/uapi/asm-generic/errno.h * * XXX: The "XXX" comments below should be replaced with rationale * for the errno value chosen. */ static const int linux_errtbl[ELAST + 1] = { /* [0, 9] */ [0] = -0, [EPERM] = -LINUX_EPERM, [ENOENT] = -LINUX_ENOENT, [ESRCH] = -LINUX_ESRCH, [EINTR] = -LINUX_EINTR, [EIO] = -LINUX_EIO, [ENXIO] = -LINUX_ENXIO, [E2BIG] = -LINUX_E2BIG, [ENOEXEC] = -LINUX_ENOEXEC, [EBADF] = -LINUX_EBADF, /* [10, 19] */ [ECHILD] = -LINUX_ECHILD, [EDEADLK] = -LINUX_EDEADLK, [ENOMEM] = -LINUX_ENOMEM, [EACCES] = -LINUX_EACCES, [EFAULT] = -LINUX_EFAULT, [ENOTBLK] = -LINUX_ENOTBLK, [EBUSY] = -LINUX_EBUSY, [EEXIST] = -LINUX_EEXIST, [EXDEV] = -LINUX_EXDEV, [ENODEV] = -LINUX_ENODEV, /* [20, 29] */ [ENOTDIR] = -LINUX_ENOTDIR, [EISDIR] = -LINUX_EISDIR, [EINVAL] = -LINUX_EINVAL, [ENFILE] = -LINUX_ENFILE, [EMFILE] = -LINUX_EMFILE, [ENOTTY] = -LINUX_ENOTTY, [ETXTBSY] = -LINUX_ETXTBSY, [EFBIG] = -LINUX_EFBIG, [ENOSPC] = -LINUX_ENOSPC, [ESPIPE] = -LINUX_ESPIPE, /* [30, 39] */ [EROFS] = -LINUX_EROFS, [EMLINK] = -LINUX_EMLINK, [EPIPE] = -LINUX_EPIPE, [EDOM] = -LINUX_EDOM, [ERANGE] = -LINUX_ERANGE, [EAGAIN] = -LINUX_EAGAIN, [EINPROGRESS] = -LINUX_EINPROGRESS, [EALREADY] = -LINUX_EALREADY, [ENOTSOCK] = -LINUX_ENOTSOCK, [EDESTADDRREQ] = -LINUX_EDESTADDRREQ, /* [40, 49] */ [EMSGSIZE] = -LINUX_EMSGSIZE, [EPROTOTYPE] = -LINUX_EPROTOTYPE, [ENOPROTOOPT] = -LINUX_ENOPROTOOPT, [EPROTONOSUPPORT] = -LINUX_EPROTONOTSUPPORT, [ESOCKTNOSUPPORT] = -LINUX_ESOCKNOTSUPPORT, [EOPNOTSUPP] = -LINUX_EOPNOTSUPPORT, [EPFNOSUPPORT] = -LINUX_EPFNOTSUPPORT, [EAFNOSUPPORT] = -LINUX_EAFNOTSUPPORT, [EADDRINUSE] = -LINUX_EADDRINUSE, [EADDRNOTAVAIL] = -LINUX_EADDRNOTAVAIL, /* [50, 59] */ [ENETDOWN] = -LINUX_ENETDOWN, [ENETUNREACH] = -LINUX_ENETUNREACH, [ENETRESET] = -LINUX_ENETRESET, [ECONNABORTED] = -LINUX_ECONNABORTED, [ECONNRESET] = -LINUX_ECONNRESET, [ENOBUFS] = -LINUX_ENOBUFS, [EISCONN] = -LINUX_EISCONN, [ENOTCONN] = -LINUX_ENOTCONN, [ESHUTDOWN] = -LINUX_ESHUTDOWN, [ETOOMANYREFS] = -LINUX_ETOOMANYREFS, /* [60, 69] */ [ETIMEDOUT] = -LINUX_ETIMEDOUT, [ECONNREFUSED] = -LINUX_ECONNREFUSED, [ELOOP] = -LINUX_ELOOP, [ENAMETOOLONG] = -LINUX_ENAMETOOLONG, [EHOSTDOWN] = -LINUX_EHOSTDOWN, [EHOSTUNREACH] = -LINUX_EHOSTUNREACH, [ENOTEMPTY] = -LINUX_ENOTEMPTY, [EPROCLIM] = -LINUX_EAGAIN, /* XXX */ [EUSERS] = -LINUX_EUSERS, [EDQUOT] = -LINUX_EDQUOT, /* [70, 79] */ [ESTALE] = -LINUX_ESTALE, [EREMOTE] = -LINUX_EREMOTE, [EBADRPC] = -LINUX_ENXIO, /* XXX */ [ERPCMISMATCH] = -LINUX_ENXIO, /* XXX */ [EPROGUNAVAIL] = -LINUX_ENXIO, /* XXX */ [EPROGMISMATCH] = -LINUX_ENXIO, /* XXX */ [EPROCUNAVAIL] = -LINUX_ENXIO, /* XXX */ [ENOLCK] = -LINUX_ENOLCK, [ENOSYS] = -LINUX_ENOSYS, [EFTYPE] = -LINUX_EBADF, /* XXX */ /* [80, 89] */ [EAUTH] = -LINUX_ENXIO, /* XXX */ [ENEEDAUTH] = -LINUX_ENXIO, /* XXX */ [EIDRM] = -LINUX_EIDRM, [ENOMSG] = -LINUX_ENOMSG, [EOVERFLOW] = -LINUX_EOVERFLOW, [ECANCELED] = -LINUX_ECANCELED, [EILSEQ] = -LINUX_EILSEQ, [ENOATTR] = -LINUX_ENODATA, /* XXX */ [EDOOFUS] = -LINUX_EINVAL, /* XXX */ [EBADMSG] = -LINUX_EBADMSG, /* [90, 99] */ [EMULTIHOP] = -LINUX_EMULTIHOP, [ENOLINK] = -LINUX_ENOLINK, [EPROTO] = -LINUX_EPROTO, [ENOTCAPABLE] = -LINUX_EPERM, /* XXX */ [ECAPMODE] = -LINUX_EPERM, /* XXX */ [ENOTRECOVERABLE] = -LINUX_ENOTRECOVERABLE, [EOWNERDEAD] = -LINUX_EOWNERDEAD, [EINTEGRITY] = -LINUX_EINVAL, /* XXX */ }; _Static_assert(ELAST == 97, "missing errno entries in linux_errtbl");