| 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 */ |
| }; |
| |
| |