diff options
| -rw-r--r-- | ldo.c | 4 | ||||
| -rw-r--r-- | lgc.c | 5 | ||||
| -rw-r--r-- | lstate.c | 4 | ||||
| -rw-r--r-- | lstate.h | 3 | ||||
| -rw-r--r-- | lstring.c | 20 | ||||
| -rw-r--r-- | lstring.h | 3 | ||||
| -rw-r--r-- | lundump.c | 20 | ||||
| -rw-r--r-- | lundump.h | 5 | ||||
| -rw-r--r-- | lvm.c | 41 | ||||
| -rw-r--r-- | lzio.c | 12 | ||||
| -rw-r--r-- | lzio.h | 3 |
11 files changed, 62 insertions, 58 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: ldo.c,v 2.138 2015/05/22 17:48:19 roberto Exp roberto $ | 2 | ** $Id: ldo.c,v 2.139 2015/06/18 14:19:52 roberto Exp roberto $ |
| 3 | ** Stack and Call structure of Lua | 3 | ** Stack and Call structure of Lua |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -684,7 +684,7 @@ static void f_parser (lua_State *L, void *ud) { | |||
| 684 | int c = zgetc(p->z); /* read first character */ | 684 | int c = zgetc(p->z); /* read first character */ |
| 685 | if (c == LUA_SIGNATURE[0]) { | 685 | if (c == LUA_SIGNATURE[0]) { |
| 686 | checkmode(L, p->mode, "binary"); | 686 | checkmode(L, p->mode, "binary"); |
| 687 | cl = luaU_undump(L, p->z, &p->buff, p->name); | 687 | cl = luaU_undump(L, p->z, p->name); |
| 688 | } | 688 | } |
| 689 | else { | 689 | else { |
| 690 | checkmode(L, p->mode, "text"); | 690 | checkmode(L, p->mode, "text"); |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lgc.c,v 2.205 2015/03/25 13:42:19 roberto Exp roberto $ | 2 | ** $Id: lgc.c,v 2.206 2015/07/13 13:30:03 roberto Exp roberto $ |
| 3 | ** Garbage Collector | 3 | ** Garbage Collector |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -769,12 +769,11 @@ static GCObject **sweeptolive (lua_State *L, GCObject **p, int *n) { | |||
| 769 | */ | 769 | */ |
| 770 | 770 | ||
| 771 | /* | 771 | /* |
| 772 | ** If possible, free concatenation buffer and shrink string table | 772 | ** If possible, shrink string table |
| 773 | */ | 773 | */ |
| 774 | static void checkSizes (lua_State *L, global_State *g) { | 774 | static void checkSizes (lua_State *L, global_State *g) { |
| 775 | if (g->gckind != KGC_EMERGENCY) { | 775 | if (g->gckind != KGC_EMERGENCY) { |
| 776 | l_mem olddebt = g->GCdebt; | 776 | l_mem olddebt = g->GCdebt; |
| 777 | luaZ_freebuffer(L, &g->buff); /* free concatenation buffer */ | ||
| 778 | if (g->strt.nuse < g->strt.size / 4) /* string table too big? */ | 777 | if (g->strt.nuse < g->strt.size / 4) /* string table too big? */ |
| 779 | luaS_resize(L, g->strt.size / 2); /* shrink it a little */ | 778 | luaS_resize(L, g->strt.size / 2); /* shrink it a little */ |
| 780 | g->GCestimate += g->GCdebt - olddebt; /* update estimate */ | 779 | g->GCestimate += g->GCdebt - olddebt; /* update estimate */ |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lstate.c,v 2.128 2015/03/04 13:31:21 roberto Exp roberto $ | 2 | ** $Id: lstate.c,v 2.129 2015/07/13 13:30:03 roberto Exp roberto $ |
| 3 | ** Global State | 3 | ** Global State |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -241,7 +241,6 @@ static void close_state (lua_State *L) { | |||
| 241 | if (g->version) /* closing a fully built state? */ | 241 | if (g->version) /* closing a fully built state? */ |
| 242 | luai_userstateclose(L); | 242 | luai_userstateclose(L); |
| 243 | luaM_freearray(L, G(L)->strt.hash, G(L)->strt.size); | 243 | luaM_freearray(L, G(L)->strt.hash, G(L)->strt.size); |
| 244 | luaZ_freebuffer(L, &g->buff); | ||
| 245 | freestack(L); | 244 | freestack(L); |
| 246 | lua_assert(gettotalbytes(g) == sizeof(LG)); | 245 | lua_assert(gettotalbytes(g) == sizeof(LG)); |
| 247 | (*g->frealloc)(g->ud, fromstate(L), sizeof(LG), 0); /* free main block */ | 246 | (*g->frealloc)(g->ud, fromstate(L), sizeof(LG), 0); /* free main block */ |
| @@ -310,7 +309,6 @@ LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) { | |||
| 310 | g->strt.size = g->strt.nuse = 0; | 309 | g->strt.size = g->strt.nuse = 0; |
| 311 | g->strt.hash = NULL; | 310 | g->strt.hash = NULL; |
| 312 | setnilvalue(&g->l_registry); | 311 | setnilvalue(&g->l_registry); |
| 313 | luaZ_initbuffer(L, &g->buff); | ||
| 314 | g->panic = NULL; | 312 | g->panic = NULL; |
| 315 | g->version = NULL; | 313 | g->version = NULL; |
| 316 | g->gcstate = GCSpause; | 314 | g->gcstate = GCSpause; |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lstate.h,v 2.122 2015/06/01 16:34:37 roberto Exp roberto $ | 2 | ** $Id: lstate.h,v 2.123 2015/07/04 16:33:17 roberto Exp roberto $ |
| 3 | ** Global State | 3 | ** Global State |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -131,7 +131,6 @@ typedef struct global_State { | |||
| 131 | GCObject *tobefnz; /* list of userdata to be GC */ | 131 | GCObject *tobefnz; /* list of userdata to be GC */ |
| 132 | GCObject *fixedgc; /* list of objects not to be collected */ | 132 | GCObject *fixedgc; /* list of objects not to be collected */ |
| 133 | struct lua_State *twups; /* list of threads with open upvalues */ | 133 | struct lua_State *twups; /* list of threads with open upvalues */ |
| 134 | Mbuffer buff; /* temporary buffer for string concatenation */ | ||
| 135 | unsigned int gcfinnum; /* number of finalizers to call in each GC step */ | 134 | unsigned int gcfinnum; /* number of finalizers to call in each GC step */ |
| 136 | int gcpause; /* size of pause between successive GCs */ | 135 | int gcpause; /* size of pause between successive GCs */ |
| 137 | int gcstepmul; /* GC 'granularity' */ | 136 | int gcstepmul; /* GC 'granularity' */ |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lstring.c,v 2.49 2015/06/01 16:34:37 roberto Exp roberto $ | 2 | ** $Id: lstring.c,v 2.50 2015/06/18 14:20:32 roberto Exp roberto $ |
| 3 | ** String table (keeps all strings handled by Lua) | 3 | ** String table (keeps all strings handled by Lua) |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -119,8 +119,7 @@ void luaS_init (lua_State *L) { | |||
| 119 | /* | 119 | /* |
| 120 | ** creates a new string object | 120 | ** creates a new string object |
| 121 | */ | 121 | */ |
| 122 | static TString *createstrobj (lua_State *L, const char *str, size_t l, | 122 | static TString *createstrobj (lua_State *L, size_t l, int tag, unsigned int h) { |
| 123 | int tag, unsigned int h) { | ||
| 124 | TString *ts; | 123 | TString *ts; |
| 125 | GCObject *o; | 124 | GCObject *o; |
| 126 | size_t totalsize; /* total size of TString object */ | 125 | size_t totalsize; /* total size of TString object */ |
| @@ -129,12 +128,18 @@ static TString *createstrobj (lua_State *L, const char *str, size_t l, | |||
| 129 | ts = gco2ts(o); | 128 | ts = gco2ts(o); |
| 130 | ts->hash = h; | 129 | ts->hash = h; |
| 131 | ts->extra = 0; | 130 | ts->extra = 0; |
| 132 | memcpy(getaddrstr(ts), str, l * sizeof(char)); | ||
| 133 | getaddrstr(ts)[l] = '\0'; /* ending 0 */ | 131 | getaddrstr(ts)[l] = '\0'; /* ending 0 */ |
| 134 | return ts; | 132 | return ts; |
| 135 | } | 133 | } |
| 136 | 134 | ||
| 137 | 135 | ||
| 136 | TString *luaS_createlngstrobj (lua_State *L, size_t l) { | ||
| 137 | TString *ts = createstrobj(L, l, LUA_TLNGSTR, G(L)->seed); | ||
| 138 | ts->u.lnglen = l; | ||
| 139 | return ts; | ||
| 140 | } | ||
| 141 | |||
| 142 | |||
| 138 | void luaS_remove (lua_State *L, TString *ts) { | 143 | void luaS_remove (lua_State *L, TString *ts) { |
| 139 | stringtable *tb = &G(L)->strt; | 144 | stringtable *tb = &G(L)->strt; |
| 140 | TString **p = &tb->hash[lmod(ts->hash, tb->size)]; | 145 | TString **p = &tb->hash[lmod(ts->hash, tb->size)]; |
| @@ -166,7 +171,8 @@ static TString *internshrstr (lua_State *L, const char *str, size_t l) { | |||
| 166 | luaS_resize(L, g->strt.size * 2); | 171 | luaS_resize(L, g->strt.size * 2); |
| 167 | list = &g->strt.hash[lmod(h, g->strt.size)]; /* recompute with new size */ | 172 | list = &g->strt.hash[lmod(h, g->strt.size)]; /* recompute with new size */ |
| 168 | } | 173 | } |
| 169 | ts = createstrobj(L, str, l, LUA_TSHRSTR, h); | 174 | ts = createstrobj(L, l, LUA_TSHRSTR, h); |
| 175 | memcpy(getaddrstr(ts), str, l * sizeof(char)); | ||
| 170 | ts->shrlen = cast_byte(l); | 176 | ts->shrlen = cast_byte(l); |
| 171 | ts->u.hnext = *list; | 177 | ts->u.hnext = *list; |
| 172 | *list = ts; | 178 | *list = ts; |
| @@ -185,8 +191,8 @@ TString *luaS_newlstr (lua_State *L, const char *str, size_t l) { | |||
| 185 | TString *ts; | 191 | TString *ts; |
| 186 | if (l >= (MAX_SIZE - sizeof(TString))/sizeof(char)) | 192 | if (l >= (MAX_SIZE - sizeof(TString))/sizeof(char)) |
| 187 | luaM_toobig(L); | 193 | luaM_toobig(L); |
| 188 | ts = createstrobj(L, str, l, LUA_TLNGSTR, G(L)->seed); | 194 | ts = luaS_createlngstrobj(L, l); |
| 189 | ts->u.lnglen = l; | 195 | memcpy(getaddrstr(ts), str, l * sizeof(char)); |
| 190 | return ts; | 196 | return ts; |
| 191 | } | 197 | } |
| 192 | } | 198 | } |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lstring.h,v 1.58 2015/03/04 13:31:21 roberto Exp roberto $ | 2 | ** $Id: lstring.h,v 1.59 2015/03/25 13:42:19 roberto Exp roberto $ |
| 3 | ** String table (keep all strings handled by Lua) | 3 | ** String table (keep all strings handled by Lua) |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -42,6 +42,7 @@ LUAI_FUNC void luaS_remove (lua_State *L, TString *ts); | |||
| 42 | LUAI_FUNC Udata *luaS_newudata (lua_State *L, size_t s); | 42 | LUAI_FUNC Udata *luaS_newudata (lua_State *L, size_t s); |
| 43 | LUAI_FUNC TString *luaS_newlstr (lua_State *L, const char *str, size_t l); | 43 | LUAI_FUNC TString *luaS_newlstr (lua_State *L, const char *str, size_t l); |
| 44 | LUAI_FUNC TString *luaS_new (lua_State *L, const char *str); | 44 | LUAI_FUNC TString *luaS_new (lua_State *L, const char *str); |
| 45 | LUAI_FUNC TString *luaS_createlngstrobj (lua_State *L, size_t l); | ||
| 45 | 46 | ||
| 46 | 47 | ||
| 47 | #endif | 48 | #endif |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lundump.c,v 2.40 2014/06/19 18:27:20 roberto Exp roberto $ | 2 | ** $Id: lundump.c,v 2.41 2014/11/02 19:19:04 roberto Exp roberto $ |
| 3 | ** load precompiled Lua chunks | 3 | ** load precompiled Lua chunks |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -32,7 +32,6 @@ | |||
| 32 | typedef struct { | 32 | typedef struct { |
| 33 | lua_State *L; | 33 | lua_State *L; |
| 34 | ZIO *Z; | 34 | ZIO *Z; |
| 35 | Mbuffer *b; | ||
| 36 | const char *name; | 35 | const char *name; |
| 37 | } LoadState; | 36 | } LoadState; |
| 38 | 37 | ||
| @@ -92,10 +91,15 @@ static TString *LoadString (LoadState *S) { | |||
| 92 | LoadVar(S, size); | 91 | LoadVar(S, size); |
| 93 | if (size == 0) | 92 | if (size == 0) |
| 94 | return NULL; | 93 | return NULL; |
| 95 | else { | 94 | else if (--size <= LUAI_MAXSHORTLEN) { /* short string? */ |
| 96 | char *s = luaZ_openspace(S->L, S->b, --size); | 95 | char buff[LUAI_MAXSHORTLEN]; |
| 97 | LoadVector(S, s, size); | 96 | LoadVector(S, buff, size); |
| 98 | return luaS_newlstr(S->L, s, size); | 97 | return luaS_newlstr(S->L, buff, size); |
| 98 | } | ||
| 99 | else { /* long string */ | ||
| 100 | TString *ts = luaS_createlngstrobj(S->L, size); | ||
| 101 | LoadVector(S, getaddrstr(ts), size); /* load directly in final place */ | ||
| 102 | return ts; | ||
| 99 | } | 103 | } |
| 100 | } | 104 | } |
| 101 | 105 | ||
| @@ -251,8 +255,7 @@ static void checkHeader (LoadState *S) { | |||
| 251 | /* | 255 | /* |
| 252 | ** load precompiled chunk | 256 | ** load precompiled chunk |
| 253 | */ | 257 | */ |
| 254 | LClosure *luaU_undump(lua_State *L, ZIO *Z, Mbuffer *buff, | 258 | LClosure *luaU_undump(lua_State *L, ZIO *Z, const char *name) { |
| 255 | const char *name) { | ||
| 256 | LoadState S; | 259 | LoadState S; |
| 257 | LClosure *cl; | 260 | LClosure *cl; |
| 258 | if (*name == '@' || *name == '=') | 261 | if (*name == '@' || *name == '=') |
| @@ -263,7 +266,6 @@ LClosure *luaU_undump(lua_State *L, ZIO *Z, Mbuffer *buff, | |||
| 263 | S.name = name; | 266 | S.name = name; |
| 264 | S.L = L; | 267 | S.L = L; |
| 265 | S.Z = Z; | 268 | S.Z = Z; |
| 266 | S.b = buff; | ||
| 267 | checkHeader(&S); | 269 | checkHeader(&S); |
| 268 | cl = luaF_newLclosure(L, LoadByte(&S)); | 270 | cl = luaF_newLclosure(L, LoadByte(&S)); |
| 269 | setclLvalue(L, L->top, cl); | 271 | setclLvalue(L, L->top, cl); |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lundump.h,v 1.43 2014/04/15 14:28:20 roberto Exp roberto $ | 2 | ** $Id: lundump.h,v 1.44 2014/06/19 18:27:20 roberto Exp roberto $ |
| 3 | ** load precompiled Lua chunks | 3 | ** load precompiled Lua chunks |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -23,8 +23,7 @@ | |||
| 23 | #define LUAC_FORMAT 0 /* this is the official format */ | 23 | #define LUAC_FORMAT 0 /* this is the official format */ |
| 24 | 24 | ||
| 25 | /* load one chunk; from lundump.c */ | 25 | /* load one chunk; from lundump.c */ |
| 26 | LUAI_FUNC LClosure* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, | 26 | LUAI_FUNC LClosure* luaU_undump (lua_State* L, ZIO* Z, const char* name); |
| 27 | const char* name); | ||
| 28 | 27 | ||
| 29 | /* dump one chunk; from ldump.c */ | 28 | /* dump one chunk; from ldump.c */ |
| 30 | LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, | 29 | LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lvm.c,v 2.249 2015/08/03 19:50:49 roberto Exp roberto $ | 2 | ** $Id: lvm.c,v 2.250 2015/08/03 20:40:26 roberto Exp roberto $ |
| 3 | ** Lua virtual machine | 3 | ** Lua virtual machine |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -445,6 +445,17 @@ int luaV_equalobj (lua_State *L, const TValue *t1, const TValue *t2) { | |||
| 445 | 445 | ||
| 446 | #define isemptystr(o) (ttisshrstring(o) && tsvalue(o)->shrlen == 0) | 446 | #define isemptystr(o) (ttisshrstring(o) && tsvalue(o)->shrlen == 0) |
| 447 | 447 | ||
| 448 | /* copy strings in stack from top - n up to top - 1 to buffer */ | ||
| 449 | static void copy2buff (StkId top, int n, char *buff) { | ||
| 450 | size_t tl = 0; /* size already copied */ | ||
| 451 | do { | ||
| 452 | size_t l = vslen(top - n); /* length of string being copied */ | ||
| 453 | memcpy(buff + tl, svalue(top - n), l * sizeof(char)); | ||
| 454 | tl += l; | ||
| 455 | } while (--n > 0); | ||
| 456 | } | ||
| 457 | |||
| 458 | |||
| 448 | /* | 459 | /* |
| 449 | ** Main operation for concatenation: concat 'total' values in the stack, | 460 | ** Main operation for concatenation: concat 'total' values in the stack, |
| 450 | ** from 'L->top - total' up to 'L->top - 1'. | 461 | ** from 'L->top - total' up to 'L->top - 1'. |
| @@ -464,24 +475,24 @@ void luaV_concat (lua_State *L, int total) { | |||
| 464 | else { | 475 | else { |
| 465 | /* at least two non-empty string values; get as many as possible */ | 476 | /* at least two non-empty string values; get as many as possible */ |
| 466 | size_t tl = vslen(top - 1); | 477 | size_t tl = vslen(top - 1); |
| 467 | char *buffer; | 478 | TString *ts; |
| 468 | int i; | 479 | /* collect total length and number of strings */ |
| 469 | /* collect total length */ | 480 | for (n = 1; n < total && tostring(L, top - n - 1); n++) { |
| 470 | for (i = 1; i < total && tostring(L, top-i-1); i++) { | 481 | size_t l = vslen(top - n - 1); |
| 471 | size_t l = vslen(top - i - 1); | ||
| 472 | if (l >= (MAX_SIZE/sizeof(char)) - tl) | 482 | if (l >= (MAX_SIZE/sizeof(char)) - tl) |
| 473 | luaG_runerror(L, "string length overflow"); | 483 | luaG_runerror(L, "string length overflow"); |
| 474 | tl += l; | 484 | tl += l; |
| 475 | } | 485 | } |
| 476 | buffer = luaZ_openspace(L, &G(L)->buff, tl); | 486 | if (tl <= LUAI_MAXSHORTLEN) { /* is result a short string? */ |
| 477 | tl = 0; | 487 | char buff[LUAI_MAXSHORTLEN]; |
| 478 | n = i; | 488 | copy2buff(top, n, buff); /* copy strings to buffer */ |
| 479 | do { /* copy all strings to buffer */ | 489 | ts = luaS_newlstr(L, buff, tl); |
| 480 | size_t l = vslen(top - i); | 490 | } |
| 481 | memcpy(buffer+tl, svalue(top-i), l * sizeof(char)); | 491 | else { /* long string; copy strings directly to final result */ |
| 482 | tl += l; | 492 | ts = luaS_createlngstrobj(L, tl); |
| 483 | } while (--i > 0); | 493 | copy2buff(top, n, getaddrstr(ts)); |
| 484 | setsvalue2s(L, top-n, luaS_newlstr(L, buffer, tl)); /* create result */ | 494 | } |
| 495 | setsvalue2s(L, top - n, ts); /* create result */ | ||
| 485 | } | 496 | } |
| 486 | total -= n-1; /* got 'n' strings to create 1 new */ | 497 | total -= n-1; /* got 'n' strings to create 1 new */ |
| 487 | L->top -= n-1; /* popped 'n' strings and pushed one */ | 498 | L->top -= n-1; /* popped 'n' strings and pushed one */ |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lzio.c,v 1.35 2012/05/14 13:34:18 roberto Exp roberto $ | 2 | ** $Id: lzio.c,v 1.36 2014/11/02 19:19:04 roberto Exp roberto $ |
| 3 | ** Buffered streams | 3 | ** Buffered streams |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -66,13 +66,3 @@ size_t luaZ_read (ZIO *z, void *b, size_t n) { | |||
| 66 | return 0; | 66 | return 0; |
| 67 | } | 67 | } |
| 68 | 68 | ||
| 69 | /* ------------------------------------------------------------------------ */ | ||
| 70 | char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n) { | ||
| 71 | if (n > buff->buffsize) { | ||
| 72 | if (n < LUA_MINBUFFER) n = LUA_MINBUFFER; | ||
| 73 | luaZ_resizebuffer(L, buff, n); | ||
| 74 | } | ||
| 75 | return buff->buffer; | ||
| 76 | } | ||
| 77 | |||
| 78 | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lzio.h,v 1.29 2014/12/19 13:45:40 roberto Exp roberto $ | 2 | ** $Id: lzio.h,v 1.30 2014/12/19 17:26:14 roberto Exp roberto $ |
| 3 | ** Buffered streams | 3 | ** Buffered streams |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -44,7 +44,6 @@ typedef struct Mbuffer { | |||
| 44 | #define luaZ_freebuffer(L, buff) luaZ_resizebuffer(L, buff, 0) | 44 | #define luaZ_freebuffer(L, buff) luaZ_resizebuffer(L, buff, 0) |
| 45 | 45 | ||
| 46 | 46 | ||
| 47 | LUAI_FUNC char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n); | ||
| 48 | LUAI_FUNC void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, | 47 | LUAI_FUNC void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, |
| 49 | void *data); | 48 | void *data); |
| 50 | LUAI_FUNC size_t luaZ_read (ZIO* z, void *b, size_t n); /* read next n bytes */ | 49 | LUAI_FUNC size_t luaZ_read (ZIO* z, void *b, size_t n); /* read next n bytes */ |
