123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- --- a/src/ldump.c
- +++ b/src/ldump.c
- @@ -67,12 +67,12 @@ static void DumpString(const TString* s,
- {
- if (s==NULL || getstr(s)==NULL)
- {
- - size_t size=0;
- + unsigned int size=0;
- DumpVar(size,D);
- }
- else
- {
- - size_t size=s->tsv.len+1; /* include trailing '\0' */
- + unsigned int size=s->tsv.len+1; /* include trailing '\0' */
- DumpVar(size,D);
- DumpBlock(getstr(s),size,D);
- }
- --- a/src/lundump.c
- +++ b/src/lundump.c
- @@ -25,6 +25,7 @@ typedef struct {
- ZIO* Z;
- Mbuffer* b;
- const char* name;
- + int swap;
- } LoadState;
-
- #ifdef LUAC_TRUST_BINARIES
- @@ -40,7 +41,6 @@ static void error(LoadState* S, const ch
- }
- #endif
-
- -#define LoadMem(S,b,n,size) LoadBlock(S,b,(n)*(size))
- #define LoadByte(S) (lu_byte)LoadChar(S)
- #define LoadVar(S,x) LoadMem(S,&x,1,sizeof(x))
- #define LoadVector(S,b,n,size) LoadMem(S,b,n,size)
- @@ -51,6 +51,49 @@ static void LoadBlock(LoadState* S, void
- IF (r!=0, "unexpected end");
- }
-
- +static void LoadMem (LoadState* S, void* b, int n, size_t size)
- +{
- + LoadBlock(S,b,n*size);
- + if (S->swap)
- + {
- + char* p=(char*) b;
- + char c;
- + switch (size)
- + {
- + case 1:
- + break;
- + case 2:
- + while (n--)
- + {
- + c=p[0]; p[0]=p[1]; p[1]=c;
- + p+=2;
- + }
- + break;
- + case 4:
- + while (n--)
- + {
- + c=p[0]; p[0]=p[3]; p[3]=c;
- + c=p[1]; p[1]=p[2]; p[2]=c;
- + p+=4;
- + }
- + break;
- + case 8:
- + while (n--)
- + {
- + c=p[0]; p[0]=p[7]; p[7]=c;
- + c=p[1]; p[1]=p[6]; p[6]=c;
- + c=p[2]; p[2]=p[5]; p[5]=c;
- + c=p[3]; p[3]=p[4]; p[4]=c;
- + p+=8;
- + }
- + break;
- + default:
- + IF(1, "bad size");
- + break;
- + }
- + }
- +}
- +
- static int LoadChar(LoadState* S)
- {
- char x;
- @@ -82,7 +125,7 @@ static lua_Integer LoadInteger(LoadState
-
- static TString* LoadString(LoadState* S)
- {
- - size_t size;
- + unsigned int size;
- LoadVar(S,size);
- if (size==0)
- return NULL;
- @@ -196,6 +239,7 @@ static void LoadHeader(LoadState* S)
- char s[LUAC_HEADERSIZE];
- luaU_header(h);
- LoadBlock(S,s,LUAC_HEADERSIZE);
- + S->swap=(s[6]!=h[6]); s[6]=h[6];
- IF (memcmp(h,s,LUAC_HEADERSIZE)!=0, "bad header");
- }
-
- @@ -230,7 +274,7 @@ void luaU_header (char* h)
- *h++=(char)LUAC_FORMAT;
- *h++=(char)*(char*)&x; /* endianness */
- *h++=(char)sizeof(int);
- - *h++=(char)sizeof(size_t);
- + *h++=(char)sizeof(unsigned int);
- *h++=(char)sizeof(Instruction);
- *h++=(char)sizeof(lua_Number);
-
|