diff options
Diffstat (limited to 'package/lua/patches-host/040-gzip-source-loader.patch')
-rw-r--r-- | package/lua/patches-host/040-gzip-source-loader.patch | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/package/lua/patches-host/040-gzip-source-loader.patch b/package/lua/patches-host/040-gzip-source-loader.patch new file mode 100644 index 0000000000..6fbafa206d --- /dev/null +++ b/package/lua/patches-host/040-gzip-source-loader.patch @@ -0,0 +1,134 @@ +diff -ur lua-5.1.4.orig/src/Makefile lua-5.1.4/src/Makefile +--- lua-5.1.4.orig/src/Makefile 2009-04-04 23:06:04.000000000 +0200 ++++ lua-5.1.4/src/Makefile 2009-04-04 23:06:15.000000000 +0200 +@@ -12,7 +12,7 @@ + AR= ar rcu + RANLIB= ranlib + RM= rm -f +-LIBS= -lm $(MYLIBS) ++LIBS= -lm -lz $(MYLIBS) + + MYCFLAGS= + MYLDFLAGS= +diff -ur lua-5.1.4.orig/src/lauxlib.c lua-5.1.4/src/lauxlib.c +--- lua-5.1.4.orig/src/lauxlib.c 2009-04-04 23:06:04.000000000 +0200 ++++ lua-5.1.4/src/lauxlib.c 2009-04-05 00:03:33.000000000 +0200 +@@ -11,6 +11,7 @@ + #include <stdio.h> + #include <stdlib.h> + #include <string.h> ++#include <zlib.h> + + + /* This file uses only the official API of Lua. +@@ -535,6 +536,12 @@ + char buff[LUAL_BUFFERSIZE]; + } LoadF; + ++typedef struct LoadGZ { ++ int first_chunk; ++ gzFile f; ++ char buffer[LUAL_GZLDBUFFER]; ++} LoadGZ; ++ + + static const char *getF (lua_State *L, void *ud, size_t *size) { + LoadF *lf = (LoadF *)ud; +@@ -550,6 +557,26 @@ + } + + ++static const char *getGZ (lua_State *L, void *ud, size_t *size) { ++ LoadGZ *lf = (LoadGZ *)ud; ++ char *sp = 0; ++ (void)L; ++ if (gzeof(lf->f)) return NULL; ++ *size = gzread(lf->f, lf->buffer, sizeof(lf->buffer)); ++ if (*size > 0) { ++ if (lf->first_chunk) { ++ lf->first_chunk = 0; ++ if (strstr(lf->buffer, "#!") && (sp=strstr(lf->buffer, "\n")) != NULL) { ++ *size -= ((uint)sp - (uint)lf->buffer); ++ return sp; ++ } ++ } ++ return lf->buffer; ++ } ++ return NULL; ++} ++ ++ + static int errfile (lua_State *L, const char *what, int fnameindex) { + const char *serr = strerror(errno); + const char *filename = lua_tostring(L, fnameindex) + 1; +@@ -560,6 +587,31 @@ + + + LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) { ++ if ((filename != NULL) && strstr(filename, ".lua.gz")) { ++ return luaL_loadfile_gzip(L, filename); ++ } ++ else { ++ return luaL_loadfile_plain(L, filename); ++ } ++} ++ ++ ++LUALIB_API int luaL_loadfile_gzip (lua_State *L, const char *filename) { ++ LoadGZ gzf; ++ int status; ++ int fnameindex = lua_gettop(L) + 1; /* index of filename on the stack */ ++ lua_pushfstring(L, "@%s", filename); ++ gzf.f = gzopen(filename, "r"); ++ gzf.first_chunk = 1; ++ if (gzf.f == Z_NULL) return errfile(L, "open", fnameindex); ++ status = lua_load(L, getGZ, &gzf, lua_tostring(L, -1)); ++ (void)gzclose(gzf.f); ++ lua_remove(L, fnameindex); ++ return status; ++} ++ ++ ++LUALIB_API int luaL_loadfile_plain (lua_State *L, const char *filename) { + LoadF lf; + int status, readstatus; + int c; +diff -ur lua-5.1.4.orig/src/lauxlib.h lua-5.1.4/src/lauxlib.h +--- lua-5.1.4.orig/src/lauxlib.h 2009-04-04 23:06:04.000000000 +0200 ++++ lua-5.1.4/src/lauxlib.h 2009-04-04 23:06:15.000000000 +0200 +@@ -81,6 +81,8 @@ + LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); + + LUALIB_API int (luaL_loadfile) (lua_State *L, const char *filename); ++LUALIB_API int (luaL_loadfile_gzip) (lua_State *L, const char *filename); ++LUALIB_API int (luaL_loadfile_plain) (lua_State *L, const char *filename); + LUALIB_API int (luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, + const char *name); + LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); +diff -ur lua-5.1.4.orig/src/luaconf.h lua-5.1.4/src/luaconf.h +--- lua-5.1.4.orig/src/luaconf.h 2009-04-04 23:06:04.000000000 +0200 ++++ lua-5.1.4/src/luaconf.h 2009-04-04 23:27:20.000000000 +0200 +@@ -101,7 +101,9 @@ + #define LUA_CDIR LUA_ROOT "lib/lua/5.1/" + #define LUA_PATH_DEFAULT \ + "./?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ +- LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua" ++ LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua;" \ ++ "./?.lua.gz;" LUA_LDIR"?.lua.gz;" LUA_LDIR"?/init.lua.gz;" \ ++ LUA_CDIR"?.lua.gz;" LUA_CDIR"?/init.lua.gz" + #define LUA_CPATH_DEFAULT \ + "./?.so;" LUA_CDIR"?.so;" LUA_CDIR"loadall.so" + #endif +@@ -506,6 +508,12 @@ + */ + #define LUAL_BUFFERSIZE BUFSIZ + ++ ++/* ++@@ LUAL_GZLDBUFFER is the buffer size used by the gzip source loader. ++*/ ++#define LUAL_GZLDBUFFER 8192 ++ + /* }================================================================== */ + + |