aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuiz Henrique de Figueiredo <lhf@tecgraf.puc-rio.br>1996-03-06 18:40:10 -0300
committerLuiz Henrique de Figueiredo <lhf@tecgraf.puc-rio.br>1996-03-06 18:40:10 -0300
commite33a3b8e0dced86ecae6d7d6e337984c38eb8a33 (patch)
tree53ebeb99aeb279bc92add542c106015defc8c650
parent9a6cccb08c4701755787bfface1933cf052fd59a (diff)
downloadlua-e33a3b8e0dced86ecae6d7d6e337984c38eb8a33.tar.gz
lua-e33a3b8e0dced86ecae6d7d6e337984c38eb8a33.tar.bz2
lua-e33a3b8e0dced86ecae6d7d6e337984c38eb8a33.zip
now loads size as two words
-rw-r--r--undump.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/undump.c b/undump.c
index a0bb30ef..539a506d 100644
--- a/undump.c
+++ b/undump.c
@@ -3,7 +3,7 @@
3** load bytecodes from files 3** load bytecodes from files
4*/ 4*/
5 5
6char* rcs_undump="$Id: undump.c,v 1.8 1996/03/06 01:41:18 lhf Exp lhf $"; 6char* rcs_undump="$Id: undump.c,v 1.9 1996/03/06 16:01:08 lhf Exp lhf $";
7 7
8#include <stdio.h> 8#include <stdio.h>
9#include <string.h> 9#include <string.h>
@@ -43,7 +43,7 @@ static int LoadWord(FILE* D)
43 fread(&w,sizeof(w),1,D); 43 fread(&w,sizeof(w),1,D);
44 if (swapword) 44 if (swapword)
45 { 45 {
46 Byte* p=&w; 46 Byte* p=&w; /* TODO: need union? */
47 Byte t; 47 Byte t;
48 t=p[0]; p[0]=p[1]; p[1]=t; 48 t=p[0]; p[0]=p[1]; p[1]=t;
49 } 49 }
@@ -57,6 +57,15 @@ static char* LoadBlock(int size, FILE* D)
57 return b; 57 return b;
58} 58}
59 59
60static int LoadSize(FILE* D)
61{
62 Word hi=LoadWord(D);
63 Word lo=LoadWord(D);
64 int s=(hi<<16)|lo;
65 if ((Word)s != s) panic("code too long");
66 return s;
67}
68
60static char* LoadString(FILE* D) 69static char* LoadString(FILE* D)
61{ 70{
62 return LoadBlock(LoadWord(D),D); 71 return LoadBlock(LoadWord(D),D);
@@ -70,7 +79,7 @@ static void LoadFunction(FILE* D)
70 TFunc* tf=new(TFunc); 79 TFunc* tf=new(TFunc);
71 tf->next=NULL; 80 tf->next=NULL;
72 tf->locvars=NULL; 81 tf->locvars=NULL;
73 tf->size=LoadWord(D); /* TODO: Long? */ 82 tf->size=LoadSize(D);
74 tf->lineDefined=LoadWord(D); 83 tf->lineDefined=LoadWord(D);
75 if (IsMain(tf)) /* new main */ 84 if (IsMain(tf)) /* new main */
76 { 85 {
@@ -141,7 +150,7 @@ static void LoadHeader(FILE* D) /* TODO: error handling */
141 fread(&f,sizeof(f),1,D); /* a float for testing byte ordering */ 150 fread(&f,sizeof(f),1,D); /* a float for testing byte ordering */
142 if (f!=tf) 151 if (f!=tf)
143 { 152 {
144 swapfloat=1; 153 swapfloat=1; /* TODO: only one test? */
145 if (f!=tf) warn("different float representation"); 154 if (f!=tf) warn("different float representation");
146 } 155 }
147} 156}