From 55b40a17cdf3c750ba36cc9339e046b8add62c38 Mon Sep 17 00:00:00 2001 From: Jeremy Baxter Date: Wed, 27 Dec 2023 23:16:49 +0000 Subject: [PATCH] add Lua 5.4.6 patches --- external/lua/Makefile | 6 +- external/lua/liolib.c | 25 ++++++++ external/lua/loslib.c | 27 +++++++++ .../lua/patches/lua-5.4.6-iolib-istty.diff | 57 ++++++++++++++++++ external/lua/patches/lua-5.4.6-makefile.diff | 18 ++++++ .../lua/patches/lua-5.4.6-oslib-hostname.diff | 58 +++++++++++++++++++ 6 files changed, 188 insertions(+), 3 deletions(-) create mode 100644 external/lua/patches/lua-5.4.6-iolib-istty.diff create mode 100644 external/lua/patches/lua-5.4.6-makefile.diff create mode 100644 external/lua/patches/lua-5.4.6-oslib-hostname.diff diff --git a/external/lua/Makefile b/external/lua/Makefile index b771196..0da195e 100644 --- a/external/lua/Makefile +++ b/external/lua/Makefile @@ -6,12 +6,12 @@ # Your platform. See PLATS for possible values. PLAT= guess -CC= gcc -std=gnu99 -CFLAGS= -O2 -Wall -Wextra -DLUA_COMPAT_5_3 $(SYSCFLAGS) $(MYCFLAGS) +CC= cc -std=c99 +CFLAGS= -O2 $(SYSCFLAGS) $(MYCFLAGS) LDFLAGS= $(SYSLDFLAGS) $(MYLDFLAGS) LIBS= -lm $(SYSLIBS) $(MYLIBS) -AR= ar rcu +AR= ar cr RANLIB= ranlib RM= rm -f UNAME= uname diff --git a/external/lua/liolib.c b/external/lua/liolib.c index b08397d..e65d5cb 100644 --- a/external/lua/liolib.c +++ b/external/lua/liolib.c @@ -4,6 +4,12 @@ ** See Copyright Notice in lua.h */ +/*** + * Input and output facilities. + * + * @module io + */ + #define liolib_c #define LUA_LIB @@ -16,6 +22,7 @@ #include #include #include +#include #include "lua.h" @@ -723,6 +730,23 @@ static int f_setvbuf (lua_State *L) { return luaL_fileresult(L, res == 0, NULL); } +/*** + * Returns whether the stream points to a valid TTY device. + * + * @function file:istty + * @usage +local f = io.open("/etc/fstab", 'r'); +-- a regular file will never be a TTY device +assert(not f:istty()) +-- stdin, stdout and stderr can often be TTYs +print(io.stdout:istty()) + */ +static int f_istty (lua_State *L) { + int fd = fileno(tofile(L)); + lua_pushboolean(L, isatty(fd)); + return 1; +} + static int io_flush (lua_State *L) { @@ -765,6 +789,7 @@ static const luaL_Reg meth[] = { {"seek", f_seek}, {"close", f_close}, {"setvbuf", f_setvbuf}, + {"istty", f_istty}, {NULL, NULL} }; diff --git a/external/lua/loslib.c b/external/lua/loslib.c index ad5a927..0de66fa 100644 --- a/external/lua/loslib.c +++ b/external/lua/loslib.c @@ -4,6 +4,12 @@ ** See Copyright Notice in lua.h */ +/*** + * Operating system related facilities. + * + * @module os + */ + #define loslib_c #define LUA_LIB @@ -14,6 +20,7 @@ #include #include #include +#include #include #include "lua.h" @@ -401,6 +408,25 @@ static int os_exit (lua_State *L) { return 0; } +#define HOST_NAME_MAX 256 /* according to POSIX */ + +/*** + * Returns the system hostname. + * + * @function hostname + * @usage local hostname = os.hostname() + */ +static int +os_hostname(lua_State *L) +{ + char buffer[HOST_NAME_MAX]; + + gethostname(buffer, HOST_NAME_MAX); /* get hostname */ + lua_pushstring(L, buffer); + + return 1; +} + static const luaL_Reg syslib[] = { {"clock", os_clock}, @@ -409,6 +435,7 @@ static const luaL_Reg syslib[] = { {"execute", os_execute}, {"exit", os_exit}, {"getenv", os_getenv}, + {"hostname", os_hostname}, {"remove", os_remove}, {"rename", os_rename}, {"setlocale", os_setlocale}, diff --git a/external/lua/patches/lua-5.4.6-iolib-istty.diff b/external/lua/patches/lua-5.4.6-iolib-istty.diff new file mode 100644 index 0000000..c1d1aed --- /dev/null +++ b/external/lua/patches/lua-5.4.6-iolib-istty.diff @@ -0,0 +1,57 @@ +--- liolib.c ++++ liolib.c +@@ -4,6 +4,12 @@ + ** See Copyright Notice in lua.h + */ + ++/*** ++ * Input and output facilities. ++ * ++ * @module io ++ */ ++ + #define liolib_c + #define LUA_LIB + +@@ -16,6 +22,7 @@ + #include + #include + #include ++#include + + #include "lua.h" + +@@ -723,8 +730,25 @@ + return luaL_fileresult(L, res == 0, NULL); + } + ++/*** ++ * Returns whether the stream points to a valid TTY device. ++ * ++ * @function file:istty ++ * @usage ++local f = io.open("/etc/fstab", 'r'); ++-- a regular file will never be a TTY device ++assert(not f:istty()) ++-- stdin, stdout and stderr can often be TTYs ++print(io.stdout:istty()) ++ */ ++static int f_istty (lua_State *L) { ++ int fd = fileno(tofile(L)); ++ lua_pushboolean(L, isatty(fd)); ++ return 1; ++} + + ++ + static int io_flush (lua_State *L) { + return luaL_fileresult(L, fflush(getiofile(L, IO_OUTPUT)) == 0, NULL); + } +@@ -765,6 +789,7 @@ + {"seek", f_seek}, + {"close", f_close}, + {"setvbuf", f_setvbuf}, ++ {"istty", f_istty}, + {NULL, NULL} + }; + diff --git a/external/lua/patches/lua-5.4.6-makefile.diff b/external/lua/patches/lua-5.4.6-makefile.diff new file mode 100644 index 0000000..c0322ca --- /dev/null +++ b/external/lua/patches/lua-5.4.6-makefile.diff @@ -0,0 +1,18 @@ +--- Makefile ++++ Makefile +@@ -6,12 +6,12 @@ + # Your platform. See PLATS for possible values. + PLAT= guess + +-CC= gcc -std=gnu99 +-CFLAGS= -O2 -Wall -Wextra -DLUA_COMPAT_5_3 $(SYSCFLAGS) $(MYCFLAGS) ++CC= cc -std=c99 ++CFLAGS= -O2 $(SYSCFLAGS) $(MYCFLAGS) + LDFLAGS= $(SYSLDFLAGS) $(MYLDFLAGS) + LIBS= -lm $(SYSLIBS) $(MYLIBS) + +-AR= ar rcu ++AR= ar cr + RANLIB= ranlib + RM= rm -f + UNAME= uname diff --git a/external/lua/patches/lua-5.4.6-oslib-hostname.diff b/external/lua/patches/lua-5.4.6-oslib-hostname.diff new file mode 100644 index 0000000..7c0ee99 --- /dev/null +++ b/external/lua/patches/lua-5.4.6-oslib-hostname.diff @@ -0,0 +1,58 @@ +--- loslib.c ++++ loslib.c +@@ -4,6 +4,12 @@ + ** See Copyright Notice in lua.h + */ + ++/*** ++ * Operating system related facilities. ++ * ++ * @module os ++ */ ++ + #define loslib_c + #define LUA_LIB + +@@ -14,6 +20,7 @@ + #include + #include + #include ++#include + #include + + #include "lua.h" +@@ -401,7 +408,26 @@ + return 0; + } + ++#define HOST_NAME_MAX 256 /* according to POSIX */ + ++/*** ++ * Returns the system hostname. ++ * ++ * @function hostname ++ * @usage local hostname = os.hostname() ++ */ ++static int ++os_hostname(lua_State *L) ++{ ++ char buffer[HOST_NAME_MAX]; ++ ++ gethostname(buffer, HOST_NAME_MAX); /* get hostname */ ++ lua_pushstring(L, buffer); ++ ++ return 1; ++} ++ ++ + static const luaL_Reg syslib[] = { + {"clock", os_clock}, + {"date", os_date}, +@@ -409,6 +435,7 @@ + {"execute", os_execute}, + {"exit", os_exit}, + {"getenv", os_getenv}, ++ {"hostname", os_hostname}, + {"remove", os_remove}, + {"rename", os_rename}, + {"setlocale", os_setlocale},