diff --git a/src/sl/cheat_sl.cpp b/src/sl/cheat_sl.cpp index 3b5df34315..52018ca58d 100644 --- a/src/sl/cheat_sl.cpp +++ b/src/sl/cheat_sl.cpp @@ -107,11 +107,7 @@ static void Load_CHTS() UnknownCheatHandler uch{}; SaveLoadTableData slt = SlTableHeader(GetCheatsDesc(false), &uch); - if (SlIterateArray() == -1) return; - SlObjectLoadFiltered(&_cheats, slt); - if (SlIterateArray() != -1) { - SlErrorCorruptFmt("Too many CHTS entries"); - } + SlLoadTableObjectChunk(slt, &_cheats); } else { size_t count = SlGetFieldLength(); SaveLoadTableData slt = SlTableHeaderOrRiff(GetCheatsDesc(false)); diff --git a/src/sl/saveload.cpp b/src/sl/saveload.cpp index 44ce8427d0..15d3fecdd5 100644 --- a/src/sl/saveload.cpp +++ b/src/sl/saveload.cpp @@ -2483,16 +2483,16 @@ SaveLoadTableData SlPrepareNamedSaveLoadTableForPtrOrNull(const NamedSaveLoadTab return saveloads; } -void SlSaveTableObjectChunk(const SaveLoadTable &slt) +void SlSaveTableObjectChunk(const SaveLoadTable &slt, void *object) { SlSetArrayIndex(0); - SlObjectSaveFiltered(nullptr, slt); + SlObjectSaveFiltered(object, slt); } -void SlLoadTableOrRiffFiltered(const SaveLoadTable &slt) +void SlLoadTableOrRiffFiltered(const SaveLoadTable &slt, void *object) { if (SlIsTableChunk() && SlIterateArray() == -1) return; - SlObjectLoadFiltered(nullptr, slt); + SlObjectLoadFiltered(object, slt); if (SlIsTableChunk() && SlIterateArray() != -1) { uint32_t id = _sl.current_chunk_id; SlErrorCorruptFmt("Too many %s entries", ChunkIDDumper()(id)); diff --git a/src/sl/saveload.h b/src/sl/saveload.h index 4643d24390..2106aff551 100644 --- a/src/sl/saveload.h +++ b/src/sl/saveload.h @@ -1096,8 +1096,8 @@ void SlSkipTableHeader(); [[nodiscard]] SaveLoadTableData SlTableHeader(const NamedSaveLoadTable &slt, TableHeaderSpecialHandler *special_handler = nullptr); [[nodiscard]] SaveLoadTableData SlTableHeaderOrRiff(const NamedSaveLoadTable &slt); [[nodiscard]] SaveLoadTableData SlPrepareNamedSaveLoadTableForPtrOrNull(const NamedSaveLoadTable &slt); -void SlSaveTableObjectChunk(const SaveLoadTable &slt); -void SlLoadTableOrRiffFiltered(const SaveLoadTable &slt); +void SlSaveTableObjectChunk(const SaveLoadTable &slt, void *object = nullptr); +void SlLoadTableOrRiffFiltered(const SaveLoadTable &slt, void *object = nullptr); void SlLoadTableWithArrayLengthPrefixesMissing(); void SlSetStructListLength(size_t length); @@ -1105,24 +1105,24 @@ size_t SlGetStructListLength(size_t limit); void SlSkipChunkContents(); -inline void SlSaveTableObjectChunk(const NamedSaveLoadTable &slt) +inline void SlSaveTableObjectChunk(const NamedSaveLoadTable &slt, void *object = nullptr) { - SlSaveTableObjectChunk(SlTableHeader(slt)); + SlSaveTableObjectChunk(SlTableHeader(slt), object); } -inline void SlLoadTableObjectChunk(const NamedSaveLoadTable &slt) +inline void SlLoadTableObjectChunk(const NamedSaveLoadTable &slt, void *object = nullptr) { - SlLoadTableOrRiffFiltered(SlTableHeader(slt)); + SlLoadTableOrRiffFiltered(SlTableHeader(slt), object); } -inline void SlLoadTableObjectChunk(const SaveLoadTable &slt) +inline void SlLoadTableObjectChunk(const SaveLoadTable &slt, void *object = nullptr) { - SlLoadTableOrRiffFiltered(slt); + SlLoadTableOrRiffFiltered(slt, object); } -inline void SlLoadTableOrRiffFiltered(const NamedSaveLoadTable &slt) +inline void SlLoadTableOrRiffFiltered(const NamedSaveLoadTable &slt, void *object = nullptr) { - SlLoadTableOrRiffFiltered(SlTableHeaderOrRiff(slt)); + SlLoadTableOrRiffFiltered(SlTableHeaderOrRiff(slt), object); } [[noreturn]] void CDECL SlErrorFmt(StringID string, const char *msg, ...) WARN_FORMAT(2, 3);