diff --git a/source/m3_core.c b/source/m3_core.c index 75a846cc..b2e4db71 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 old, size_t new) +{ + 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) ) { @@ -189,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); + // NB: different order of new/old + void * newPtr = m3_alloc_funcs.realloc_fn (i_ptr, i_oldSize, i_newSize); if (LIKELY(newPtr)) { @@ -220,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); + // NB: different order of new/old + void * newPtr = m3_alloc_transient_funcs.realloc_fn (i_ptr, i_oldSize, i_newSize); if (LIKELY(newPtr)) { @@ -247,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); + // 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/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..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)); + 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)); + 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)); + void* (* realloc_fn)(void*, size_t, size_t)); // first old, then new void m3_RewritePointersRuntime (IM3Runtime runtime, uint8_t* base,