mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Contain end & size into savebuffer_t
I would've liked to make it use a single allocate function to do this very cleanly, but these cases were very clearly not meant to be standardized and use wildly different methods to allocate & free...
This commit is contained in:
parent
d4beb91e18
commit
56ae811ced
8 changed files with 67 additions and 38 deletions
|
|
@ -1128,8 +1128,6 @@ static boolean SV_SendServerConfig(INT32 node)
|
|||
return waspacketsent;
|
||||
}
|
||||
|
||||
#define SAVEGAMESIZE (768*1024)
|
||||
|
||||
static boolean SV_ResendingSavegameToAnyone(void)
|
||||
{
|
||||
INT32 i;
|
||||
|
|
@ -1148,7 +1146,8 @@ static void SV_SendSaveGame(INT32 node, boolean resending)
|
|||
UINT8 *buffertosend;
|
||||
|
||||
// first save it in a malloced buffer
|
||||
save.buffer = (UINT8 *)malloc(SAVEGAMESIZE);
|
||||
save.size = NETSAVEGAMESIZE;
|
||||
save.buffer = (UINT8 *)malloc(save.size);
|
||||
if (!save.buffer)
|
||||
{
|
||||
CONS_Alert(CONS_ERROR, M_GetText("No more free memory for savegame\n"));
|
||||
|
|
@ -1157,14 +1156,14 @@ static void SV_SendSaveGame(INT32 node, boolean resending)
|
|||
|
||||
// Leave room for the uncompressed length.
|
||||
save.p = save.buffer + sizeof(UINT32);
|
||||
save.end = save.buffer + save.size;
|
||||
|
||||
P_SaveNetGame(&save, resending);
|
||||
|
||||
length = save.p - save.buffer;
|
||||
if (length > SAVEGAMESIZE)
|
||||
if (length > NETSAVEGAMESIZE)
|
||||
{
|
||||
free(save.buffer);
|
||||
save.p = NULL;
|
||||
I_Error("Savegame buffer overrun");
|
||||
}
|
||||
|
||||
|
|
@ -1178,10 +1177,9 @@ static void SV_SendSaveGame(INT32 node, boolean resending)
|
|||
}
|
||||
|
||||
// Attempt to compress it.
|
||||
if((compressedlen = lzf_compress(save.buffer + sizeof(UINT32), length - sizeof(UINT32), compressedsave + sizeof(UINT32), length - sizeof(UINT32) - 1)))
|
||||
if ((compressedlen = lzf_compress(save.buffer + sizeof(UINT32), length - sizeof(UINT32), compressedsave + sizeof(UINT32), length - sizeof(UINT32) - 1)))
|
||||
{
|
||||
// Compressing succeeded; send compressed data
|
||||
|
||||
free(save.buffer);
|
||||
|
||||
// State that we're compressed.
|
||||
|
|
@ -1192,7 +1190,6 @@ static void SV_SendSaveGame(INT32 node, boolean resending)
|
|||
else
|
||||
{
|
||||
// Compression failed to make it smaller; send original
|
||||
|
||||
free(compressedsave);
|
||||
|
||||
// State that we're not compressed
|
||||
|
|
@ -1201,7 +1198,6 @@ static void SV_SendSaveGame(INT32 node, boolean resending)
|
|||
}
|
||||
|
||||
AddRamToSendQueue(node, buffertosend, length, SF_RAM, 0);
|
||||
save.p = NULL;
|
||||
|
||||
// Remember when we started sending the savegame so we can handle timeouts
|
||||
sendingsavegame[node] = true;
|
||||
|
|
@ -1224,20 +1220,22 @@ static void SV_SavedGame(void)
|
|||
sprintf(tmpsave, "%s" PATHSEP TMPSAVENAME, srb2home);
|
||||
|
||||
// first save it in a malloced buffer
|
||||
save.p = save.buffer = (UINT8 *)malloc(SAVEGAMESIZE);
|
||||
save.size = NETSAVEGAMESIZE;
|
||||
save.p = save.buffer = (UINT8 *)malloc(save.size);
|
||||
if (!save.p)
|
||||
{
|
||||
CONS_Alert(CONS_ERROR, M_GetText("No more free memory for savegame\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
save.end = save.buffer + save.size;
|
||||
|
||||
P_SaveNetGame(&save, false);
|
||||
|
||||
length = save.p - save.buffer;
|
||||
if (length > SAVEGAMESIZE)
|
||||
if (length > NETSAVEGAMESIZE)
|
||||
{
|
||||
free(save.buffer);
|
||||
save.p = NULL;
|
||||
I_Error("Savegame buffer overrun");
|
||||
}
|
||||
|
||||
|
|
@ -1246,7 +1244,6 @@ static void SV_SavedGame(void)
|
|||
CONS_Printf(M_GetText("Didn't save %s for netgame"), tmpsave);
|
||||
|
||||
free(save.buffer);
|
||||
save.p = NULL;
|
||||
}
|
||||
|
||||
#undef TMPSAVENAME
|
||||
|
|
@ -1272,15 +1269,21 @@ static void CL_LoadReceivedSavegame(boolean reloading)
|
|||
}
|
||||
|
||||
save.p = save.buffer;
|
||||
save.size = length;
|
||||
save.end = save.buffer + save.size;
|
||||
|
||||
// Decompress saved game if necessary.
|
||||
decompressedlen = READUINT32(save.p);
|
||||
if(decompressedlen > 0)
|
||||
{
|
||||
UINT8 *decompressedbuffer = Z_Malloc(decompressedlen, PU_STATIC, NULL);
|
||||
|
||||
lzf_decompress(save.p, length - sizeof(UINT32), decompressedbuffer, decompressedlen);
|
||||
Z_Free(save.buffer);
|
||||
|
||||
save.p = save.buffer = decompressedbuffer;
|
||||
save.size = decompressedlen;
|
||||
save.end = save.buffer + decompressedlen;
|
||||
}
|
||||
|
||||
paused = false;
|
||||
|
|
@ -6075,6 +6078,8 @@ rewind_t *CL_SaveRewindPoint(size_t demopos)
|
|||
return NULL;
|
||||
|
||||
save.buffer = save.p = rewind->savebuffer;
|
||||
save.size = NETSAVEGAMESIZE;
|
||||
save.end = save.buffer + save.size;
|
||||
|
||||
P_SaveNetGame(&save, false);
|
||||
|
||||
|
|
@ -6102,6 +6107,8 @@ rewind_t *CL_RewindToTime(tic_t time)
|
|||
return NULL;
|
||||
|
||||
save.buffer = save.p = rewindhead->savebuffer;
|
||||
save.size = NETSAVEGAMESIZE;
|
||||
save.end = save.buffer + save.size;
|
||||
|
||||
P_LoadNetGame(&save, false);
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
#include "mserv.h"
|
||||
|
||||
#include "k_pwrlv.h" // PWRLV_NUMTYPES
|
||||
#include "p_saveg.h" // NETSAVEGAMESIZE
|
||||
|
||||
/*
|
||||
The 'packet version' is used to distinguish packet formats.
|
||||
|
|
@ -530,7 +531,7 @@ extern boolean hu_stopped;
|
|||
//
|
||||
|
||||
struct rewind_t {
|
||||
UINT8 savebuffer[(768*1024)];
|
||||
UINT8 savebuffer[NETSAVEGAMESIZE];
|
||||
tic_t leveltime;
|
||||
size_t demopos;
|
||||
|
||||
|
|
|
|||
|
|
@ -5794,7 +5794,9 @@ static void Command_Archivetest_f(void)
|
|||
((mobj_t *)th)->mobjnum = i++;
|
||||
|
||||
// allocate buffer
|
||||
save.buffer = save.p = ZZ_Alloc(1024);
|
||||
save.size = 1024;
|
||||
save.buffer = save.p = ZZ_Alloc(save.size);
|
||||
save.end = save.buffer + save.size;
|
||||
|
||||
// test archive
|
||||
CONS_Printf("LUA_Archive...\n");
|
||||
|
|
|
|||
26
src/g_demo.c
26
src/g_demo.c
|
|
@ -72,7 +72,6 @@ tic_t demostarttime; // for comparative timing purposes
|
|||
static char demoname[MAX_WADPATH];
|
||||
static savebuffer_t demobuf;
|
||||
static UINT8 *demotime_p, *demoinfo_p;
|
||||
static UINT8 *demoend;
|
||||
static UINT8 demoflags;
|
||||
boolean demosynced = true; // console warning message
|
||||
|
||||
|
|
@ -151,7 +150,7 @@ demoghost *ghosts = NULL;
|
|||
#define ZT_FLAGS 0x80
|
||||
// OUT OF ZIPTICS...
|
||||
|
||||
#define DEMOMARKER 0x80 // demoend
|
||||
#define DEMOMARKER 0x80 // demobuf.end
|
||||
|
||||
UINT8 demo_extradata[MAXPLAYERS];
|
||||
UINT8 demo_writerng; // 0=no, 1=yes, 2=yes but on a timeout
|
||||
|
|
@ -630,7 +629,7 @@ void G_WriteDemoTiccmd(ticcmd_t *cmd, INT32 playernum)
|
|||
|
||||
// attention here for the ticcmd size!
|
||||
// latest demos with mouse aiming byte in ticcmd
|
||||
if (!(demoflags & DF_GHOST) && ziptic_p > demoend - 9)
|
||||
if (!(demoflags & DF_GHOST) && ziptic_p > demobuf.end - 9)
|
||||
{
|
||||
G_CheckDemoStatus(); // no more space
|
||||
return;
|
||||
|
|
@ -703,7 +702,7 @@ void G_WriteAllGhostTics(void)
|
|||
|
||||
// attention here for the ticcmd size!
|
||||
// latest demos with mouse aiming byte in ticcmd
|
||||
if (demobuf.p >= demoend - (13 + 9 + 9))
|
||||
if (demobuf.p >= demobuf.end - (13 + 9 + 9))
|
||||
{
|
||||
G_CheckDemoStatus(); // no more space
|
||||
return;
|
||||
|
|
@ -1995,7 +1994,7 @@ void G_WriteMetalTic(mobj_t *metal)
|
|||
|
||||
// attention here for the ticcmd size!
|
||||
// latest demos with mouse aiming byte in ticcmd
|
||||
if (demobuf.p >= demoend - 32)
|
||||
if (demobuf.p >= demobuf.end - 32)
|
||||
{
|
||||
G_StopMetalRecording(false); // no more space
|
||||
return;
|
||||
|
|
@ -2013,13 +2012,17 @@ void G_RecordDemo(const char *name)
|
|||
strcat(demoname, ".lmp");
|
||||
//@TODO make a maxdemosize cvar
|
||||
maxsize = 1024*1024*2;
|
||||
|
||||
if (M_CheckParm("-maxdemo") && M_IsNextParm())
|
||||
maxsize = atoi(M_GetNextParm()) * 1024;
|
||||
|
||||
// if (demobuf.buffer)
|
||||
// free(demobuf.buffer);
|
||||
// P_SaveBufferFree(&demobuf);
|
||||
|
||||
demobuf.size = maxsize;
|
||||
demobuf.buffer = (UINT8 *)malloc(maxsize);
|
||||
demobuf.p = NULL;
|
||||
demobuf.buffer = malloc(maxsize);
|
||||
demoend = demobuf.buffer + maxsize;
|
||||
demobuf.end = demobuf.buffer + demobuf.size;
|
||||
|
||||
demo.recording = true;
|
||||
}
|
||||
|
|
@ -2030,9 +2033,12 @@ void G_RecordMetal(void)
|
|||
maxsize = 1024*1024;
|
||||
if (M_CheckParm("-maxdemo") && M_IsNextParm())
|
||||
maxsize = atoi(M_GetNextParm()) * 1024;
|
||||
|
||||
demobuf.size = maxsize;
|
||||
demobuf.buffer = (UINT8 *)malloc(maxsize);
|
||||
demobuf.p = NULL;
|
||||
demobuf.buffer = malloc(maxsize);
|
||||
demoend = demobuf.buffer + maxsize;
|
||||
demobuf.end = demobuf.buffer + demobuf.size;
|
||||
|
||||
metalrecording = true;
|
||||
}
|
||||
|
||||
|
|
|
|||
23
src/g_game.c
23
src/g_game.c
|
|
@ -72,9 +72,6 @@ UINT8 ultimatemode = false;
|
|||
|
||||
JoyType_t Joystick[MAXSPLITSCREENPLAYERS];
|
||||
|
||||
// 1024 bytes is plenty for a savegame
|
||||
#define SAVEGAMESIZE (1024)
|
||||
|
||||
// SRB2kart
|
||||
char gamedatafilename[64] =
|
||||
#ifdef DEVELOP
|
||||
|
|
@ -4531,12 +4528,14 @@ void G_SaveGameData(void)
|
|||
}
|
||||
length += nummapheaders * (MAXMAPLUMPNAME+1+4+4);
|
||||
|
||||
save.p = save.buffer = (UINT8 *)malloc(length);
|
||||
save.size = length;
|
||||
save.p = save.buffer = (UINT8 *)malloc(save.size);
|
||||
if (!save.p)
|
||||
{
|
||||
CONS_Alert(CONS_ERROR, M_GetText("No more free memory for saving game data\n"));
|
||||
return;
|
||||
}
|
||||
save.end = save.buffer + save.size;
|
||||
|
||||
// Version test
|
||||
|
||||
|
|
@ -4624,7 +4623,6 @@ void G_SaveGameData(void)
|
|||
|
||||
FIL_WriteFile(va(pandf, srb2home, gamedatafilename), save.buffer, length);
|
||||
free(save.buffer);
|
||||
save.p = save.buffer = NULL;
|
||||
|
||||
// Also save profiles here.
|
||||
PR_SaveProfiles();
|
||||
|
|
@ -4664,6 +4662,8 @@ void G_LoadGame(UINT32 slot, INT16 mapoverride)
|
|||
}
|
||||
|
||||
save.p = save.buffer;
|
||||
save.size = length;
|
||||
save.end = save.buffer + save.size;
|
||||
|
||||
memset(vcheck, 0, sizeof (vcheck));
|
||||
sprintf(vcheck, (marathonmode ? "back-up %d" : "version %d"), VERSION);
|
||||
|
|
@ -4678,7 +4678,6 @@ void G_LoadGame(UINT32 slot, INT16 mapoverride)
|
|||
M_StartMessage(M_GetText("Save game from different version\n\nPress ESC\n"), NULL, MM_NOTHING);
|
||||
Command_ExitGame_f();
|
||||
Z_Free(save.buffer);
|
||||
save.p = save.buffer = NULL;
|
||||
|
||||
// no cheating!
|
||||
memset(&savedata, 0, sizeof(savedata));
|
||||
|
|
@ -4714,7 +4713,6 @@ void G_LoadGame(UINT32 slot, INT16 mapoverride)
|
|||
|
||||
// done
|
||||
Z_Free(save.buffer);
|
||||
save.p = save.buffer = NULL;
|
||||
|
||||
// gameaction = ga_nothing;
|
||||
// G_SetGamestate(GS_LEVEL);
|
||||
|
|
@ -4753,12 +4751,14 @@ void G_SaveGame(UINT32 slot, INT16 mapnum)
|
|||
char name[VERSIONSIZE];
|
||||
size_t length;
|
||||
|
||||
save.p = save.buffer = (UINT8 *)malloc(SAVEGAMESIZE);
|
||||
save.size = SAVEGAMESIZE;
|
||||
save.p = save.buffer = (UINT8 *)malloc(save.size);
|
||||
if (!save.p)
|
||||
{
|
||||
CONS_Alert(CONS_ERROR, M_GetText("No more free memory for saving game data\n"));
|
||||
return;
|
||||
}
|
||||
save.end = save.buffer + save.size;
|
||||
|
||||
memset(name, 0, sizeof (name));
|
||||
sprintf(name, (marathonmode ? "back-up %d" : "version %d"), VERSION);
|
||||
|
|
@ -4777,7 +4777,6 @@ void G_SaveGame(UINT32 slot, INT16 mapnum)
|
|||
length = save.p - save.buffer;
|
||||
saved = FIL_WriteFile(backup, save.buffer, length);
|
||||
free(save.buffer);
|
||||
save.p = save.buffer = NULL;
|
||||
}
|
||||
|
||||
gameaction = ga_nothing;
|
||||
|
|
@ -4789,7 +4788,7 @@ void G_SaveGame(UINT32 slot, INT16 mapnum)
|
|||
}
|
||||
|
||||
#define BADSAVE goto cleanup;
|
||||
#define CHECKPOS if (save.p >= end_p) BADSAVE
|
||||
#define CHECKPOS if (save.p >= save.end) BADSAVE
|
||||
void G_SaveGameOver(UINT32 slot, boolean modifylives)
|
||||
{
|
||||
boolean saved = false;
|
||||
|
|
@ -4814,11 +4813,13 @@ void G_SaveGameOver(UINT32 slot, boolean modifylives)
|
|||
|
||||
{
|
||||
char temp[sizeof(timeattackfolder)];
|
||||
UINT8 *end_p = save.buffer + length;
|
||||
UINT8 *lives_p;
|
||||
SINT8 pllives;
|
||||
|
||||
save.p = save.buffer;
|
||||
save.size = length;
|
||||
save.end = save.buffer + save.size;
|
||||
|
||||
// Version check
|
||||
memset(vcheck, 0, sizeof (vcheck));
|
||||
sprintf(vcheck, (marathonmode ? "back-up %d" : "version %d"), VERSION);
|
||||
|
|
|
|||
|
|
@ -219,12 +219,14 @@ void PR_SaveProfiles(void)
|
|||
UINT8 i, j, k;
|
||||
savebuffer_t save;
|
||||
|
||||
save.p = save.buffer = (UINT8 *)malloc(sizeof(UINT32) + (numprofiles * sizeof(profile_t)));
|
||||
save.size = sizeof(UINT32) + (numprofiles * sizeof(profile_t));
|
||||
save.p = save.buffer = (UINT8 *)malloc(save.size);
|
||||
if (!save.p)
|
||||
{
|
||||
I_Error("No more free memory for saving profiles\n");
|
||||
return;
|
||||
}
|
||||
save.end = save.buffer + save.size;
|
||||
|
||||
// Add header.
|
||||
WRITESTRINGN(save.p, PROFILEHEADER, headerlen);
|
||||
|
|
@ -272,7 +274,6 @@ void PR_SaveProfiles(void)
|
|||
I_Error("Couldn't save profiles. Are you out of Disk space / playing in a protected folder?");
|
||||
}
|
||||
free(save.buffer);
|
||||
save.p = save.buffer = NULL;
|
||||
}
|
||||
|
||||
void PR_LoadProfiles(void)
|
||||
|
|
|
|||
|
|
@ -18,6 +18,12 @@
|
|||
#pragma interface
|
||||
#endif
|
||||
|
||||
// 1024 bytes is plenty for a savegame
|
||||
#define SAVEGAMESIZE (1024)
|
||||
|
||||
// For netgames
|
||||
#define NETSAVEGAMESIZE (768*1024)
|
||||
|
||||
// Persistent storage/archiving.
|
||||
// These are the load / save game routines.
|
||||
|
||||
|
|
@ -43,6 +49,8 @@ struct savebuffer_t
|
|||
{
|
||||
UINT8 *buffer;
|
||||
UINT8 *p;
|
||||
UINT8 *end;
|
||||
size_t size;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -725,6 +725,7 @@ void P_WriteThings(void)
|
|||
savebuffer_t save;
|
||||
INT16 temp;
|
||||
|
||||
save.size = nummapthings * sizeof (mapthing_t);
|
||||
save.p = save.buffer = (UINT8 *)malloc(nummapthings * sizeof (mapthing_t));
|
||||
|
||||
if (!save.p)
|
||||
|
|
@ -733,6 +734,8 @@ void P_WriteThings(void)
|
|||
return;
|
||||
}
|
||||
|
||||
save.end = save.buffer + save.size;
|
||||
|
||||
mt = mapthings;
|
||||
for (i = 0; i < nummapthings; i++, mt++)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue