diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index fff95557c6..871be91295 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2139,7 +2139,7 @@ inline void SlRIFFSpringPPCheck(size_t len) static void SlLoadChunk(const ChunkHandler &ch) { if (ch.special_proc != nullptr) { - if (ch.special_proc(ch.id, CSLSO_PRE_LOAD)) return; + if (ch.special_proc(ch.id, CSLSO_PRE_LOAD) == CSLSOR_LOAD_CHUNK_CONSUMED) return; } byte m = SlReadByte(); @@ -2206,7 +2206,7 @@ static void SlLoadChunk(const ChunkHandler &ch) static void SlLoadCheckChunk(const ChunkHandler *ch) { if (ch && ch->special_proc != nullptr) { - if (ch->special_proc(ch->id, CSLSO_PRE_LOADCHECK)) return; + if (ch->special_proc(ch->id, CSLSO_PRE_LOADCHECK) == CSLSOR_LOAD_CHUNK_CONSUMED) return; } byte m = SlReadByte(); diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 50bffff1cf..49d4300763 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -86,7 +86,11 @@ enum ChunkSaveLoadSpecialOp { CSLSO_PRE_LOAD, CSLSO_PRE_LOADCHECK, }; -typedef bool ChunkSaveLoadSpecialProc(uint32, ChunkSaveLoadSpecialOp); +enum ChunkSaveLoadSpecialOpResult { + CSLSOR_NONE, + CSLSOR_LOAD_CHUNK_CONSUMED, +}; +typedef ChunkSaveLoadSpecialOpResult ChunkSaveLoadSpecialProc(uint32, ChunkSaveLoadSpecialOp); /** Type of a chunk. */ enum ChunkType { @@ -141,22 +145,22 @@ namespace upstream_sl { SlUnreachablePlaceholder, CH_UPSTREAM_SAVE }; - ch.special_proc = [](uint32 chunk_id, ChunkSaveLoadSpecialOp op) -> bool { + ch.special_proc = [](uint32 chunk_id, ChunkSaveLoadSpecialOp op) -> ChunkSaveLoadSpecialOpResult { assert(id == chunk_id); switch (op) { case CSLSO_PRE_LOAD: SlExecWithSlVersion(F::GetLoadVersion(), []() { SlLoadChunkByID(id); }); - break; + return CSLSOR_LOAD_CHUNK_CONSUMED; case CSLSO_PRE_LOADCHECK: SlExecWithSlVersion(F::GetLoadVersion(), []() { SlLoadCheckChunkByID(id); }); - break; + return CSLSOR_LOAD_CHUNK_CONSUMED; + default: + return CSLSOR_NONE; } - - return true; // chunk has been consumed }; return ch; }