summaryrefslogtreecommitdiff
path: root/stand/liblua/lerrno.c
diff options
context:
space:
mode:
authorConrad Meyer <cem@FreeBSD.org>2018-02-20 19:39:48 +0000
committerConrad Meyer <cem@FreeBSD.org>2018-02-20 19:39:48 +0000
commitf91f3926e0e2e9061700d5f8037c2fb4eb009e78 (patch)
tree9d3ca517616c0cee8dcf8321d26da36f6aef700a /stand/liblua/lerrno.c
parentc1ab36f54de61baa5afb53b4e4d87a0553a035e0 (diff)
downloadsrc-test2-f91f3926e0e2e9061700d5f8037c2fb4eb009e78.tar.gz
src-test2-f91f3926e0e2e9061700d5f8037c2fb4eb009e78.zip
Notes
Diffstat (limited to 'stand/liblua/lerrno.c')
-rw-r--r--stand/liblua/lerrno.c180
1 files changed, 180 insertions, 0 deletions
diff --git a/stand/liblua/lerrno.c b/stand/liblua/lerrno.c
new file mode 100644
index 000000000000..efa73aed5007
--- /dev/null
+++ b/stand/liblua/lerrno.c
@@ -0,0 +1,180 @@
+/*-
+ * Copyright (c) 2018 Conrad Meyer <cem@FreeBSD.org>
+ * 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#define _WANT_KERNEL_ERRNO 1
+#include <errno.h>
+
+#include <lua.h>
+#include "lauxlib.h"
+#include "lerrno.h"
+
+#ifndef nitems
+#define nitems(x) (sizeof((x)) / sizeof((x)[0]))
+#endif
+
+/*
+ * Populated with:
+ * $ egrep "^#define.E" sys/sys/errno.h | \
+ * awk '{ print "\tENTRY(" $2 ")," }' >> lerrno.c
+ */
+#define ENTRY(name) { #name, name }
+static const struct err_name_number {
+ const char *err_name;
+ int err_num;
+} errnoconstants[] = {
+ ENTRY(EPERM),
+ ENTRY(ENOENT),
+ ENTRY(ESRCH),
+ ENTRY(EINTR),
+ ENTRY(EIO),
+ ENTRY(ENXIO),
+ ENTRY(E2BIG),
+ ENTRY(ENOEXEC),
+ ENTRY(EBADF),
+ ENTRY(ECHILD),
+ ENTRY(EDEADLK),
+ ENTRY(ENOMEM),
+ ENTRY(EACCES),
+ ENTRY(EFAULT),
+ ENTRY(ENOTBLK),
+ ENTRY(EBUSY),
+ ENTRY(EEXIST),
+ ENTRY(EXDEV),
+ ENTRY(ENODEV),
+ ENTRY(ENOTDIR),
+ ENTRY(EISDIR),
+ ENTRY(EINVAL),
+ ENTRY(ENFILE),
+ ENTRY(EMFILE),
+ ENTRY(ENOTTY),
+ ENTRY(ETXTBSY),
+ ENTRY(EFBIG),
+ ENTRY(ENOSPC),
+ ENTRY(ESPIPE),
+ ENTRY(EROFS),
+ ENTRY(EMLINK),
+ ENTRY(EPIPE),
+ ENTRY(EDOM),
+ ENTRY(ERANGE),
+ ENTRY(EAGAIN),
+ ENTRY(EWOULDBLOCK),
+ ENTRY(EINPROGRESS),
+ ENTRY(EALREADY),
+ ENTRY(ENOTSOCK),
+ ENTRY(EDESTADDRREQ),
+ ENTRY(EMSGSIZE),
+ ENTRY(EPROTOTYPE),
+ ENTRY(ENOPROTOOPT),
+ ENTRY(EPROTONOSUPPORT),
+ ENTRY(ESOCKTNOSUPPORT),
+ ENTRY(EOPNOTSUPP),
+ ENTRY(ENOTSUP),
+ ENTRY(EPFNOSUPPORT),
+ ENTRY(EAFNOSUPPORT),
+ ENTRY(EADDRINUSE),
+ ENTRY(EADDRNOTAVAIL),
+ ENTRY(ENETDOWN),
+ ENTRY(ENETUNREACH),
+ ENTRY(ENETRESET),
+ ENTRY(ECONNABORTED),
+ ENTRY(ECONNRESET),
+ ENTRY(ENOBUFS),
+ ENTRY(EISCONN),
+ ENTRY(ENOTCONN),
+ ENTRY(ESHUTDOWN),
+ ENTRY(ETOOMANYREFS),
+ ENTRY(ETIMEDOUT),
+ ENTRY(ECONNREFUSED),
+ ENTRY(ELOOP),
+ ENTRY(ENAMETOOLONG),
+ ENTRY(EHOSTDOWN),
+ ENTRY(EHOSTUNREACH),
+ ENTRY(ENOTEMPTY),
+ ENTRY(EPROCLIM),
+ ENTRY(EUSERS),
+ ENTRY(EDQUOT),
+ ENTRY(ESTALE),
+ ENTRY(EREMOTE),
+ ENTRY(EBADRPC),
+ ENTRY(ERPCMISMATCH),
+ ENTRY(EPROGUNAVAIL),
+ ENTRY(EPROGMISMATCH),
+ ENTRY(EPROCUNAVAIL),
+ ENTRY(ENOLCK),
+ ENTRY(ENOSYS),
+ ENTRY(EFTYPE),
+ ENTRY(EAUTH),
+ ENTRY(ENEEDAUTH),
+ ENTRY(EIDRM),
+ ENTRY(ENOMSG),
+ ENTRY(EOVERFLOW),
+ ENTRY(ECANCELED),
+ ENTRY(EILSEQ),
+ ENTRY(ENOATTR),
+ ENTRY(EDOOFUS),
+ ENTRY(EBADMSG),
+ ENTRY(EMULTIHOP),
+ ENTRY(ENOLINK),
+ ENTRY(EPROTO),
+ ENTRY(ENOTCAPABLE),
+ ENTRY(ECAPMODE),
+ ENTRY(ENOTRECOVERABLE),
+ ENTRY(EOWNERDEAD),
+ ENTRY(ELAST),
+ ENTRY(ERESTART),
+ ENTRY(EJUSTRETURN),
+ ENTRY(ENOIOCTL),
+ ENTRY(EDIRIOCTL),
+ ENTRY(ERELOOKUP),
+};
+#undef ENTRY
+
+static void
+lerrno_register(lua_State *L)
+{
+ size_t i;
+
+ for (i = 0; i < nitems(errnoconstants); i++) {
+ lua_pushinteger(L, errnoconstants[i].err_num);
+ lua_setfield(L, -2, errnoconstants[i].err_name);
+ }
+}
+
+static const struct luaL_Reg errnolib[] = {
+ /* Extra bogus entry required by luaL_newlib API */
+ { NULL, NULL },
+};
+
+int
+luaopen_errno(lua_State *L)
+{
+ luaL_newlib(L, errnolib);
+ lerrno_register(L);
+ return 1;
+}