mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-04 06:54:27 -05: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
 | 
						|
+
 | 
						|
 /* }================================================================== */
 | 
						|
 
 | 
						|
 
 |