diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-12-28 10:59:41 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-12-28 10:59:41 -0200 |
| commit | 76f62fc5a140170164857a318eabc564fad3de6b (patch) | |
| tree | ef57ea97d7ec273688be914b80d67c0cfb01aab1 | |
| parent | 0183b8030c80f57b87874ff7867ccdb172d9d3dc (diff) | |
| download | lua-76f62fc5a140170164857a318eabc564fad3de6b.tar.gz lua-76f62fc5a140170164857a318eabc564fad3de6b.tar.bz2 lua-76f62fc5a140170164857a318eabc564fad3de6b.zip | |
correct size only after malloc success
| -rw-r--r-- | lundump.c | 21 |
1 files changed, 13 insertions, 8 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lundump.c,v 1.35 2000/12/04 18:33:40 roberto Exp roberto $ | 2 | ** $Id: lundump.c,v 1.36 2000/12/28 12:55:41 roberto Exp roberto $ |
| 3 | ** load bytecodes from files | 3 | ** load bytecodes from files |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -104,9 +104,9 @@ static TString* LoadString (lua_State* L, ZIO* Z, int swap) | |||
| 104 | 104 | ||
| 105 | static void LoadCode (lua_State* L, Proto* tf, ZIO* Z, int swap) | 105 | static void LoadCode (lua_State* L, Proto* tf, ZIO* Z, int swap) |
| 106 | { | 106 | { |
| 107 | int size; | 107 | int size=LoadInt(L,Z,swap); |
| 108 | tf->sizecode=size=LoadInt(L,Z,swap); | ||
| 109 | tf->code=luaM_newvector(L,size,Instruction); | 108 | tf->code=luaM_newvector(L,size,Instruction); |
| 109 | tf->sizecode=size; | ||
| 110 | LoadVector(L,tf->code,size,sizeof(*tf->code),Z,swap); | 110 | LoadVector(L,tf->code,size,sizeof(*tf->code),Z,swap); |
| 111 | if (tf->code[size-1]!=OP_END) luaO_verror(L,"bad code in `%.99s'",ZNAME(Z)); | 111 | if (tf->code[size-1]!=OP_END) luaO_verror(L,"bad code in `%.99s'",ZNAME(Z)); |
| 112 | } | 112 | } |
| @@ -114,8 +114,9 @@ static void LoadCode (lua_State* L, Proto* tf, ZIO* Z, int swap) | |||
| 114 | static void LoadLocals (lua_State* L, Proto* tf, ZIO* Z, int swap) | 114 | static void LoadLocals (lua_State* L, Proto* tf, ZIO* Z, int swap) |
| 115 | { | 115 | { |
| 116 | int i,n; | 116 | int i,n; |
| 117 | tf->sizelocvars=n=LoadInt(L,Z,swap); | 117 | n=LoadInt(L,Z,swap); |
| 118 | tf->locvars=luaM_newvector(L,n,LocVar); | 118 | tf->locvars=luaM_newvector(L,n,LocVar); |
| 119 | tf->sizelocvars=n; | ||
| 119 | for (i=0; i<n; i++) | 120 | for (i=0; i<n; i++) |
| 120 | { | 121 | { |
| 121 | tf->locvars[i].varname=LoadString(L,Z,swap); | 122 | tf->locvars[i].varname=LoadString(L,Z,swap); |
| @@ -127,8 +128,9 @@ static void LoadLocals (lua_State* L, Proto* tf, ZIO* Z, int swap) | |||
| 127 | static void LoadLines (lua_State* L, Proto* tf, ZIO* Z, int swap) | 128 | static void LoadLines (lua_State* L, Proto* tf, ZIO* Z, int swap) |
| 128 | { | 129 | { |
| 129 | int n; | 130 | int n; |
| 130 | tf->sizelineinfo=n=LoadInt(L,Z,swap); | 131 | n=LoadInt(L,Z,swap); |
| 131 | tf->lineinfo=luaM_newvector(L,n,int); | 132 | tf->lineinfo=luaM_newvector(L,n,int); |
| 133 | tf->sizelineinfo=n; | ||
| 132 | LoadVector(L,tf->lineinfo,n,sizeof(*tf->lineinfo),Z,swap); | 134 | LoadVector(L,tf->lineinfo,n,sizeof(*tf->lineinfo),Z,swap); |
| 133 | } | 135 | } |
| 134 | 136 | ||
| @@ -137,15 +139,18 @@ static Proto* LoadFunction (lua_State* L, ZIO* Z, int swap); | |||
| 137 | static void LoadConstants (lua_State* L, Proto* tf, ZIO* Z, int swap) | 139 | static void LoadConstants (lua_State* L, Proto* tf, ZIO* Z, int swap) |
| 138 | { | 140 | { |
| 139 | int i,n; | 141 | int i,n; |
| 140 | tf->sizekstr=n=LoadInt(L,Z,swap); | 142 | n=LoadInt(L,Z,swap); |
| 141 | tf->kstr=luaM_newvector(L,n,TString*); | 143 | tf->kstr=luaM_newvector(L,n,TString*); |
| 144 | tf->sizekstr=n; | ||
| 142 | for (i=0; i<n; i++) | 145 | for (i=0; i<n; i++) |
| 143 | tf->kstr[i]=LoadString(L,Z,swap); | 146 | tf->kstr[i]=LoadString(L,Z,swap); |
| 144 | tf->sizeknum=n=LoadInt(L,Z,swap); | 147 | n=LoadInt(L,Z,swap); |
| 145 | tf->knum=luaM_newvector(L,n,lua_Number); | 148 | tf->knum=luaM_newvector(L,n,lua_Number); |
| 149 | tf->sizeknum=n; | ||
| 146 | LoadVector(L,tf->knum,n,sizeof(*tf->knum),Z,swap); | 150 | LoadVector(L,tf->knum,n,sizeof(*tf->knum),Z,swap); |
| 147 | tf->sizekproto=n=LoadInt(L,Z,swap); | 151 | n=LoadInt(L,Z,swap); |
| 148 | tf->kproto=luaM_newvector(L,n,Proto*); | 152 | tf->kproto=luaM_newvector(L,n,Proto*); |
| 153 | tf->sizekproto=n; | ||
| 149 | for (i=0; i<n; i++) | 154 | for (i=0; i<n; i++) |
| 150 | tf->kproto[i]=LoadFunction(L,Z,swap); | 155 | tf->kproto[i]=LoadFunction(L,Z,swap); |
| 151 | } | 156 | } |
