|
@@ -0,0 +1,46 @@
|
|
|
+When loading a file, Lua may call the reader function again after it returned end of input.
|
|
|
+
|
|
|
+Fetch from: http://www.lua.org/bugs.html#5.1.5-2
|
|
|
+
|
|
|
+Signed-off-by: Francois Perrad <francois.perrad@gadz.org>
|
|
|
+
|
|
|
+Index: b/src/lzio.c
|
|
|
+===================================================================
|
|
|
+--- a/src/lzio.c
|
|
|
++++ b/src/lzio.c
|
|
|
+@@ -22,10 +22,14 @@
|
|
|
+ size_t size;
|
|
|
+ lua_State *L = z->L;
|
|
|
+ const char *buff;
|
|
|
++ if (z->eoz) return EOZ;
|
|
|
+ lua_unlock(L);
|
|
|
+ buff = z->reader(L, z->data, &size);
|
|
|
+ lua_lock(L);
|
|
|
+- if (buff == NULL || size == 0) return EOZ;
|
|
|
++ if (buff == NULL || size == 0) {
|
|
|
++ z->eoz = 1; /* avoid calling reader function next time */
|
|
|
++ return EOZ;
|
|
|
++ }
|
|
|
+ z->n = size - 1;
|
|
|
+ z->p = buff;
|
|
|
+ return char2int(*(z->p++));
|
|
|
+@@ -51,6 +55,7 @@
|
|
|
+ z->data = data;
|
|
|
+ z->n = 0;
|
|
|
+ z->p = NULL;
|
|
|
++ z->eoz = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+Index: b/src/lzio.h
|
|
|
+===================================================================
|
|
|
+--- a/src/lzio.h
|
|
|
++++ b/src/lzio.h
|
|
|
+@@ -59,6 +59,7 @@
|
|
|
+ lua_Reader reader;
|
|
|
+ void* data; /* additional data */
|
|
|
+ lua_State *L; /* Lua state (for reader) */
|
|
|
++ int eoz; /* true if reader has no more data */
|
|
|
+ };
|
|
|
+
|
|
|
+
|