diff options
author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2009-02-22 23:54:26 +0000 |
---|---|---|
committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2009-02-22 23:54:26 +0000 |
commit | 4d27062031388d19da5139f5c74333a31082ae01 (patch) | |
tree | 8ed07da043d48a28388ad3bf594e28be7571b506 /package/lua/patches-host/030-archindependent-bytecode.patch | |
parent | 871d69669e0e9f052110ddc4f7a37d0fc22da68b (diff) |
add back the old host patches for lua to improve portability
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@14631 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/lua/patches-host/030-archindependent-bytecode.patch')
-rw-r--r-- | package/lua/patches-host/030-archindependent-bytecode.patch | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/package/lua/patches-host/030-archindependent-bytecode.patch b/package/lua/patches-host/030-archindependent-bytecode.patch new file mode 100644 index 0000000000..b27592fbd7 --- /dev/null +++ b/package/lua/patches-host/030-archindependent-bytecode.patch @@ -0,0 +1,115 @@ +Index: lua-5.1.4/src/ldump.c +=================================================================== +--- lua-5.1.4.orig/src/ldump.c 2008-08-24 16:48:20.000000000 +0200 ++++ lua-5.1.4/src/ldump.c 2008-08-24 16:48:52.000000000 +0200 +@@ -67,12 +67,12 @@ + { + 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); + } +Index: lua-5.1.4/src/lundump.c +=================================================================== +--- lua-5.1.4.orig/src/lundump.c 2008-08-24 16:48:20.000000000 +0200 ++++ lua-5.1.4/src/lundump.c 2008-08-24 16:48:52.000000000 +0200 +@@ -25,6 +25,7 @@ + ZIO* Z; + Mbuffer* b; + const char* name; ++ int swap; + } LoadState; + + #ifdef LUAC_TRUST_BINARIES +@@ -40,7 +41,6 @@ + } + #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 @@ + 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 TString* LoadString(LoadState* S) + { +- size_t size; ++ unsigned int size; + LoadVar(S,size); + if (size==0) + return NULL; +@@ -196,6 +239,7 @@ + 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 @@ + *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); + |