GBA: Allow disabling checksum verification
Jeffrey Pfau jeffrey@endrift.com
Wed, 15 Apr 2015 21:05:01 -0700
3 files changed,
12 insertions(+),
10 deletions(-)
M
src/gba/sharkport.c
→
src/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.h
→
src/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.cpp
→
src/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); }