SW: Fix saves

Dynamically-allocated structs strike again.

git-svn-id: https://svn.eduke32.com/eduke32@8325 1a8010ca-5511-0410-912e-c29ae57300e0

# Conflicts:
#	source/sw/src/saveable.h
This commit is contained in:
hendricks266 2019-11-28 23:22:01 +00:00 committed by Christoph Oelckers
parent 0a70c5e55f
commit d4eb10d10d
3 changed files with 24 additions and 17 deletions

View file

@ -4810,23 +4810,20 @@ void G_Polymer_UnInit(void) { }
#include "saveable.h" #include "saveable.h"
static saveable_data saveable_build_data[] = saveable_module saveable_build{};
{
SAVE_DATA(sector),
SAVE_DATA(sprite),
SAVE_DATA(wall)
};
saveable_module saveable_build = void Saveable_Init_Dynamic()
{ {
// code static saveable_data saveable_build_data[] =
NULL, {
0, {sector, MAXSECTORS*sizeof(sectortype)},
{sprite, MAXSPRITES*sizeof(spritetype)},
{wall, MAXWALLS*sizeof(walltype)},
};
// data saveable_build.data = saveable_build_data;
saveable_build_data, saveable_build.numdata = NUM_SAVEABLE_ITEMS(saveable_build_data);
NUM_SAVEABLE_ITEMS(saveable_build_data) }
};
/*extern*/ bool GameInterface::validate_hud(int requested_size) { return requested_size; } /*extern*/ bool GameInterface::validate_hud(int requested_size) { return requested_size; }
/*extern*/ void GameInterface::set_hud_layout(int requested_size) { /* the relevant setting is gs.BorderNum */} /*extern*/ void GameInterface::set_hud_layout(int requested_size) { /* the relevant setting is gs.BorderNum */}

View file

@ -38,6 +38,8 @@ void Saveable_Init(void)
{ {
if (nummodules > 0) return; if (nummodules > 0) return;
Saveable_Init_Dynamic();
#define MODULE(x) { \ #define MODULE(x) { \
extern saveable_module saveable_ ## x; \ extern saveable_module saveable_ ## x; \
saveablemodules[nummodules++] = &saveable_ ## x; \ saveablemodules[nummodules++] = &saveable_ ## x; \

View file

@ -24,6 +24,7 @@
#ifndef SAVEABLE_H #ifndef SAVEABLE_H
#define SAVEABLE_H #define SAVEABLE_H
#include "compat.h"
typedef void *saveable_code; typedef void *saveable_code;
@ -42,10 +43,16 @@ typedef struct
unsigned int numdata; unsigned int numdata;
} saveable_module; } saveable_module;
#define SAVE_CODE(s) (void*)s template <typename T>
#define SAVE_DATA(s) { (void*)&s, sizeof(s) } static FORCE_INLINE constexpr enable_if_t<!std::is_pointer<T>::value, size_t> SAVE_SIZEOF(T const & obj) noexcept
{
return sizeof(obj);
}
#define NUM_SAVEABLE_ITEMS(x) (sizeof(x)/sizeof(x[0])) #define SAVE_CODE(s) (void*)(s)
#define SAVE_DATA(s) { (void*)&(s), SAVE_SIZEOF(s) }
#define NUM_SAVEABLE_ITEMS(x) ARRAY_SIZE(x)
typedef struct typedef struct
{ {
@ -61,6 +68,7 @@ typedef struct
} saveddatasym; } saveddatasym;
void Saveable_Init(void); void Saveable_Init(void);
void Saveable_Init_Dynamic(void);
int Saveable_FindCodeSym(void *ptr, savedcodesym *sym); int Saveable_FindCodeSym(void *ptr, savedcodesym *sym);
int Saveable_FindDataSym(void *ptr, saveddatasym *sym); int Saveable_FindDataSym(void *ptr, saveddatasym *sym);