mojoshader_compiler.c
changeset 1182 179ffe99c57f
parent 1145 07f69ab909ec
child 1188 25000edc0176
equal deleted inserted replaced
1181:b873f3b0f838 1182:179ffe99c57f
   158 static inline void out_of_memory(Context *ctx)
   158 static inline void out_of_memory(Context *ctx)
   159 {
   159 {
   160     ctx->isfail = ctx->out_of_memory = 1;
   160     ctx->isfail = ctx->out_of_memory = 1;
   161 } // out_of_memory
   161 } // out_of_memory
   162 
   162 
       
   163 static char zeromalloc = 0;
   163 static inline void *Malloc(Context *ctx, const size_t len)
   164 static inline void *Malloc(Context *ctx, const size_t len)
   164 {
   165 {
   165     void *retval = ctx->malloc((int) len, ctx->malloc_data);
   166     void *retval = (len == 0) ? &zeromalloc : ctx->malloc((int) len, ctx->malloc_data);
   166     if (retval == NULL)
   167     if (retval == NULL)
   167         out_of_memory(ctx);
   168         out_of_memory(ctx);
   168     return retval;
   169     return retval;
   169 } // Malloc
   170 } // Malloc
   170 
   171 
   176     return retval;
   177     return retval;
   177 } // StrDup
   178 } // StrDup
   178 
   179 
   179 static inline void Free(Context *ctx, void *ptr)
   180 static inline void Free(Context *ctx, void *ptr)
   180 {
   181 {
   181     ctx->free(ptr, ctx->malloc_data);
   182     if ((ptr != &zeromalloc) && (ptr != NULL))
       
   183         ctx->free(ptr, ctx->malloc_data);
   182 } // Free
   184 } // Free
   183 
   185 
   184 static void *MallocBridge(int bytes, void *data)
   186 static void *MallocBridge(int bytes, void *data)
   185 {
   187 {
   186     return Malloc((Context *) data, (size_t) bytes);
   188     return Malloc((Context *) data, (size_t) bytes);