mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Fix savegame taglist resizing
Fixes a crash when loading savegames because the save game code wasn't expecting to need to use the LevelPool functions.
This commit is contained in:
parent
b711c82237
commit
411cb468ae
3 changed files with 28 additions and 16 deletions
|
|
@ -2478,8 +2478,8 @@ static void UnArchiveSectors(savebuffer_t *save)
|
||||||
// Reallocate if size differs.
|
// Reallocate if size differs.
|
||||||
if (ncount != sectors[i].tags.count)
|
if (ncount != sectors[i].tags.count)
|
||||||
{
|
{
|
||||||
|
sectors[i].tags.tags = (mtag_t*)Z_LevelPoolRealloc(sectors[i].tags.tags, sectors[i].tags.count * sizeof(mtag_t), ncount*sizeof(mtag_t));
|
||||||
sectors[i].tags.count = ncount;
|
sectors[i].tags.count = ncount;
|
||||||
sectors[i].tags.tags = (mtag_t*)Z_Realloc(sectors[i].tags.tags, ncount*sizeof(mtag_t), PU_LEVEL, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (j = 0; j < ncount; j++)
|
for (j = 0; j < ncount; j++)
|
||||||
|
|
@ -2741,8 +2741,8 @@ static void UnArchiveLines(savebuffer_t *save)
|
||||||
// Reallocate if size differs.
|
// Reallocate if size differs.
|
||||||
if (ncount != lines[i].tags.count)
|
if (ncount != lines[i].tags.count)
|
||||||
{
|
{
|
||||||
|
lines[i].tags.tags = (mtag_t*)Z_LevelPoolRealloc(lines[i].tags.tags, lines[i].tags.count * sizeof(mtag_t), ncount*sizeof(mtag_t));
|
||||||
lines[i].tags.count = ncount;
|
lines[i].tags.count = ncount;
|
||||||
lines[i].tags.tags = (mtag_t*)Z_Realloc(lines[i].tags.tags, ncount*sizeof(mtag_t), PU_LEVEL, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (j = 0; j < ncount; j++)
|
for (j = 0; j < ncount; j++)
|
||||||
|
|
@ -6949,25 +6949,23 @@ static boolean P_NetUnArchiveMisc(savebuffer_t *save, boolean reloading)
|
||||||
{
|
{
|
||||||
if (spawnss->tags.count)
|
if (spawnss->tags.count)
|
||||||
{
|
{
|
||||||
ss->tags.count = spawnss->tags.count;
|
|
||||||
ss->tags.tags = static_cast<mtag_t *>(
|
ss->tags.tags = static_cast<mtag_t *>(
|
||||||
memcpy(
|
memcpy(
|
||||||
Z_Realloc(
|
Z_LevelPoolRealloc(
|
||||||
ss->tags.tags,
|
ss->tags.tags,
|
||||||
spawnss->tags.count * sizeof(mtag_t),
|
ss->tags.count * sizeof(mtag_t),
|
||||||
PU_LEVEL,
|
spawnss->tags.count * sizeof(mtag_t)
|
||||||
nullptr
|
|
||||||
),
|
),
|
||||||
spawnss->tags.tags,
|
spawnss->tags.tags,
|
||||||
spawnss->tags.count * sizeof(mtag_t)
|
spawnss->tags.count * sizeof(mtag_t)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
ss->tags.count = spawnss->tags.count;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Z_LevelPoolFree(ss->tags.tags, ss->tags.count * sizeof(mtag_t));
|
||||||
ss->tags.count = 0;
|
ss->tags.count = 0;
|
||||||
Z_Free(ss->tags.tags);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -7039,25 +7037,23 @@ static boolean P_NetUnArchiveMisc(savebuffer_t *save, boolean reloading)
|
||||||
{
|
{
|
||||||
if (spawnli->tags.count)
|
if (spawnli->tags.count)
|
||||||
{
|
{
|
||||||
li->tags.count = spawnli->tags.count;
|
|
||||||
li->tags.tags = static_cast<mtag_t *>(
|
li->tags.tags = static_cast<mtag_t *>(
|
||||||
memcpy(
|
memcpy(
|
||||||
Z_Realloc(
|
Z_LevelPoolRealloc(
|
||||||
li->tags.tags,
|
li->tags.tags,
|
||||||
spawnli->tags.count * sizeof(mtag_t),
|
li->tags.count * sizeof(mtag_t),
|
||||||
PU_LEVEL,
|
spawnli->tags.count * sizeof(mtag_t)
|
||||||
nullptr
|
|
||||||
),
|
),
|
||||||
spawnli->tags.tags,
|
spawnli->tags.tags,
|
||||||
spawnli->tags.count * sizeof(mtag_t)
|
spawnli->tags.count * sizeof(mtag_t)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
li->tags.count = spawnli->tags.count;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Z_LevelPoolFree(li->tags.tags, li->tags.count * sizeof(mtag_t));
|
||||||
li->tags.count = 0;
|
li->tags.count = 0;
|
||||||
Z_Free(li->tags.tags);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -740,3 +740,18 @@ void Z_LevelPoolFree(void* p, size_t size)
|
||||||
}
|
}
|
||||||
return Z_Free(p);
|
return Z_Free(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void* Z_LevelPoolRealloc(void* ptr, size_t orig_size, size_t size)
|
||||||
|
{
|
||||||
|
void* newptr = nullptr;
|
||||||
|
if (size > 0)
|
||||||
|
{
|
||||||
|
newptr = Z_LevelPoolCalloc(size);
|
||||||
|
}
|
||||||
|
if (orig_size > 0)
|
||||||
|
{
|
||||||
|
memcpy(newptr, ptr, orig_size);
|
||||||
|
Z_LevelPoolFree(ptr, orig_size);
|
||||||
|
}
|
||||||
|
return newptr;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -154,6 +154,7 @@ char *Z_StrDup(const char *in);
|
||||||
void *Z_LevelPoolMalloc(size_t size);
|
void *Z_LevelPoolMalloc(size_t size);
|
||||||
void *Z_LevelPoolCalloc(size_t size);
|
void *Z_LevelPoolCalloc(size_t size);
|
||||||
void Z_LevelPoolFree(void *p, size_t size);
|
void Z_LevelPoolFree(void *p, size_t size);
|
||||||
|
void *Z_LevelPoolRealloc(void *p, size_t orig_size, size_t size);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue