merge with trunk at r27259 and commit of a patch by anthony jones to fix msvc (though...
[blender-staging.git] / source / blender / blenlib / intern / BLI_cellalloc.c
index efed99011d0fad75ce59b1f8a037bae8be62d4e7..1244fa32d48febf076da4baf3e7cd4a195f12a45 100644 (file)
@@ -94,7 +94,7 @@ void *BLI_cellalloc_malloc(long size, char *tag)
        }
 
        if (!pools[slot]) {
-               pools[slot] = BLI_mempool_create(slot, 1, 128);
+               pools[slot] = BLI_mempool_create(slot, 1, 128, 1);
        }
 
        memh = BLI_mempool_alloc(pools[slot]);
@@ -145,6 +145,31 @@ void BLI_cellalloc_free(void *mem)
        }
 }
 
+void *BLI_cellalloc_dupalloc(void *mem)
+{
+       MemHeader *memh = mem;
+       void *tmp;
+       int slot;
+
+#ifdef USE_GUARDEDALLOC
+       MEM_freeN(mem);
+       return;
+#endif
+       if (!memh)
+               return;
+
+       memh--;
+       if (memh->idcheck != MEMIDCHECK) {
+               printf("Error in BLI_cellalloc: attempt to free invalid block.\n");
+               return;
+       }
+
+       tmp = BLI_cellalloc_malloc(memh->size, memh->tag);
+       memcpy(tmp, mem, memh->size);
+
+       return tmp;
+}
+
 void BLI_cellalloc_printleaks(void)
 {
        MemHeader *memh;