From df19de32646037d115428e681dd76afb893dae78 Mon Sep 17 00:00:00 2001 From: Alessio Rosiello Date: Wed, 31 Jul 2024 11:57:54 +0200 Subject: [PATCH 1/3] Fix conditional compilation breaking "asar_getwrittenblocks" when building asar statically --- src/asar/libsmw.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/asar/libsmw.cpp b/src/asar/libsmw.cpp index 9ab7c26a..04968e44 100644 --- a/src/asar/libsmw.cpp +++ b/src/asar/libsmw.cpp @@ -19,7 +19,7 @@ asar_error_id openromerror; autoarray writtenblocks; // RPG Hacker: Uses binary search to find the insert position of our ROM write -#ifdef ASAR_SHARED +#if defined(ASAR_SHARED) || defined(ASAR_STATIC) static int findromwritepos(int snesoffset, int searchstartpos, int searchendpos) { if (searchendpos == searchstartpos) @@ -110,7 +110,7 @@ static void addromwrite(int pcoffset, int numbytes) void writeromdata(int pcoffset, const void * indata, int numbytes) { memcpy(const_cast(romdata) + pcoffset, indata, (size_t)numbytes); - #ifdef ASAR_SHARED + #if defined(ASAR_SHARED) || defined(ASAR_STATIC) addromwrite(pcoffset, numbytes); #endif } @@ -118,7 +118,7 @@ void writeromdata(int pcoffset, const void * indata, int numbytes) void writeromdata_byte(int pcoffset, unsigned char indata) { memcpy(const_cast(romdata) + pcoffset, &indata, 1); - #ifdef ASAR_SHARED + #if defined(ASAR_SHARED) || defined(ASAR_STATIC) addromwrite(pcoffset, 1); #endif } @@ -126,7 +126,7 @@ void writeromdata_byte(int pcoffset, unsigned char indata) void writeromdata_bytes(int pcoffset, unsigned char indata, int numbytes, bool add_write) { memset(const_cast(romdata) + pcoffset, indata, (size_t)numbytes); - #ifdef ASAR_SHARED + #if defined(ASAR_SHARED) || defined(ASAR_STATIC) if(add_write) addromwrite(pcoffset, numbytes); #endif From 52f101129dcd5af128b06020cd0d2606cb471f03 Mon Sep 17 00:00:00 2001 From: Alessio Rosiello Date: Wed, 31 Jul 2024 12:00:47 +0200 Subject: [PATCH 2/3] Correctly load resolvedefines in dll initialization --- src/asar-dll-bindings/c/asardll.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/asar-dll-bindings/c/asardll.c b/src/asar-dll-bindings/c/asardll.c index 9c7e6210..4bda1255 100644 --- a/src/asar-dll-bindings/c/asardll.c +++ b/src/asar-dll-bindings/c/asardll.c @@ -141,6 +141,7 @@ static bool asar_init_shared(void) load(getlabelval); load(getdefine); load(getalldefines); + load(resolvedefines); load(math); load(getwrittenblocks); load(getmapper); From 3d48a4ecb42121514af8fa5b1684f39580a28748 Mon Sep 17 00:00:00 2001 From: Alessio Rosiello Date: Wed, 31 Jul 2024 12:23:51 +0200 Subject: [PATCH 3/3] Replicate changes in 5e82233 to correctly fix resolvedefines and getwrittenblocks --- src/asar/interface-lib.cpp | 5 ++++- src/asar/libsmw.cpp | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/asar/interface-lib.cpp b/src/asar/interface-lib.cpp index 3848608b..1de14349 100644 --- a/src/asar/interface-lib.cpp +++ b/src/asar/interface-lib.cpp @@ -493,11 +493,14 @@ EXPORT const char * asar_getdefine(const char * name) EXPORT const char * asar_resolvedefines(const char * data) { static string out; + out = ""; try { resolvedefines(out, data); } - catch(errfatal&){} + catch(errfatal&){ + out = ""; + } return out; } diff --git a/src/asar/libsmw.cpp b/src/asar/libsmw.cpp index 04968e44..e275218b 100644 --- a/src/asar/libsmw.cpp +++ b/src/asar/libsmw.cpp @@ -40,6 +40,7 @@ static int findromwritepos(int snesoffset, int searchstartpos, int searchendpos) static void addromwriteforbank(int snesoffset, int numbytes) { + if (numbytes == 0) return; int currentbank = (snesoffset & 0xFF0000); int insertpos = findromwritepos(snesoffset, 0, writtenblocks.count);