Add versioned save slot/settings schemas with strict version checks
Splits saveslot_t/savesettings_t into a stable, version-independent in-memory struct (save/slot/, save/settings/) and a separate frozen per-schema-version struct (saveslotver1_t/savesettingsver1_t) used only for JSON serialization, converted between manually. Every write now stamps a "version" field (SAVE_SLOT_CURRENT/SAVE_SETTINGS_CURRENT), and every read requires it to match exactly, rejecting anything else - laying the groundwork for a real migration path instead of silently misreading old/incompatible save data.
This commit is contained in:
@@ -9,8 +9,8 @@
|
||||
#include "savetestfixture.h"
|
||||
#include "save/savedevice.h"
|
||||
#include "save/savedevicelinux.h"
|
||||
#include "save/saveslot.h"
|
||||
#include "save/savesettings.h"
|
||||
#include "save/slot/saveslot.h"
|
||||
#include "save/settings/savesettings.h"
|
||||
#include "util/memory.h"
|
||||
#include "util/string.h"
|
||||
#include <stdio.h>
|
||||
@@ -298,7 +298,7 @@ static void test_settingsWriteRead_roundTrip(void **state) {
|
||||
|
||||
savesettings_t written;
|
||||
saveSettingsInit(&written);
|
||||
written.someSetting = 314;
|
||||
written.audioMasterVolume = 3.25f;// exactly representable, safe to compare
|
||||
|
||||
errorret_t writeRet = saveDeviceLinuxSettingsWrite(&device, &written);
|
||||
assert_true(errorIsOk(writeRet));
|
||||
@@ -308,7 +308,7 @@ static void test_settingsWriteRead_roundTrip(void **state) {
|
||||
|
||||
errorret_t readRet = saveDeviceLinuxSettingsRead(&device, &read);
|
||||
assert_true(errorIsOk(readRet));
|
||||
assert_int_equal(read.someSetting, 314);
|
||||
assert_true(read.audioMasterVolume == 3.25f);
|
||||
}
|
||||
|
||||
static void test_settingsRead_noFileYet_leavesUntouched(void **state) {
|
||||
@@ -317,11 +317,11 @@ static void test_settingsRead_noFileYet_leavesUntouched(void **state) {
|
||||
|
||||
savesettings_t settings;
|
||||
saveSettingsInit(&settings);
|
||||
settings.someSetting = 777;
|
||||
settings.audioMasterVolume = 7.75f;
|
||||
|
||||
errorret_t ret = saveDeviceLinuxSettingsRead(&device, &settings);
|
||||
assert_true(errorIsOk(ret));
|
||||
assert_int_equal(settings.someSetting, 777);
|
||||
assert_true(settings.audioMasterVolume == 7.75f);
|
||||
}
|
||||
|
||||
static void test_settingsRead_corruptFile_errors(void **state) {
|
||||
|
||||
Reference in New Issue
Block a user