static int LoadHeader (lua_State* L, ZIO* Z) { int version,swap; Number f=0,tf=TEST_NUMBER; LoadSignature(L,Z); version=ezgetc(L,Z); if (version>VERSION) luaO_verror(L,"`%.99s' too new:\n" " read version %d.%d; expected at most %d.%d", ZNAME(Z),V(version),V(VERSION)); if (version<VERSION0) /* check last major change */ luaO_verror(L,"`%.99s' too old:\n" " read version %d.%d; expected at least %d.%d", ZNAME(Z),V(version),V(VERSION)); swap=(luaU_endianess()!=ezgetc(L,Z)); /* need to swap bytes? */ TESTSIZE(sizeof(int)); TESTSIZE(sizeof(size_t)); TESTSIZE(sizeof(Instruction)); TESTSIZE(SIZE_INSTRUCTION); TESTSIZE(SIZE_OP); TESTSIZE(SIZE_B); TESTSIZE(sizeof(Number)); f=LoadNumber(L,Z,swap); if ((long)f!=(long)tf) /* disregard errors in last bit of fraction */ luaO_verror(L,"unknown number format in `%.99s':\n" " read " NUMBER_FMT "; expected " NUMBER_FMT, ZNAME(Z),f,tf); return swap; }
static void LoadSignature (LoadState* S) { const char* s=LUA_SIGNATURE; while (*s!=0 && ezgetc(S)==*s) ++s; if (*s!=0) luaG_runerror(S->L,"bad signature in %s",S->name); }
static void TestSize (lua_State* L, int s, const char* what, ZIO* Z) { int r=ezgetc(L,Z); if (r!=s) luaO_verror(L,"virtual machine mismatch in `%.99s':\n" " %.20s is %d but read %d",ZNAME(Z),what,s,r); }
static void LoadSignature (lua_State* L, ZIO* Z) { const char* s=SIGNATURE; while (*s!=0 && ezgetc(L,Z)==*s) ++s; if (*s!=0) luaO_verror(L,"bad signature in `%.99s'",ZNAME(Z)); }
static void LoadBlock (LoadState* S, void* b, size_t size) { if (S->swap) { char* p=(char*) b+size-1; int n=size; while (n--) *p--=(char)ezgetc(S); } else ezread(S,b,size); }
static void LoadBlock (lua_State* L, void* b, size_t size, ZIO* Z, int swap) { if (swap) { char *p=(char *) b+size-1; int n=size; while (n--) *p--=(char)ezgetc(L,Z); } else ezread(L,Z,b,size); }
static void LoadVector (LoadState* S, void* b, int m, size_t size) { if (S->swap) { char* q=(char*) b; while (m--) { char* p=q+size-1; int n=size; while (n--) *p--=(char)ezgetc(S); q+=size; } } else ezread(S,b,m*size); }
static void LoadVector (lua_State* L, void* b, int m, size_t size, ZIO* Z, int swap) { if (swap) { char *q=(char *) b; while (m--) { char *p=q+size-1; int n=size; while (n--) *p--=(char)ezgetc(L,Z); q+=size; } } else ezread(L,Z,b,m*size); }