47 lines
1.1 KiB
Diff
47 lines
1.1 KiB
Diff
|
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 */
|
||
|
};
|
||
|
|
||
|
|