From 2ae500b190061eeef8030cccbc7e75ba0a3871ba Mon Sep 17 00:00:00 2001 From: dozreg-toplud Date: Wed, 3 Jun 2026 19:38:07 +0200 Subject: [PATCH 1/2] change realloc interface --- source/m3_core.c | 24 +++++++++++++++--------- source/m3_core.h | 2 +- source/wasm3.h | 6 +++--- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/source/m3_core.c b/source/m3_core.c index 75a846cc..934dd103 100644 --- a/source/m3_core.c +++ b/source/m3_core.c @@ -105,28 +105,34 @@ void * m3_Realloc (void * i_ptr, size_t i_newSize, size_t i_oldSize) #else +static void* +_c_realloc(void* ptr, size_t new, size_t old) +{ + return realloc(ptr, new); +} + M3AllocationFunctionStruct m3_alloc_funcs = { calloc, free, - realloc + _c_realloc }; M3AllocationFunctionStruct m3_alloc_transient_funcs = { calloc, free, - realloc + _c_realloc }; M3AllocationFunctionStruct m3_alloc_memory_funcs = { calloc, free, - realloc + _c_realloc }; M3Result m3_SetAllocators ( void* (*calloc_fn) (size_t, size_t), void (*free_fn) (void*), - void* (*realloc_fn) (void*, size_t) + void* (*realloc_fn) (void*, size_t, size_t) ) { if ( (calloc_fn == NULL) || (free_fn == NULL) || (realloc_fn == NULL) ) { @@ -144,7 +150,7 @@ M3Result m3_SetAllocators ( M3Result m3_SetTransientAllocators ( void* (*calloc_fn) (size_t, size_t), void (*free_fn) (void*), - void* (*realloc_fn) (void*, size_t) + void* (*realloc_fn) (void*, size_t, size_t) ) { if ( (calloc_fn == NULL) || (free_fn == NULL) || (realloc_fn == NULL) ) { @@ -159,7 +165,7 @@ M3Result m3_SetTransientAllocators ( M3Result m3_SetMemoryAllocators ( void* (*calloc_fn) (size_t, size_t), void (*free_fn) (void*), - void* (*realloc_fn) (void*, size_t) + void* (*realloc_fn) (void*, size_t, size_t) ) { if ( (calloc_fn == NULL) || (free_fn == NULL) || (realloc_fn == NULL) ) { @@ -190,7 +196,7 @@ void * m3_Realloc (void * i_ptr, size_t i_newSize, size_t i_oldSize) { if (UNLIKELY(i_newSize == i_oldSize)) return i_ptr; - void * newPtr = m3_alloc_funcs.realloc_fn (i_ptr, i_newSize); + void * newPtr = m3_alloc_funcs.realloc_fn (i_ptr, i_newSize, i_oldSize); if (LIKELY(newPtr)) { @@ -221,7 +227,7 @@ void * m3_ReallocTransient (void * i_ptr, size_t i_newSize, size_t i_oldSize) { if (UNLIKELY(i_newSize == i_oldSize)) return i_ptr; - void * newPtr = m3_alloc_transient_funcs.realloc_fn (i_ptr, i_newSize); + void * newPtr = m3_alloc_transient_funcs.realloc_fn (i_ptr, i_newSize, i_oldSize); if (LIKELY(newPtr)) { @@ -248,7 +254,7 @@ void * m3_ReallocMemory (void * i_ptr, size_t i_newSize, size_t i_oldSize) { if (UNLIKELY(i_newSize == i_oldSize)) return i_ptr; - void * newPtr = m3_alloc_memory_funcs.realloc_fn (i_ptr, i_newSize); + void * newPtr = m3_alloc_memory_funcs.realloc_fn (i_ptr, i_newSize, i_oldSize); if (LIKELY(newPtr)) { diff --git a/source/m3_core.h b/source/m3_core.h index fc65b65e..dce25913 100644 --- a/source/m3_core.h +++ b/source/m3_core.h @@ -158,7 +158,7 @@ typedef struct M3AllocationFunctionStruct { void* (* calloc_fn)(size_t, size_t); void (* free_fn)(void*); - void* (* realloc_fn)(void*, size_t); + void* (* realloc_fn)(void*, size_t, size_t); } M3AllocationFunctionStruct; diff --git a/source/wasm3.h b/source/wasm3.h index a4b64ceb..1ad4ebcf 100644 --- a/source/wasm3.h +++ b/source/wasm3.h @@ -225,15 +225,15 @@ d_m3ErrorConst (SuspensionError, "error during suspension") M3Result m3_SetAllocators (void* (* calloc_fn)(size_t, size_t), void (* free_fn)(void*), - void* (* realloc_fn)(void*, size_t)); + void* (* realloc_fn)(void*, size_t, size_t)); M3Result m3_SetTransientAllocators (void* (* calloc_fn)(size_t, size_t), void (* free_fn)(void*), - void* (* realloc_fn)(void*, size_t)); + void* (* realloc_fn)(void*, size_t, size_t)); M3Result m3_SetMemoryAllocators (void* (* calloc_fn)(size_t, size_t), void (* free_fn)(void*), - void* (* realloc_fn)(void*, size_t)); + void* (* realloc_fn)(void*, size_t, size_t)); void m3_RewritePointersRuntime (IM3Runtime runtime, uint8_t* base, From 268894556ac471c88089d88c84b7922c8d9b9d72 Mon Sep 17 00:00:00 2001 From: dozreg-toplud Date: Thu, 11 Jun 2026 16:24:13 +0200 Subject: [PATCH 2/2] change old/new order for external alloc interface --- source/m3_core.c | 14 +++++++------- source/wasm3.h | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/source/m3_core.c b/source/m3_core.c index 934dd103..b2e4db71 100644 --- a/source/m3_core.c +++ b/source/m3_core.c @@ -106,7 +106,7 @@ void * m3_Realloc (void * i_ptr, size_t i_newSize, size_t i_oldSize) #else static void* -_c_realloc(void* ptr, size_t new, size_t old) +_c_realloc(void* ptr, size_t old, size_t new) { return realloc(ptr, new); } @@ -195,8 +195,8 @@ void m3_FreeImpl (void * io_ptr) void * m3_Realloc (void * i_ptr, size_t i_newSize, size_t i_oldSize) { if (UNLIKELY(i_newSize == i_oldSize)) return i_ptr; - - void * newPtr = m3_alloc_funcs.realloc_fn (i_ptr, i_newSize, i_oldSize); + // NB: different order of new/old + void * newPtr = m3_alloc_funcs.realloc_fn (i_ptr, i_oldSize, i_newSize); if (LIKELY(newPtr)) { @@ -226,8 +226,8 @@ void m3_FreeTransientImpl (void * io_ptr) void * m3_ReallocTransient (void * i_ptr, size_t i_newSize, size_t i_oldSize) { if (UNLIKELY(i_newSize == i_oldSize)) return i_ptr; - - void * newPtr = m3_alloc_transient_funcs.realloc_fn (i_ptr, i_newSize, i_oldSize); + // NB: different order of new/old + void * newPtr = m3_alloc_transient_funcs.realloc_fn (i_ptr, i_oldSize, i_newSize); if (LIKELY(newPtr)) { @@ -253,8 +253,8 @@ void m3_FreeMemoryImpl (void * io_ptr) void * m3_ReallocMemory (void * i_ptr, size_t i_newSize, size_t i_oldSize) { if (UNLIKELY(i_newSize == i_oldSize)) return i_ptr; - - void * newPtr = m3_alloc_memory_funcs.realloc_fn (i_ptr, i_newSize, i_oldSize); + // NB: different order of new/old + void * newPtr = m3_alloc_memory_funcs.realloc_fn (i_ptr, i_oldSize, i_newSize); if (LIKELY(newPtr)) { diff --git a/source/wasm3.h b/source/wasm3.h index 1ad4ebcf..f2ae7c58 100644 --- a/source/wasm3.h +++ b/source/wasm3.h @@ -225,15 +225,15 @@ d_m3ErrorConst (SuspensionError, "error during suspension") M3Result m3_SetAllocators (void* (* calloc_fn)(size_t, size_t), void (* free_fn)(void*), - void* (* realloc_fn)(void*, size_t, size_t)); + void* (* realloc_fn)(void*, size_t, size_t)); // first old, then new M3Result m3_SetTransientAllocators (void* (* calloc_fn)(size_t, size_t), void (* free_fn)(void*), - void* (* realloc_fn)(void*, size_t, size_t)); + void* (* realloc_fn)(void*, size_t, size_t)); // first old, then new M3Result m3_SetMemoryAllocators (void* (* calloc_fn)(size_t, size_t), void (* free_fn)(void*), - void* (* realloc_fn)(void*, size_t, size_t)); + void* (* realloc_fn)(void*, size_t, size_t)); // first old, then new void m3_RewritePointersRuntime (IM3Runtime runtime, uint8_t* base,