summaryrefslogtreecommitdiffhomepage
path: root/src/external/jar_xm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/external/jar_xm.h')
-rw-r--r--src/external/jar_xm.h50
1 files changed, 27 insertions, 23 deletions
diff --git a/src/external/jar_xm.h b/src/external/jar_xm.h
index 81261198..cfb0d043 100644
--- a/src/external/jar_xm.h
+++ b/src/external/jar_xm.h
@@ -56,22 +56,22 @@
#define JAR_XM_DEFENSIVE 1
#define JAR_XM_RAMPING 1
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <limits.h>
-#include <string.h>
-
-
+// Allow custom memory allocators
+#ifndef JARXM_MALLOC
+ #define JARXM_MALLOC(sz) malloc(sz)
+#endif
+#ifndef JARXM_FREE
+ #define JARXM_FREE(p) free(p)
+#endif
//-------------------------------------------------------------------------------
+struct jar_xm_context_s;
+typedef struct jar_xm_context_s jar_xm_context_t;
+
#ifdef __cplusplus
extern "C" {
#endif
-struct jar_xm_context_s;
-typedef struct jar_xm_context_s jar_xm_context_t;
-
/** Create a XM context.
*
* @param moddata the contents of the module
@@ -133,7 +133,7 @@ void jar_xm_generate_samples(jar_xm_context_t* ctx, float* output, size_t numsam
*/
void jar_xm_generate_samples_16bit(jar_xm_context_t* ctx, short* output, size_t numsamples)
{
- float* musicBuffer = malloc((2*numsamples)*sizeof(float));
+ float* musicBuffer = JARXM_MALLOC((2*numsamples)*sizeof(float));
jar_xm_generate_samples(ctx, musicBuffer, numsamples);
if(output){
@@ -142,7 +142,7 @@ void jar_xm_generate_samples_16bit(jar_xm_context_t* ctx, short* output, size_t
output[x] = musicBuffer[x] * SHRT_MAX;
}
- free(musicBuffer);
+ JARXM_FREE(musicBuffer);
}
/** Play the module, resample from 32 bit to 8 bit, and put the sound samples in an output buffer.
@@ -152,7 +152,7 @@ void jar_xm_generate_samples_16bit(jar_xm_context_t* ctx, short* output, size_t
*/
void jar_xm_generate_samples_8bit(jar_xm_context_t* ctx, char* output, size_t numsamples)
{
- float* musicBuffer = malloc((2*numsamples)*sizeof(float));
+ float* musicBuffer = JARXM_MALLOC((2*numsamples)*sizeof(float));
jar_xm_generate_samples(ctx, musicBuffer, numsamples);
if(output){
@@ -161,7 +161,7 @@ void jar_xm_generate_samples_8bit(jar_xm_context_t* ctx, char* output, size_t nu
output[x] = musicBuffer[x] * CHAR_MAX;
}
- free(musicBuffer);
+ JARXM_FREE(musicBuffer);
}
@@ -306,6 +306,10 @@ uint64_t jar_xm_get_remaining_samples(jar_xm_context_t* ctx);
#ifdef JAR_XM_IMPLEMENTATION
#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <limits.h>
#include <string.h>
#if JAR_XM_DEBUG //JAR_XM_DEBUG defined as 0
@@ -630,10 +634,10 @@ int jar_xm_create_context_safe(jar_xm_context_t** ctxp, const char* moddata, siz
#endif
bytes_needed = jar_xm_get_memory_needed_for_context(moddata, moddata_length);
- mempool = malloc(bytes_needed);
+ mempool = JARXM_MALLOC(bytes_needed);
if(mempool == NULL && bytes_needed > 0) {
- /* malloc() failed, trouble ahead */
- DEBUG("call to malloc() failed, returned %p", (void*)mempool);
+ /* JARXM_MALLOC() failed, trouble ahead */
+ DEBUG("call to JARXM_MALLOC() failed, returned %p", (void*)mempool);
return 2;
}
@@ -641,7 +645,7 @@ int jar_xm_create_context_safe(jar_xm_context_t** ctxp, const char* moddata, siz
memset(mempool, 0, bytes_needed);
ctx = (*ctxp = (jar_xm_context_t *)mempool);
- ctx->allocated_memory = mempool; /* Keep original pointer for free() */
+ ctx->allocated_memory = mempool; /* Keep original pointer for JARXM_FREE() */
mempool += sizeof(jar_xm_context_t);
ctx->rate = rate;
@@ -691,7 +695,7 @@ int jar_xm_create_context_safe(jar_xm_context_t** ctxp, const char* moddata, siz
}
void jar_xm_free_context(jar_xm_context_t* ctx) {
- free(ctx->allocated_memory);
+ JARXM_FREE(ctx->allocated_memory);
}
void jar_xm_set_max_loop_count(jar_xm_context_t* ctx, uint8_t loopcnt) {
@@ -2620,11 +2624,11 @@ int jar_xm_create_context_from_file(jar_xm_context_t** ctx, uint32_t rate, const
return 4;
}
- char* data = malloc(size + 1);
+ char* data = JARXM_MALLOC(size + 1);
if(!data || fread(data, 1, size, xmf) < size) {
fclose(xmf);
- DEBUG_ERR(data ? "fread() failed" : "malloc() failed");
- free(data);
+ DEBUG_ERR(data ? "fread() failed" : "JARXM_MALLOC() failed");
+ JARXM_FREE(data);
*ctx = NULL;
return 5;
}
@@ -2632,7 +2636,7 @@ int jar_xm_create_context_from_file(jar_xm_context_t** ctx, uint32_t rate, const
fclose(xmf);
ret = jar_xm_create_context_safe(ctx, data, size, rate);
- free(data);
+ JARXM_FREE(data);
switch(ret) {
case 0: