mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-04 06:54:27 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			112 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
--- 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);
 | 
						|
 
 |