mojoshader.c
changeset 1182 179ffe99c57f
parent 1181 b873f3b0f838
child 1183 ec44ee868688
equal deleted inserted replaced
1181:b873f3b0f838 1182:179ffe99c57f
   305 static inline void out_of_memory(Context *ctx)
   305 static inline void out_of_memory(Context *ctx)
   306 {
   306 {
   307     ctx->isfail = ctx->out_of_memory = 1;
   307     ctx->isfail = ctx->out_of_memory = 1;
   308 } // out_of_memory
   308 } // out_of_memory
   309 
   309 
       
   310 static char zeromalloc = 0;
   310 static inline void *Malloc(Context *ctx, const size_t len)
   311 static inline void *Malloc(Context *ctx, const size_t len)
   311 {
   312 {
   312     void *retval = ctx->malloc((int) len, ctx->malloc_data);
   313     void *retval = (len == 0) ? &zeromalloc : ctx->malloc((int) len, ctx->malloc_data);
   313     if (retval == NULL)
   314     if (retval == NULL)
   314         out_of_memory(ctx);
   315         out_of_memory(ctx);
   315     return retval;
   316     return retval;
   316 } // Malloc
   317 } // Malloc
   317 
   318 
   323     return retval;
   324     return retval;
   324 } // StrDup
   325 } // StrDup
   325 
   326 
   326 static inline void Free(Context *ctx, void *ptr)
   327 static inline void Free(Context *ctx, void *ptr)
   327 {
   328 {
   328     ctx->free(ptr, ctx->malloc_data);
   329     if ((ptr != &zeromalloc) && (ptr != NULL))
       
   330         ctx->free(ptr, ctx->malloc_data);
   329 } // Free
   331 } // Free
   330 
   332 
   331 static void * MOJOSHADERCALL MallocBridge(int bytes, void *data)
   333 static void * MOJOSHADERCALL MallocBridge(int bytes, void *data)
   332 {
   334 {
   333     return Malloc((Context *) data, (size_t) bytes);
   335     return Malloc((Context *) data, (size_t) bytes);