diff options
author | Luiz Henrique de Figueiredo <lhf@tecgraf.puc-rio.br> | 1996-11-14 09:44:34 -0200 |
---|---|---|
committer | Luiz Henrique de Figueiredo <lhf@tecgraf.puc-rio.br> | 1996-11-14 09:44:34 -0200 |
commit | d991def36c313a5d10bc9f6769fc3ec2307dd60b (patch) | |
tree | 66345b0c545604de1a7fb5f0225d7712be827ad1 | |
parent | 8b195533d2b9576b339c8cf95c03bf13aec955a2 (diff) | |
download | lua-d991def36c313a5d10bc9f6769fc3ec2307dd60b.tar.gz lua-d991def36c313a5d10bc9f6769fc3ec2307dd60b.tar.bz2 lua-d991def36c313a5d10bc9f6769fc3ec2307dd60b.zip |
added 3 new bytes to header (sizeof's)
-rw-r--r-- | undump.c | 18 |
1 files changed, 14 insertions, 4 deletions
@@ -3,7 +3,7 @@ | |||
3 | ** load bytecodes from files | 3 | ** load bytecodes from files |
4 | */ | 4 | */ |
5 | 5 | ||
6 | char* rcs_undump="$Id: undump.c,v 1.15 1996/11/07 13:59:51 lhf Exp lhf $"; | 6 | char* rcs_undump="$Id: undump.c,v 1.16 1996/11/07 14:13:28 lhf Exp lhf $"; |
7 | 7 | ||
8 | #include <stdio.h> | 8 | #include <stdio.h> |
9 | #include <string.h> | 9 | #include <string.h> |
@@ -90,7 +90,7 @@ static void FixCode(Byte* code, Byte* end) /* swap words */ | |||
90 | p+=3; | 90 | p+=3; |
91 | break; | 91 | break; |
92 | case PUSHFUNCTION: | 92 | case PUSHFUNCTION: |
93 | p+=5; | 93 | p+=5; /* TODO: use sizeof(TFunc*) or old? */ |
94 | break; | 94 | break; |
95 | case PUSHWORD: | 95 | case PUSHWORD: |
96 | case PUSHSELF: | 96 | case PUSHSELF: |
@@ -111,7 +111,7 @@ static void FixCode(Byte* code, Byte* end) /* swap words */ | |||
111 | p+=3; | 111 | p+=3; |
112 | break; | 112 | break; |
113 | } | 113 | } |
114 | case PUSHFLOAT: | 114 | case PUSHFLOAT: /* assumes sizeof(float)==4 */ |
115 | { | 115 | { |
116 | Byte t; | 116 | Byte t; |
117 | t=p[1]; p[1]=p[4]; p[4]=t; | 117 | t=p[1]; p[1]=p[4]; p[4]=t; |
@@ -250,8 +250,18 @@ static void LoadHeader(FILE* D) /* TODO: error handling */ | |||
250 | { | 250 | { |
251 | Word w,tw=TEST_WORD; | 251 | Word w,tw=TEST_WORD; |
252 | float f,tf=TEST_FLOAT; | 252 | float f,tf=TEST_FLOAT; |
253 | int version; | ||
253 | LoadSignature(D); | 254 | LoadSignature(D); |
254 | getc(D); /* skip version */ | 255 | version=getc(D); |
256 | if (version>23) /* after 2.5 */ | ||
257 | { | ||
258 | int oldsizeofI=getc(D); | ||
259 | int oldsizeofF=getc(D); | ||
260 | int oldsizeofP=getc(D); | ||
261 | if (oldsizeofF!=4) lua_error("sizeof(float)!=4. not an IEEE machine?"); | ||
262 | if (oldsizeofFP!=sizeof(TFunc*)) /* TODO: pack */ | ||
263 | lua_error("different pointer sizes"); | ||
264 | } | ||
255 | fread(&w,sizeof(w),1,D); /* test word */ | 265 | fread(&w,sizeof(w),1,D); /* test word */ |
256 | if (w!=tw) | 266 | if (w!=tw) |
257 | { | 267 | { |