diff options
author | bloodstalker <thabogre@gmail.com> | 2017-05-12 12:10:08 +0000 |
---|---|---|
committer | bloodstalker <thabogre@gmail.com> | 2017-05-12 12:10:08 +0000 |
commit | 3f764e681f8d868fe725e9a573b3a1815194a559 (patch) | |
tree | 435af067340d7f027e598a79e1ec98b0c57b3e74 /bruiser/lua-5.3.4/src/lzio.c | |
parent | its a submodule (diff) | |
download | mutator-3f764e681f8d868fe725e9a573b3a1815194a559.tar.gz mutator-3f764e681f8d868fe725e9a573b3a1815194a559.zip |
yup. lua. better than whatever shaky messy DSL i was gonna come up with for bruiseer.
Diffstat (limited to '')
-rw-r--r-- | bruiser/lua-5.3.4/src/lzio.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/bruiser/lua-5.3.4/src/lzio.c b/bruiser/lua-5.3.4/src/lzio.c new file mode 100644 index 0000000..c9e1f49 --- /dev/null +++ b/bruiser/lua-5.3.4/src/lzio.c @@ -0,0 +1,68 @@ +/* +** $Id: lzio.c,v 1.37 2015/09/08 15:41:05 roberto Exp $ +** Buffered streams +** See Copyright Notice in lua.h +*/ + +#define lzio_c +#define LUA_CORE + +#include "lprefix.h" + + +#include <string.h> + +#include "lua.h" + +#include "llimits.h" +#include "lmem.h" +#include "lstate.h" +#include "lzio.h" + + +int luaZ_fill (ZIO *z) { + size_t size; + lua_State *L = z->L; + const char *buff; + lua_unlock(L); + buff = z->reader(L, z->data, &size); + lua_lock(L); + if (buff == NULL || size == 0) + return EOZ; + z->n = size - 1; /* discount char being returned */ + z->p = buff; + return cast_uchar(*(z->p++)); +} + + +void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, void *data) { + z->L = L; + z->reader = reader; + z->data = data; + z->n = 0; + z->p = NULL; +} + + +/* --------------------------------------------------------------- read --- */ +size_t luaZ_read (ZIO *z, void *b, size_t n) { + while (n) { + size_t m; + if (z->n == 0) { /* no bytes in buffer? */ + if (luaZ_fill(z) == EOZ) /* try to read more */ + return n; /* no more input; return number of missing bytes */ + else { + z->n++; /* luaZ_fill consumed first byte; put it back */ + z->p--; + } + } + m = (n <= z->n) ? n : z->n; /* min. between n and z->n */ + memcpy(b, z->p, m); + z->n -= m; + z->p += m; + b = (char *)b + m; + n -= m; + } + return 0; +} + |