From cedb09bd9220a173e766503e7742d06400905f66 Mon Sep 17 00:00:00 2001 From: James R Date: Fri, 21 Aug 2020 19:47:53 -0700 Subject: [PATCH] Fix pointers on LUA_Archive and LUA_UnArchive (servers joinable again) --- src/d_netcmd.c | 4 +- src/g_demo.c | 4 +- src/lua_script.c | 224 +++++++++++++++++++++++------------------------ src/lua_script.h | 4 +- src/p_saveg.c | 4 +- 5 files changed, 120 insertions(+), 120 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index ed0ad76be..4b6edbb87 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -4880,7 +4880,7 @@ static void Command_Archivetest_f(void) // test archive CONS_Printf("LUA_Archive...\n"); - LUA_Archive(save_p); + LUA_Archive(&save_p); WRITEUINT8(save_p, 0x7F); wrote = (UINT32)(save_p-buf); @@ -4891,7 +4891,7 @@ static void Command_Archivetest_f(void) // test unarchive save_p = buf; CONS_Printf("LUA_UnArchive...\n"); - LUA_UnArchive(save_p); + LUA_UnArchive(&save_p); i = READUINT8(save_p); if (i != 0x7F || wrote != (UINT32)(save_p-buf)) CONS_Printf("Savegame corrupted. (write %u, read %u)\n", wrote, (UINT32)(save_p-buf)); diff --git a/src/g_demo.c b/src/g_demo.c index 15fd6512d..9014ed585 100644 --- a/src/g_demo.c +++ b/src/g_demo.c @@ -2040,7 +2040,7 @@ void G_BeginRecording(void) WRITEUINT8(demo_p, 0xFF); // Denote the end of the player listing // player lua vars, always saved even if empty - LUA_Archive(demo_p); + LUA_Archive(&demo_p); WRITEUINT32(demo_p,P_GetInitSeed()); @@ -3006,7 +3006,7 @@ void G_DoPlayDemo(char *defdemoname) LUA_ClearState(); // No modeattacking check, DF_LUAVARS won't be present here. - LUA_UnArchive(demo_p); + LUA_UnArchive(&demo_p); } splitscreen = 0; diff --git a/src/lua_script.c b/src/lua_script.c index 1a359300a..b709bc0e7 100644 --- a/src/lua_script.c +++ b/src/lua_script.c @@ -899,7 +899,7 @@ static UINT8 GetUserdataArchType(int index) return ARCH_NULL; } -static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) +static UINT8 ArchiveValue(UINT8 **p, int TABLESINDEX, int myindex) { if (myindex < 0) myindex = lua_gettop(gL)+1+myindex; @@ -907,34 +907,34 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) { case LUA_TNONE: case LUA_TNIL: - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); break; // This might be a problem. D: case LUA_TLIGHTUSERDATA: case LUA_TTHREAD: case LUA_TFUNCTION: - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); return 2; case LUA_TBOOLEAN: - WRITEUINT8(p, lua_toboolean(gL, myindex) ? ARCH_TRUE : ARCH_FALSE); + WRITEUINT8(*p, lua_toboolean(gL, myindex) ? ARCH_TRUE : ARCH_FALSE); break; case LUA_TNUMBER: { lua_Integer number = lua_tointeger(gL, myindex); if (number >= INT8_MIN && number <= INT8_MAX) { - WRITEUINT8(p, ARCH_INT8); - WRITESINT8(p, number); + WRITEUINT8(*p, ARCH_INT8); + WRITESINT8(*p, number); } else if (number >= INT16_MIN && number <= INT16_MAX) { - WRITEUINT8(p, ARCH_INT16); - WRITEINT16(p, number); + WRITEUINT8(*p, ARCH_INT16); + WRITEINT16(*p, number); } else { - WRITEUINT8(p, ARCH_INT32); - WRITEFIXED(p, number); + WRITEUINT8(*p, ARCH_INT32); + WRITEFIXED(*p, number); } break; } @@ -952,16 +952,16 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) // -- Monster Iestyn 05/08/18 if (len < 255) { - WRITEUINT8(p, ARCH_SMALLSTRING); - WRITEUINT8(p, len); // save size of string + WRITEUINT8(*p, ARCH_SMALLSTRING); + WRITEUINT8(*p, len); // save size of string } else { - WRITEUINT8(p, ARCH_LARGESTRING); - WRITEUINT32(p, len); // save size of string + WRITEUINT8(*p, ARCH_LARGESTRING); + WRITEUINT32(*p, len); // save size of string } while (i < len) - WRITECHAR(p, s[i++]); // write chars individually, including the embedded zeros + WRITECHAR(*p, s[i++]); // write chars individually, including the embedded zeros break; } case LUA_TTABLE: @@ -983,8 +983,8 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) if (!found) t++; - WRITEUINT8(p, ARCH_TABLE); - WRITEUINT16(p, t); + WRITEUINT8(*p, ARCH_TABLE); + WRITEUINT16(*p, t); if (!found) { @@ -1000,25 +1000,25 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) case ARCH_MOBJINFO: { mobjinfo_t *info = *((mobjinfo_t **)lua_touserdata(gL, myindex)); - WRITEUINT8(p, ARCH_MOBJINFO); - WRITEUINT16(p, info - mobjinfo); + WRITEUINT8(*p, ARCH_MOBJINFO); + WRITEUINT16(*p, info - mobjinfo); break; } case ARCH_STATE: { state_t *state = *((state_t **)lua_touserdata(gL, myindex)); - WRITEUINT8(p, ARCH_STATE); - WRITEUINT16(p, state - states); + WRITEUINT8(*p, ARCH_STATE); + WRITEUINT16(*p, state - states); break; } case ARCH_MOBJ: { mobj_t *mobj = *((mobj_t **)lua_touserdata(gL, myindex)); if (!mobj) - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); else { - WRITEUINT8(p, ARCH_MOBJ); - WRITEUINT32(p, mobj->mobjnum); + WRITEUINT8(*p, ARCH_MOBJ); + WRITEUINT32(*p, mobj->mobjnum); } break; } @@ -1026,10 +1026,10 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) { player_t *player = *((player_t **)lua_touserdata(gL, myindex)); if (!player) - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); else { - WRITEUINT8(p, ARCH_PLAYER); - WRITEUINT8(p, player - players); + WRITEUINT8(*p, ARCH_PLAYER); + WRITEUINT8(*p, player - players); } break; } @@ -1037,10 +1037,10 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) { mapthing_t *mapthing = *((mapthing_t **)lua_touserdata(gL, myindex)); if (!mapthing) - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); else { - WRITEUINT8(p, ARCH_MAPTHING); - WRITEUINT16(p, mapthing - mapthings); + WRITEUINT8(*p, ARCH_MAPTHING); + WRITEUINT16(*p, mapthing - mapthings); } break; } @@ -1048,10 +1048,10 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) { vertex_t *vertex = *((vertex_t **)lua_touserdata(gL, myindex)); if (!vertex) - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); else { - WRITEUINT8(p, ARCH_VERTEX); - WRITEUINT16(p, vertex - vertexes); + WRITEUINT8(*p, ARCH_VERTEX); + WRITEUINT16(*p, vertex - vertexes); } break; } @@ -1059,10 +1059,10 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) { line_t *line = *((line_t **)lua_touserdata(gL, myindex)); if (!line) - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); else { - WRITEUINT8(p, ARCH_LINE); - WRITEUINT16(p, line - lines); + WRITEUINT8(*p, ARCH_LINE); + WRITEUINT16(*p, line - lines); } break; } @@ -1070,10 +1070,10 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) { side_t *side = *((side_t **)lua_touserdata(gL, myindex)); if (!side) - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); else { - WRITEUINT8(p, ARCH_SIDE); - WRITEUINT16(p, side - sides); + WRITEUINT8(*p, ARCH_SIDE); + WRITEUINT16(*p, side - sides); } break; } @@ -1081,10 +1081,10 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) { subsector_t *subsector = *((subsector_t **)lua_touserdata(gL, myindex)); if (!subsector) - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); else { - WRITEUINT8(p, ARCH_SUBSECTOR); - WRITEUINT16(p, subsector - subsectors); + WRITEUINT8(*p, ARCH_SUBSECTOR); + WRITEUINT16(*p, subsector - subsectors); } break; } @@ -1092,10 +1092,10 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) { sector_t *sector = *((sector_t **)lua_touserdata(gL, myindex)); if (!sector) - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); else { - WRITEUINT8(p, ARCH_SECTOR); - WRITEUINT16(p, sector - sectors); + WRITEUINT8(*p, ARCH_SECTOR); + WRITEUINT16(*p, sector - sectors); } break; } @@ -1104,10 +1104,10 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) { seg_t *seg = *((seg_t **)lua_touserdata(gL, myindex)); if (!seg) - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); else { - WRITEUINT8(p, ARCH_SEG); - WRITEUINT16(p, seg - segs); + WRITEUINT8(*p, ARCH_SEG); + WRITEUINT16(*p, seg - segs); } break; } @@ -1115,10 +1115,10 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) { node_t *node = *((node_t **)lua_touserdata(gL, myindex)); if (!node) - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); else { - WRITEUINT8(p, ARCH_NODE); - WRITEUINT16(p, node - nodes); + WRITEUINT8(*p, ARCH_NODE); + WRITEUINT16(*p, node - nodes); } break; } @@ -1127,16 +1127,16 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) { ffloor_t *rover = *((ffloor_t **)lua_touserdata(gL, myindex)); if (!rover) - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); else { UINT16 i = P_GetFFloorID(rover); if (i == UINT16_MAX) // invalid ID - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); else { - WRITEUINT8(p, ARCH_FFLOOR); - WRITEUINT16(p, rover->target - sectors); - WRITEUINT16(p, i); + WRITEUINT8(*p, ARCH_FFLOOR); + WRITEUINT16(*p, rover->target - sectors); + WRITEUINT16(*p, i); } } break; @@ -1145,10 +1145,10 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) { pslope_t *slope = *((pslope_t **)lua_touserdata(gL, myindex)); if (!slope) - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); else { - WRITEUINT8(p, ARCH_SLOPE); - WRITEUINT16(p, slope->id); + WRITEUINT8(*p, ARCH_SLOPE); + WRITEUINT16(*p, slope->id); } break; } @@ -1156,10 +1156,10 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) { mapheader_t *header = *((mapheader_t **)lua_touserdata(gL, myindex)); if (!header) - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); else { - WRITEUINT8(p, ARCH_MAPHEADER); - WRITEUINT16(p, header - *mapheaderinfo); + WRITEUINT8(*p, ARCH_MAPHEADER); + WRITEUINT16(*p, header - *mapheaderinfo); } break; } @@ -1167,12 +1167,12 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) case ARCH_SKINCOLOR: { skincolor_t *info = *((skincolor_t **)lua_touserdata(gL, myindex)); - WRITEUINT8(p, ARCH_SKINCOLOR); - WRITEUINT16(p, info - skincolors); + WRITEUINT8(*p, ARCH_SKINCOLOR); + WRITEUINT16(*p, info - skincolors); break; } default: - WRITEUINT8(p, ARCH_NULL); + WRITEUINT8(*p, ARCH_NULL); return 2; } break; @@ -1180,14 +1180,14 @@ static UINT8 ArchiveValue(UINT8 *p, int TABLESINDEX, int myindex) return 0; } -static void ArchiveExtVars(UINT8 *p, void *pointer, const char *ptype) +static void ArchiveExtVars(UINT8 **p, void *pointer, const char *ptype) { int TABLESINDEX; UINT16 i; if (!gL) { if (fastcmp(ptype,"player")) // players must always be included, even if no vars - WRITEUINT16(p, 0); + WRITEUINT16(*p, 0); return; } @@ -1203,7 +1203,7 @@ static void ArchiveExtVars(UINT8 *p, void *pointer, const char *ptype) { // no extra values table lua_pop(gL, 1); if (fastcmp(ptype,"player")) // players must always be included, even if no vars - WRITEUINT16(p, 0); + WRITEUINT16(*p, 0); return; } @@ -1215,19 +1215,19 @@ static void ArchiveExtVars(UINT8 *p, void *pointer, const char *ptype) if (i == 0) { if (fastcmp(ptype,"player")) // always include players even if they have no extra variables - WRITEUINT16(p, 0); + WRITEUINT16(*p, 0); lua_pop(gL, 1); return; } if (fastcmp(ptype,"mobj")) // mobjs must write their mobjnum as a header - WRITEUINT32(p, ((mobj_t *)pointer)->mobjnum); - WRITEUINT16(p, i); + WRITEUINT32(*p, ((mobj_t *)pointer)->mobjnum); + WRITEUINT16(*p, i); lua_pushnil(gL); while (lua_next(gL, -2)) { I_Assert(lua_type(gL, -2) == LUA_TSTRING); - WRITESTRING(p, lua_tostring(gL, -2)); + WRITESTRING(*p, lua_tostring(gL, -2)); if (ArchiveValue(p, TABLESINDEX, -1) == 2) CONS_Alert(CONS_ERROR, "Type of value for %s entry '%s' (%s) could not be archived!\n", ptype, lua_tostring(gL, -2), luaL_typename(gL, -1)); lua_pop(gL, 1); @@ -1241,11 +1241,11 @@ static int NetArchive(lua_State *L) int TABLESINDEX = lua_upvalueindex(1); int i, n = lua_gettop(L); for (i = 1; i <= n; i++) - ArchiveValue(save_p, TABLESINDEX, i); + ArchiveValue(&save_p, TABLESINDEX, i); return n; } -static void ArchiveTables(UINT8 *p) +static void ArchiveTables(UINT8 **p) { int TABLESINDEX; UINT16 i, n; @@ -1285,13 +1285,13 @@ static void ArchiveTables(UINT8 *p) lua_pop(gL, 1); } lua_pop(gL, 1); - WRITEUINT8(p, ARCH_TEND); + WRITEUINT8(*p, ARCH_TEND); } } -static UINT8 UnArchiveValue(UINT8 *p, int TABLESINDEX) +static UINT8 UnArchiveValue(UINT8 **p, int TABLESINDEX) { - UINT8 type = READUINT8(p); + UINT8 type = READUINT8(*p); switch (type) { case ARCH_NULL: @@ -1304,13 +1304,13 @@ static UINT8 UnArchiveValue(UINT8 *p, int TABLESINDEX) lua_pushboolean(gL, false); break; case ARCH_INT8: - lua_pushinteger(gL, READSINT8(p)); + lua_pushinteger(gL, READSINT8(*p)); break; case ARCH_INT16: - lua_pushinteger(gL, READINT16(p)); + lua_pushinteger(gL, READINT16(*p)); break; case ARCH_INT32: - lua_pushinteger(gL, READFIXED(p)); + lua_pushinteger(gL, READFIXED(*p)); break; case ARCH_SMALLSTRING: case ARCH_LARGESTRING: @@ -1324,20 +1324,20 @@ static UINT8 UnArchiveValue(UINT8 *p, int TABLESINDEX) // (i.e. we can't use READSTRING either) // -- Monster Iestyn 05/08/18 if (type == ARCH_SMALLSTRING) - len = READUINT8(p); // length of string, including embedded zeros + len = READUINT8(*p); // length of string, including embedded zeros else - len = READUINT32(p); // length of string, including embedded zeros + len = READUINT32(*p); // length of string, including embedded zeros value = malloc(len); // make temp buffer of size len // now read the actual string while (i < len) - value[i++] = READCHAR(p); // read chars individually, including the embedded zeros + value[i++] = READCHAR(*p); // read chars individually, including the embedded zeros lua_pushlstring(gL, value, len); // push the string (note: this function supports embedded zeros) free(value); // free the buffer break; } case ARCH_TABLE: { - UINT16 tid = READUINT16(p); + UINT16 tid = READUINT16(*p); lua_rawgeti(gL, TABLESINDEX, tid); if (lua_isnil(gL, -1)) { @@ -1350,60 +1350,60 @@ static UINT8 UnArchiveValue(UINT8 *p, int TABLESINDEX) break; } case ARCH_MOBJINFO: - LUA_PushUserdata(gL, &mobjinfo[READUINT16(p)], META_MOBJINFO); + LUA_PushUserdata(gL, &mobjinfo[READUINT16(*p)], META_MOBJINFO); break; case ARCH_STATE: - LUA_PushUserdata(gL, &states[READUINT16(p)], META_STATE); + LUA_PushUserdata(gL, &states[READUINT16(*p)], META_STATE); break; case ARCH_MOBJ: - LUA_PushUserdata(gL, P_FindNewPosition(READUINT32(p)), META_MOBJ); + LUA_PushUserdata(gL, P_FindNewPosition(READUINT32(*p)), META_MOBJ); break; case ARCH_PLAYER: - LUA_PushUserdata(gL, &players[READUINT8(p)], META_PLAYER); + LUA_PushUserdata(gL, &players[READUINT8(*p)], META_PLAYER); break; case ARCH_MAPTHING: - LUA_PushUserdata(gL, &mapthings[READUINT16(p)], META_MAPTHING); + LUA_PushUserdata(gL, &mapthings[READUINT16(*p)], META_MAPTHING); break; case ARCH_VERTEX: - LUA_PushUserdata(gL, &vertexes[READUINT16(p)], META_VERTEX); + LUA_PushUserdata(gL, &vertexes[READUINT16(*p)], META_VERTEX); break; case ARCH_LINE: - LUA_PushUserdata(gL, &lines[READUINT16(p)], META_LINE); + LUA_PushUserdata(gL, &lines[READUINT16(*p)], META_LINE); break; case ARCH_SIDE: - LUA_PushUserdata(gL, &sides[READUINT16(p)], META_SIDE); + LUA_PushUserdata(gL, &sides[READUINT16(*p)], META_SIDE); break; case ARCH_SUBSECTOR: - LUA_PushUserdata(gL, &subsectors[READUINT16(p)], META_SUBSECTOR); + LUA_PushUserdata(gL, &subsectors[READUINT16(*p)], META_SUBSECTOR); break; case ARCH_SECTOR: - LUA_PushUserdata(gL, §ors[READUINT16(p)], META_SECTOR); + LUA_PushUserdata(gL, §ors[READUINT16(*p)], META_SECTOR); break; #ifdef HAVE_LUA_SEGS case ARCH_SEG: - LUA_PushUserdata(gL, &segs[READUINT16(p)], META_SEG); + LUA_PushUserdata(gL, &segs[READUINT16(*p)], META_SEG); break; case ARCH_NODE: - LUA_PushUserdata(gL, &nodes[READUINT16(p)], META_NODE); + LUA_PushUserdata(gL, &nodes[READUINT16(*p)], META_NODE); break; #endif case ARCH_FFLOOR: { - sector_t *sector = §ors[READUINT16(p)]; - UINT16 id = READUINT16(p); + sector_t *sector = §ors[READUINT16(*p)]; + UINT16 id = READUINT16(*p); ffloor_t *rover = P_GetFFloorByID(sector, id); if (rover) LUA_PushUserdata(gL, rover, META_FFLOOR); break; } case ARCH_SLOPE: - LUA_PushUserdata(gL, P_SlopeById(READUINT16(p)), META_SLOPE); + LUA_PushUserdata(gL, P_SlopeById(READUINT16(*p)), META_SLOPE); break; case ARCH_MAPHEADER: - LUA_PushUserdata(gL, mapheaderinfo[READUINT16(p)], META_MAPHEADER); + LUA_PushUserdata(gL, mapheaderinfo[READUINT16(*p)], META_MAPHEADER); break; case ARCH_SKINCOLOR: - LUA_PushUserdata(gL, &skincolors[READUINT16(p)], META_SKINCOLOR); + LUA_PushUserdata(gL, &skincolors[READUINT16(*p)], META_SKINCOLOR); break; case ARCH_TEND: return 1; @@ -1411,10 +1411,10 @@ static UINT8 UnArchiveValue(UINT8 *p, int TABLESINDEX) return 0; } -static void UnArchiveExtVars(UINT8 *p, void *pointer) +static void UnArchiveExtVars(UINT8 **p, void *pointer) { int TABLESINDEX; - UINT16 field_count = READUINT16(p); + UINT16 field_count = READUINT16(*p); UINT16 i; char field[1024]; @@ -1427,7 +1427,7 @@ static void UnArchiveExtVars(UINT8 *p, void *pointer) for (i = 0; i < field_count; i++) { - READSTRING(p, field); + READSTRING(*p, field); UnArchiveValue(p, TABLESINDEX); lua_setfield(gL, -2, field); } @@ -1445,11 +1445,11 @@ static int NetUnArchive(lua_State *L) int TABLESINDEX = lua_upvalueindex(1); int i, n = lua_gettop(L); for (i = 1; i <= n; i++) - UnArchiveValue(save_p, TABLESINDEX); + UnArchiveValue(&save_p, TABLESINDEX); return n; } -static void UnArchiveTables(UINT8 *p) +static void UnArchiveTables(UINT8 **p) { int TABLESINDEX; UINT16 i, n; @@ -1489,7 +1489,7 @@ void LUA_Step(void) lua_gc(gL, LUA_GCSTEP, 1); } -void LUA_Archive(UINT8 *p) +void LUA_Archive(UINT8 **p) { INT32 i; thinker_t *th; @@ -1505,7 +1505,7 @@ void LUA_Archive(UINT8 *p) ArchiveExtVars(p, &players[i], "player"); } - if (p == save_p) + if (p == &save_p) { if (gamestate == GS_LEVEL) { @@ -1520,7 +1520,7 @@ void LUA_Archive(UINT8 *p) } } - WRITEUINT32(p, UINT32_MAX); // end of mobjs marker, replaces mobjnum. + WRITEUINT32(*p, UINT32_MAX); // end of mobjs marker, replaces mobjnum. LUAh_NetArchiveHook(NetArchive); // call the NetArchive hook in archive mode } @@ -1531,7 +1531,7 @@ void LUA_Archive(UINT8 *p) lua_pop(gL, 1); // pop tables } -void LUA_UnArchive(UINT8 *p) +void LUA_UnArchive(UINT8 **p) { UINT32 mobjnum; INT32 i; @@ -1547,10 +1547,10 @@ void LUA_UnArchive(UINT8 *p) UnArchiveExtVars(p, &players[i]); } - if (p == save_p) + if (p == &save_p) { do { - mobjnum = READUINT32(p); // read a mobjnum + mobjnum = READUINT32(*p); // read a mobjnum for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next) { if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed) diff --git a/src/lua_script.h b/src/lua_script.h index 2ba54453e..cf4efcccd 100644 --- a/src/lua_script.h +++ b/src/lua_script.h @@ -54,8 +54,8 @@ void LUA_InvalidateLevel(void); void LUA_InvalidateMapthings(void); void LUA_InvalidatePlayer(player_t *player); void LUA_Step(void); -void LUA_Archive(UINT8 *p); -void LUA_UnArchive(UINT8 *p); +void LUA_Archive(UINT8 **p); +void LUA_UnArchive(UINT8 **p); int LUA_PushGlobals(lua_State *L, const char *word); int LUA_WriteGlobals(lua_State *L, const char *word); diff --git a/src/p_saveg.c b/src/p_saveg.c index 781c63426..204c8cc3b 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -4373,7 +4373,7 @@ void P_SaveNetGame(void) P_NetArchiveTubeWaypoints(); P_NetArchiveWaypoints(); } - LUA_Archive(save_p); + LUA_Archive(&save_p); P_ArchiveLuabanksAndConsistency(); } @@ -4417,7 +4417,7 @@ boolean P_LoadNetGame(void) P_RelinkPointers(); P_FinishMobjs(); } - LUA_UnArchive(save_p); + LUA_UnArchive(&save_p); // This is stupid and hacky, but maybe it'll work! P_SetRandSeed(P_GetInitSeed());