Lua 5.1.4: lzio.c
L0001
L0006
L0007
L0008 #include <string.h>
L0009
L0010 #define lzio_c
L0011 #define LUA_CORE
L0012
L0013 #include "lua.h"
L0014
L0015 #include "llimits.h"
L0016 #include "lmem.h"
L0017 #include "lstate.h"
L0018 #include "lzio.h"
L0019
L0020
L0021 int luaZ_fill (ZIO *z) {
L0022 size_t size;
L0023 lua_State *L = z->L;
L0024 const char *buff;
L0025 lua_unlock(L);
L0026 buff = z->reader(L, z->data, &size);
L0027 lua_lock(L);
L0028 if (buff == NULL || size == 0) return EOZ;
L0029 z->n = size - 1;
L0030 z->p = buff;
L0031 return char2int(*(z->p++));
L0032 }
L0033
L0034
L0035 int luaZ_lookahead (ZIO *z) {
L0036 if (z->n == 0) {
L0037 if (luaZ_fill(z) == EOZ)
L0038 return EOZ;
L0039 else {
L0040 z->n++;
L0041 z->p--;
L0042 }
L0043 }
L0044 return char2int(*z->p);
L0045 }
L0046
L0047
L0048 void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, void *data) {
L0049 z->L = L;
L0050 z->reader = reader;
L0051 z->data = data;
L0052 z->n = 0;
L0053 z->p = NULL;
L0054 }
L0055
L0056
L0057
L0058 size_t luaZ_read (ZIO *z, void *b, size_t n) {
L0059 while (n) {
L0060 size_t m;
L0061 if (luaZ_lookahead(z) == EOZ)
L0062 return n;
L0063 m = (n <= z->n) ? n : z->n;
L0064 memcpy(b, z->p, m);
L0065 z->n -= m;
L0066 z->p += m;
L0067 b = (char *)b + m;
L0068 n -= m;
L0069 }
L0070 return 0;
L0071 }
L0072
L0073
L0074 char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n) {
L0075 if (n > buff->buffsize) {
L0076 if (n < LUA_MINBUFFER) n = LUA_MINBUFFER;
L0077 luaZ_resizebuffer(L, buff, n);
L0078 }
L0079 return buff->buffer;
L0080 }
L0081
L0082
Generated by pretty.lua