loader.lua: Expose errno table to lua

Reviewed by:	kevans
Sponsored by:	Dell EMC Isilon
Differential Revision:	https://reviews.freebsd.org/D14454
This commit is contained in:
cem 2018-02-20 19:39:48 +00:00
parent b945f29eeb
commit 59b8107947
4 changed files with 218 additions and 2 deletions

View File

@ -39,8 +39,10 @@ __FBSDID("$FreeBSD$");
#include <ldebug.h> #include <ldebug.h>
#include <lauxlib.h> #include <lauxlib.h>
#include <lualib.h> #include <lualib.h>
#include <lutils.h>
#include <lerrno.h>
#include <lfs.h> #include <lfs.h>
#include <lutils.h>
struct interp_lua_softc { struct interp_lua_softc {
lua_State *luap; lua_State *luap;
@ -86,6 +88,7 @@ static const luaL_Reg loadedlibs[] = {
// {LUA_MATHLIBNAME, luaopen_math}, // {LUA_MATHLIBNAME, luaopen_math},
// {LUA_UTF8LIBNAME, luaopen_utf8}, // {LUA_UTF8LIBNAME, luaopen_utf8},
// {LUA_DBLIBNAME, luaopen_debug}, // {LUA_DBLIBNAME, luaopen_debug},
{"errno", luaopen_errno},
{"io", luaopen_io}, {"io", luaopen_io},
{"lfs", luaopen_lfs}, {"lfs", luaopen_lfs},
{"loader", luaopen_loader}, {"loader", luaopen_loader},

View File

@ -21,7 +21,7 @@ SRCS+= lauxlib.c lbaselib.c lstrlib.c loadlib.c
#SRCS+= lbitlib.c liolib.c lmathlib.c loslib.c ltablib.c #SRCS+= lbitlib.c liolib.c lmathlib.c loslib.c ltablib.c
# Our utilities. # Our utilities.
SRCS+= lfs.c lstd.c lutils.c SRCS+= lerrno.c lfs.c lstd.c lutils.c
WARNS= 3 WARNS= 3

180
stand/liblua/lerrno.c Normal file
View File

@ -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;
}

33
stand/liblua/lerrno.h Normal file
View File

@ -0,0 +1,33 @@
/*-
* 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.
*
* $FreeBSD$
*/
#pragma once
#include <lua.h>
int luaopen_errno(lua_State *L);