[package] lua: add zlib build dependency, fix inaccuracy in gzip loader
[openwrt/svn-archive/archive.git] / package / lua / patches-host / 030-archindependent-bytecode.patch
1 Index: lua-5.1.4/src/ldump.c
2 ===================================================================
3 --- lua-5.1.4.orig/src/ldump.c 2008-08-24 16:48:20.000000000 +0200
4 +++ lua-5.1.4/src/ldump.c 2008-08-24 16:48:52.000000000 +0200
5 @@ -67,12 +67,12 @@
6 {
7 if (s==NULL || getstr(s)==NULL)
8 {
9 - size_t size=0;
10 + unsigned int size=0;
11 DumpVar(size,D);
12 }
13 else
14 {
15 - size_t size=s->tsv.len+1; /* include trailing '\0' */
16 + unsigned int size=s->tsv.len+1; /* include trailing '\0' */
17 DumpVar(size,D);
18 DumpBlock(getstr(s),size,D);
19 }
20 Index: lua-5.1.4/src/lundump.c
21 ===================================================================
22 --- lua-5.1.4.orig/src/lundump.c 2008-08-24 16:48:20.000000000 +0200
23 +++ lua-5.1.4/src/lundump.c 2008-08-24 16:48:52.000000000 +0200
24 @@ -25,6 +25,7 @@
25 ZIO* Z;
26 Mbuffer* b;
27 const char* name;
28 + int swap;
29 } LoadState;
30
31 #ifdef LUAC_TRUST_BINARIES
32 @@ -40,7 +41,6 @@
33 }
34 #endif
35
36 -#define LoadMem(S,b,n,size) LoadBlock(S,b,(n)*(size))
37 #define LoadByte(S) (lu_byte)LoadChar(S)
38 #define LoadVar(S,x) LoadMem(S,&x,1,sizeof(x))
39 #define LoadVector(S,b,n,size) LoadMem(S,b,n,size)
40 @@ -51,6 +51,49 @@
41 IF (r!=0, "unexpected end");
42 }
43
44 +static void LoadMem (LoadState* S, void* b, int n, size_t size)
45 +{
46 + LoadBlock(S,b,n*size);
47 + if (S->swap)
48 + {
49 + char* p=(char*) b;
50 + char c;
51 + switch (size)
52 + {
53 + case 1:
54 + break;
55 + case 2:
56 + while (n--)
57 + {
58 + c=p[0]; p[0]=p[1]; p[1]=c;
59 + p+=2;
60 + }
61 + break;
62 + case 4:
63 + while (n--)
64 + {
65 + c=p[0]; p[0]=p[3]; p[3]=c;
66 + c=p[1]; p[1]=p[2]; p[2]=c;
67 + p+=4;
68 + }
69 + break;
70 + case 8:
71 + while (n--)
72 + {
73 + c=p[0]; p[0]=p[7]; p[7]=c;
74 + c=p[1]; p[1]=p[6]; p[6]=c;
75 + c=p[2]; p[2]=p[5]; p[5]=c;
76 + c=p[3]; p[3]=p[4]; p[4]=c;
77 + p+=8;
78 + }
79 + break;
80 + default:
81 + IF(1, "bad size");
82 + break;
83 + }
84 + }
85 +}
86 +
87 static int LoadChar(LoadState* S)
88 {
89 char x;
90 @@ -82,7 +125,7 @@
91
92 static TString* LoadString(LoadState* S)
93 {
94 - size_t size;
95 + unsigned int size;
96 LoadVar(S,size);
97 if (size==0)
98 return NULL;
99 @@ -196,6 +239,7 @@
100 char s[LUAC_HEADERSIZE];
101 luaU_header(h);
102 LoadBlock(S,s,LUAC_HEADERSIZE);
103 + S->swap=(s[6]!=h[6]); s[6]=h[6];
104 IF (memcmp(h,s,LUAC_HEADERSIZE)!=0, "bad header");
105 }
106
107 @@ -230,7 +274,7 @@
108 *h++=(char)LUAC_FORMAT;
109 *h++=(char)*(char*)&x; /* endianness */
110 *h++=(char)sizeof(int);
111 - *h++=(char)sizeof(size_t);
112 + *h++=(char)sizeof(unsigned int);
113 *h++=(char)sizeof(Instruction);
114 *h++=(char)sizeof(lua_Number);
115