mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 05:24:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			137 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| 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 03:35:24.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,28 @@
 | |
|  }
 | |
|  
 | |
|  
 | |
| +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 ((lf->buffer[0] == '#') && (lf->buffer[1] == '!') &&
 | |
| +          (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 +589,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
 | |
| +
 | |
|  /* }================================================================== */
 | |
|  
 | |
|  
 |