From b6404ced10f35dba67076cbc7bc78b365803f179 Mon Sep 17 00:00:00 2001 From: goyuken Date: Mon, 16 Jun 2014 16:23:26 +0000 Subject: [PATCH] GB: cleanup --- libgambatte/src/cinterface.cpp | 18 +++++++++++++++--- output/dll/libgambatte.dll | Bin 150528 -> 150528 bytes 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/libgambatte/src/cinterface.cpp b/libgambatte/src/cinterface.cpp index 88bed9f184..e9c52041bc 100644 --- a/libgambatte/src/cinterface.cpp +++ b/libgambatte/src/cinterface.cpp @@ -6,15 +6,27 @@ using namespace gambatte; +// new is actually called in a few different places, so replace all of them for determinism guarantees +void *operator new(std::size_t n) +{ + void *p = std::malloc(n); + std::memset(p, 0, n); + return p; +} + +void operator delete(void *p) +{ + std::free(p); +} + GBEXPORT GB *gambatte_create() { - return new (std::calloc(1, sizeof (GB))) GB(); + return new GB(); } GBEXPORT void gambatte_destroy(GB *g) { - g->~GB(); - std::free(g); + delete g; } GBEXPORT int gambatte_load(GB *g, const char *romfiledata, unsigned romfilelength, long long now, unsigned flags) diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 2511c2094ad354223eb8e455b1adb658e4eab526..c35986e06c54983d0a4c274cae1b022082d82d1a 100644 GIT binary patch delta 13640 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 delta 13430 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