diff --git a/spine-c/include/spine/extension.h b/spine-c/include/spine/extension.h index cb43f390a..1477921f6 100644 --- a/spine-c/include/spine/extension.h +++ b/spine-c/include/spine/extension.h @@ -32,8 +32,8 @@ #define SPINE_EXTENSION_H_ /* All allocation uses these. */ -#define MALLOC(TYPE,COUNT) ((TYPE*)_malloc(sizeof(TYPE) * COUNT)) -#define CALLOC(TYPE,COUNT) ((TYPE*)_calloc(COUNT, sizeof(TYPE))) +#define MALLOC(TYPE,COUNT) ((TYPE*)_malloc(sizeof(TYPE) * COUNT, __FILE__, __LINE__)) +#define CALLOC(TYPE,COUNT) ((TYPE*)_calloc(COUNT, sizeof(TYPE), __FILE__, __LINE__)) #define NEW(TYPE) CALLOC(TYPE,1) /* Gets the direct super class. Type safe. */ @@ -97,11 +97,12 @@ char* _spUtil_readFile (const char* path, int* length); * Internal API available for extension: */ -void* _malloc (size_t size); -void* _calloc (size_t num, size_t size); +void* _malloc (size_t size, const char* file, int line); +void* _calloc (size_t num, size_t size, const char* file, int line); void _free (void* ptr); void _setMalloc (void* (*_malloc) (size_t size)); +void _setDebugMalloc (void* (*_malloc) (size_t size, const char* file, int line)); void _setFree (void (*_free) (void* ptr)); char* _readFile (const char* path, int* length); diff --git a/spine-c/src/spine/extension.c b/spine-c/src/spine/extension.c index e18f10677..7920491e8 100644 --- a/spine-c/src/spine/extension.c +++ b/spine-c/src/spine/extension.c @@ -32,13 +32,17 @@ #include static void* (*mallocFunc) (size_t size) = malloc; +static void* (*debugMallocFunc) (size_t size, const char* file, int line) = NULL; static void (*freeFunc) (void* ptr) = free; -void* _malloc (size_t size) { +void* _malloc (size_t size, const char* file, int line) { + if(debugMallocFunc) + return debugMallocFunc(size, file, line); + return mallocFunc(size); } -void* _calloc (size_t num, size_t size) { - void* ptr = mallocFunc(num * size); +void* _calloc (size_t num, size_t size, const char* file, int line) { + void* ptr = _malloc(num * size, file, line); if (ptr) memset(ptr, 0, num * size); return ptr; } @@ -46,6 +50,10 @@ void _free (void* ptr) { freeFunc(ptr); } +void _setDebugMalloc(void* (*malloc) (size_t size, const char* file, int line)) { + debugMallocFunc = malloc; +} + void _setMalloc (void* (*malloc) (size_t size)) { mallocFunc = malloc; }