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)
Diffstat (limited to '')
| -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 | { |
