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:
parent
c1ab36f54d
commit
f91f3926e0
@ -39,8 +39,10 @@ __FBSDID("$FreeBSD$");
|
||||
#include <ldebug.h>
|
||||
#include <lauxlib.h>
|
||||
#include <lualib.h>
|
||||
#include <lutils.h>
|
||||
|
||||
#include <lerrno.h>
|
||||
#include <lfs.h>
|
||||
#include <lutils.h>
|
||||
|
||||
struct interp_lua_softc {
|
||||
lua_State *luap;
|
||||
@ -86,6 +88,7 @@ static const luaL_Reg loadedlibs[] = {
|
||||
// {LUA_MATHLIBNAME, luaopen_math},
|
||||
// {LUA_UTF8LIBNAME, luaopen_utf8},
|
||||
// {LUA_DBLIBNAME, luaopen_debug},
|
||||
{"errno", luaopen_errno},
|
||||
{"io", luaopen_io},
|
||||
{"lfs", luaopen_lfs},
|
||||
{"loader", luaopen_loader},
|
||||
|
@ -21,7 +21,7 @@ SRCS+= lauxlib.c lbaselib.c lstrlib.c loadlib.c
|
||||
#SRCS+= lbitlib.c liolib.c lmathlib.c loslib.c ltablib.c
|
||||
|
||||
# Our utilities.
|
||||
SRCS+= lfs.c lstd.c lutils.c
|
||||
SRCS+= lerrno.c lfs.c lstd.c lutils.c
|
||||
|
||||
WARNS= 3
|
||||
|
||||
|
180
stand/liblua/lerrno.c
Normal file
180
stand/liblua/lerrno.c
Normal 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
33
stand/liblua/lerrno.h
Normal 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);
|
Loading…
Reference in New Issue
Block a user