diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2002-10-09 10:42:01 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2002-10-09 10:42:01 -0300 |
| commit | 46b063ef59c7b334f8f36a9ab5dfd76d094e70d7 (patch) | |
| tree | 3d7aa7300a4478278515fa274cc0b7ee7076512c /lundump.c | |
| parent | e1d5153a33d278ac9db18f5bcc142a75e48606de (diff) | |
| download | lua-46b063ef59c7b334f8f36a9ab5dfd76d094e70d7.tar.gz lua-46b063ef59c7b334f8f36a9ab5dfd76d094e70d7.tar.bz2 lua-46b063ef59c7b334f8f36a9ab5dfd76d094e70d7.zip | |
`undump' also uses private buffer
Diffstat (limited to 'lundump.c')
| -rw-r--r-- | lundump.c | 8 |
1 files changed, 5 insertions, 3 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lundump.c,v 1.53 2002/09/19 13:03:53 roberto Exp roberto $ | 2 | ** $Id: lundump.c,v 1.54 2002/10/08 18:46:08 roberto Exp roberto $ |
| 3 | ** load pre-compiled Lua chunks | 3 | ** load pre-compiled Lua chunks |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -19,6 +19,7 @@ | |||
| 19 | typedef struct { | 19 | typedef struct { |
| 20 | lua_State* L; | 20 | lua_State* L; |
| 21 | ZIO* Z; | 21 | ZIO* Z; |
| 22 | Mbuffer *buff; | ||
| 22 | int swap; | 23 | int swap; |
| 23 | const char* name; | 24 | const char* name; |
| 24 | } LoadState; | 25 | } LoadState; |
| @@ -99,7 +100,7 @@ static TString* LoadString (LoadState* S) | |||
| 99 | return NULL; | 100 | return NULL; |
| 100 | else | 101 | else |
| 101 | { | 102 | { |
| 102 | char* s=luaZ_openspace(S->L,&G(S->L)->buff,size); | 103 | char* s=luaZ_openspace(S->L,S->buff,size); |
| 103 | ezread(S,s,size); | 104 | ezread(S,s,size); |
| 104 | return luaS_newlstr(S->L,s,size-1); /* remove trailing '\0' */ | 105 | return luaS_newlstr(S->L,s,size-1); /* remove trailing '\0' */ |
| 105 | } | 106 | } |
| @@ -245,7 +246,7 @@ static Proto* LoadChunk (LoadState* S) | |||
| 245 | /* | 246 | /* |
| 246 | ** load one chunk from a file or buffer | 247 | ** load one chunk from a file or buffer |
| 247 | */ | 248 | */ |
| 248 | Proto* luaU_undump (lua_State* L, ZIO* Z) | 249 | Proto* luaU_undump (lua_State* L, ZIO* Z, Mbuffer *buff) |
| 249 | { | 250 | { |
| 250 | LoadState S; | 251 | LoadState S; |
| 251 | Proto* f; | 252 | Proto* f; |
| @@ -258,6 +259,7 @@ Proto* luaU_undump (lua_State* L, ZIO* Z) | |||
| 258 | S.name=s; | 259 | S.name=s; |
| 259 | S.L=L; | 260 | S.L=L; |
| 260 | S.Z=Z; | 261 | S.Z=Z; |
| 262 | S.buff=buff; | ||
| 261 | f=LoadChunk(&S); | 263 | f=LoadChunk(&S); |
| 262 | if (zgetc(Z)!=EOZ) | 264 | if (zgetc(Z)!=EOZ) |
| 263 | luaG_runerror(L,"%s apparently contains more than one chunk",S.name); | 265 | luaG_runerror(L,"%s apparently contains more than one chunk",S.name); |
