From f53a6b22ccbe426eb695683900b1edda1e01904d Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sun, 14 Jan 2018 19:24:09 -0800 Subject: [PATCH] Core: Fix ROM patches not being unloaded when disabled (fixes #962) --- CHANGES | 1 + src/core/cheats.c | 2 +- src/gb/cheats.c | 6 +++++- src/gba/cheats.c | 6 +++++- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index a2fae41ec..6217fa584 100644 --- a/CHANGES +++ b/CHANGES @@ -15,6 +15,7 @@ Bugfixes: - 3DS: Fix opening files in directory names with trailing slashes - GB MBC: Fix MBC2 saves (fixes mgba.io/i/954) - GBA Memory: Fix copy-on-write memory leak + - Core: Fix ROM patches not being unloaded when disabled (fixes mgba.io/i/962) Misc: - GBA: Improve multiboot image detection - GB MBC: Remove erroneous bank 0 wrapping diff --git a/src/core/cheats.c b/src/core/cheats.c index 21a7b8a7b..e877c5c12 100644 --- a/src/core/cheats.c +++ b/src/core/cheats.c @@ -253,10 +253,10 @@ bool mCheatSaveFile(struct mCheatDevice* device, struct VFile* vf) { } void mCheatRefresh(struct mCheatDevice* device, struct mCheatSet* cheats) { + cheats->refresh(cheats, device); if (!cheats->enabled) { return; } - cheats->refresh(cheats, device); size_t elseLoc = 0; size_t endLoc = 0; diff --git a/src/gb/cheats.c b/src/gb/cheats.c index 118ddde20..5c202782c 100644 --- a/src/gb/cheats.c +++ b/src/gb/cheats.c @@ -244,7 +244,11 @@ bool GBCheatAddLine(struct mCheatSet* set, const char* line, int type) { static void GBCheatRefresh(struct mCheatSet* cheats, struct mCheatDevice* device) { struct GBCheatSet* gbset = (struct GBCheatSet*) cheats; - _patchROM(device, gbset); + if (cheats->enabled) { + _patchROM(device, gbset); + } else { + _unpatchROM(device, gbset); + } } static void GBCheatSetCopyProperties(struct mCheatSet* set, struct mCheatSet* oldSet) { diff --git a/src/gba/cheats.c b/src/gba/cheats.c index 6e799aae4..596632963 100644 --- a/src/gba/cheats.c +++ b/src/gba/cheats.c @@ -274,7 +274,11 @@ bool GBACheatAddLine(struct mCheatSet* set, const char* line, int type) { static void GBACheatRefresh(struct mCheatSet* cheats, struct mCheatDevice* device) { struct GBACheatSet* gbaset = (struct GBACheatSet*) cheats; - _patchROM(device, gbaset); + if (cheats->enabled) { + _patchROM(device, gbaset); + } else { + _unpatchROM(device, gbaset); + } } static void GBACheatSetCopyProperties(struct mCheatSet* set, struct mCheatSet* oldSet) {