all repos — mgba @ 5522286c57a664e9d84c26f72fd5506e5ac08fe8

mGBA Game Boy Advance Emulator

GBA Savedata: Fix crash when resizing flash
Vicki Pfau vi@endrift.com
Wed, 01 Nov 2017 16:57:39 -0700
commit

5522286c57a664e9d84c26f72fd5506e5ac08fe8

parent

a2e1641d4e3d0b9cb371e9725f5e5fd5aba82c21

2 files changed, 10 insertions(+), 3 deletions(-)

jump to
M CHANGESCHANGES

@@ -5,6 +5,7 @@ - GBA DMA: ROM reads are forced to increment

- GB Video: Only trigger STAT write IRQs when screen is on (fixes mgba.io/i/912) - GBA Cheats: Fix PARv3 slide codes (fixes mgba.io/i/919) - GBA Video: OBJWIN can change blend params after OBJ is drawn (fixes mgba.io/i/921) + - GBA Savedata: Fix crash when resizing flash Misc: - GBA: Improve multiboot image detection
M src/gba/savedata.csrc/gba/savedata.c

@@ -576,9 +576,15 @@ savedata->currentBank = &savedata->data[bank << 16];

if (bank > 0 && savedata->type == SAVEDATA_FLASH512) { mLOG(GBA_SAVE, INFO, "Updating flash chip from 512kb to 1Mb"); savedata->type = SAVEDATA_FLASH1M; - if (savedata->vf && savedata->vf->size(savedata->vf) == SIZE_CART_FLASH512) { - savedata->vf->truncate(savedata->vf, SIZE_CART_FLASH1M); - memset(&savedata->data[SIZE_CART_FLASH512], 0xFF, SIZE_CART_FLASH512); + if (savedata->vf) { + savedata->vf->unmap(savedata->vf, savedata->data, SIZE_CART_FLASH512); + if (savedata->vf->size(savedata->vf) == SIZE_CART_FLASH512) { + savedata->vf->truncate(savedata->vf, SIZE_CART_FLASH1M); + savedata->data = savedata->vf->map(savedata->vf, SIZE_CART_FLASH1M, MAP_WRITE); + memset(&savedata->data[SIZE_CART_FLASH512], 0xFF, SIZE_CART_FLASH512); + } else { + savedata->data = savedata->vf->map(savedata->vf, SIZE_CART_FLASH1M, MAP_WRITE); + } } } }