all repos — mgba @ dee394f10f2fa2c665806bcb7fe5a96c142d8de7

mGBA Game Boy Advance Emulator

GBA: Allow disabling checksum verification
Jeffrey Pfau jeffrey@endrift.com
Wed, 15 Apr 2015 21:05:01 -0700
commit

dee394f10f2fa2c665806bcb7fe5a96c142d8de7

parent

37b2eb05ae944e85bad165fa95da7eaf0e75f7e0

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

jump to
M src/gba/sharkport.csrc/gba/sharkport.c

@@ -10,7 +10,7 @@ #include "util/vfs.h"

static const char* const SHARKPORT_HEADER = "SharkPortSave"; -bool GBASavedataImportSharkPort(struct GBA* gba, struct VFile* vf) { +bool GBASavedataImportSharkPort(struct GBA* gba, struct VFile* vf, bool testChecksum) { union { char c[0x1C]; int32_t i;

@@ -100,14 +100,16 @@ goto cleanup;

} LOAD_32(checksum, 0, &buffer.i); - uint32_t calcChecksum = 0; - int i; - for (i = 0; i < size; ++i) { - calcChecksum += payload[i] << (calcChecksum % 24); - } + if (testChecksum) { + uint32_t calcChecksum = 0; + int i; + for (i = 0; i < size; ++i) { + calcChecksum += ((int32_t) payload[i]) << (calcChecksum % 24); + } - if (calcChecksum != checksum) { - goto cleanup; + if (calcChecksum != checksum) { + goto cleanup; + } } uint32_t copySize = size - 0x1C;
M src/gba/sharkport.hsrc/gba/sharkport.h

@@ -11,7 +11,7 @@

struct GBA; struct VFile; -bool GBASavedataImportSharkPort(struct GBA* gba, struct VFile* vf); +bool GBASavedataImportSharkPort(struct GBA* gba, struct VFile* vf, bool testChecksum); bool GBASavedataExportSharkPort(const struct GBA* gba, struct VFile* vf); #endif
M src/platform/qt/GameController.cppsrc/platform/qt/GameController.cpp

@@ -306,7 +306,7 @@ if (!vf) {

return; } threadInterrupt(); - GBASavedataImportSharkPort(m_threadContext.gba, vf); + GBASavedataImportSharkPort(m_threadContext.gba, vf, false); threadContinue(); vf->close(vf); }