lua: add support for loading gzip compressed source files, bump package revision
SVN-Revision: 15108
This commit is contained in:
		| @@ -1,5 +1,5 @@ | ||||
| #  | ||||
| # Copyright (C) 2006-2008 OpenWrt.org | ||||
| # Copyright (C) 2006-2009 OpenWrt.org | ||||
| # | ||||
| # This is free software, licensed under the GNU General Public License v2. | ||||
| # See /LICENSE for more information. | ||||
| @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk | ||||
|  | ||||
| PKG_NAME:=lua | ||||
| PKG_VERSION:=5.1.4 | ||||
| PKG_RELEASE:=3 | ||||
| PKG_RELEASE:=4 | ||||
|  | ||||
| PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz | ||||
| PKG_SOURCE_URL:=http://www.lua.org/ftp/ \ | ||||
|   | ||||
							
								
								
									
										134
									
								
								package/lua/patches-host/040-gzip-source-loader.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								package/lua/patches-host/040-gzip-source-loader.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
| + | ||||
|  /* }================================================================== */ | ||||
|   | ||||
|   | ||||
							
								
								
									
										134
									
								
								package/lua/patches/040-gzip-source-loader.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								package/lua/patches/040-gzip-source-loader.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
| + | ||||
|  /* }================================================================== */ | ||||
|   | ||||
|   | ||||
| @@ -6,8 +6,8 @@ Index: lua-5.1.4/src/Makefile | ||||
|  AR= ar rcu | ||||
|  RANLIB= ranlib | ||||
|  RM= rm -f | ||||
| -LIBS= -lm $(MYLIBS) | ||||
| +LIBS= -lm -lcrypt $(MYLIBS) | ||||
| -LIBS= -lm -lz $(MYLIBS) | ||||
| +LIBS= -lm -lz -lcrypt $(MYLIBS) | ||||
|   | ||||
|  MYCFLAGS= | ||||
|  MYLDFLAGS= | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jo-Philipp Wich
					Jo-Philipp Wich