Skip to content
Permalink
Browse files
Move zeromalloc trickery to internal malloc/free functions
  • Loading branch information
flibitijibibo committed May 23, 2018
1 parent 2be6d3a commit 406de3337e443de30b2a024468a834b42cb0d055
Showing with 20 additions and 21 deletions.
  1. +2 −4 mojoshader.c
  2. +2 −4 mojoshader_assembler.c
  3. +10 −2 mojoshader_common.c
  4. +2 −4 mojoshader_compiler.c
  5. +2 −3 mojoshader_opengl.c
  6. +2 −4 mojoshader_preprocessor.c
@@ -307,10 +307,9 @@ static inline void out_of_memory(Context *ctx)
ctx->isfail = ctx->out_of_memory = 1;
} // out_of_memory

static char zeromalloc = 0;
static inline void *Malloc(Context *ctx, const size_t len)
{
void *retval = (len == 0) ? &zeromalloc : ctx->malloc((int) len, ctx->malloc_data);
void *retval = ctx->malloc((int) len, ctx->malloc_data);
if (retval == NULL)
out_of_memory(ctx);
return retval;
@@ -326,8 +325,7 @@ static inline char *StrDup(Context *ctx, const char *str)

static inline void Free(Context *ctx, void *ptr)
{
if ((ptr != &zeromalloc) && (ptr != NULL))
ctx->free(ptr, ctx->malloc_data);
ctx->free(ptr, ctx->malloc_data);
} // Free

static void * MOJOSHADERCALL MallocBridge(int bytes, void *data)
@@ -72,10 +72,9 @@ static inline void out_of_memory(Context *ctx)
ctx->isfail = ctx->out_of_memory = 1;
} // out_of_memory

static char zeromalloc = 0;
static inline void *Malloc(Context *ctx, const size_t len)
{
void *retval = (len == 0) ? &zeromalloc : ctx->malloc((int) len, ctx->malloc_data);
void *retval = ctx->malloc((int) len, ctx->malloc_data);
if (retval == NULL)
out_of_memory(ctx);
return retval;
@@ -91,8 +90,7 @@ static inline char *StrDup(Context *ctx, const char *str)

static inline void Free(Context *ctx, void *ptr)
{
if ((ptr != &zeromalloc) && (ptr != NULL))
ctx->free(ptr, ctx->malloc_data);
ctx->free(ptr, ctx->malloc_data);
} // Free

static void *MallocBridge(int bytes, void *data)
@@ -4,8 +4,16 @@

// Convenience functions for allocators...
#if !MOJOSHADER_FORCE_ALLOCATOR
void * MOJOSHADERCALL MOJOSHADER_internal_malloc(int bytes, void *d) { return malloc(bytes); }
void MOJOSHADERCALL MOJOSHADER_internal_free(void *ptr, void *d) { free(ptr); }
static char zeromalloc = 0;
void * MOJOSHADERCALL MOJOSHADER_internal_malloc(int bytes, void *d)
{
return (bytes == 0) ? &zeromalloc : malloc(bytes);
} // MOJOSHADER_internal_malloc
void MOJOSHADERCALL MOJOSHADER_internal_free(void *ptr, void *d)
{
if ((ptr != &zeromalloc) && (ptr != NULL))
free(ptr);
} // MOJOSHADER_internal_free
#endif

MOJOSHADER_error MOJOSHADER_out_of_mem_error = {
@@ -160,10 +160,9 @@ static inline void out_of_memory(Context *ctx)
ctx->isfail = ctx->out_of_memory = 1;
} // out_of_memory

static char zeromalloc = 0;
static inline void *Malloc(Context *ctx, const size_t len)
{
void *retval = (len == 0) ? &zeromalloc : ctx->malloc((int) len, ctx->malloc_data);
void *retval = ctx->malloc((int) len, ctx->malloc_data);
if (retval == NULL)
out_of_memory(ctx);
return retval;
@@ -179,8 +178,7 @@ static inline char *StrDup(Context *ctx, const char *str)

static inline void Free(Context *ctx, void *ptr)
{
if ((ptr != &zeromalloc) && (ptr != NULL))
ctx->free(ptr, ctx->malloc_data);
ctx->free(ptr, ctx->malloc_data);
} // Free

static void *MallocBridge(int bytes, void *data)
@@ -347,18 +347,17 @@ static inline void out_of_memory(void)
set_error("out of memory");
} // out_of_memory

static char zeromalloc = 0;
static inline void *Malloc(const size_t len)
{
void *retval = (len == 0) ? &zeromalloc : ctx->malloc_fn((int) len, ctx->malloc_data);
void *retval = ctx->malloc_fn((int) len, ctx->malloc_data);
if (retval == NULL)
out_of_memory();
return retval;
} // Malloc

static inline void Free(void *ptr)
{
if ((ptr != &zeromalloc) && (ptr != NULL))
if (ptr != NULL)
ctx->free_fn(ptr, ctx->malloc_data);
} // Free

@@ -68,19 +68,17 @@ static inline void out_of_memory(Context *ctx)
ctx->out_of_memory = 1;
} // out_of_memory

static char zeromalloc = 0;
static inline void *Malloc(Context *ctx, const size_t len)
{
void *retval = (len == 0) ? &zeromalloc : ctx->malloc((int) len, ctx->malloc_data);
void *retval = ctx->malloc((int) len, ctx->malloc_data);
if (retval == NULL)
out_of_memory(ctx);
return retval;
} // Malloc

static inline void Free(Context *ctx, void *ptr)
{
if ((ptr != &zeromalloc) && (ptr != NULL))
ctx->free(ptr, ctx->malloc_data);
ctx->free(ptr, ctx->malloc_data);
} // Free

static void *MallocBridge(int bytes, void *data)

0 comments on commit 406de33

Please sign in to comment.