fix for own error in BLI_heap_new_ex() when zero size is passed.

This commit is contained in:
Campbell Barton
2012-10-22 07:57:21 +00:00
parent ffd98941b5
commit 30fd258a0b

View File

@@ -122,8 +122,8 @@ static void heap_up(Heap *heap, unsigned int i)
Heap *BLI_heap_new_ex(unsigned int tot_reserve)
{
Heap *heap = (Heap *)MEM_callocN(sizeof(Heap), __func__);
heap->bufsize = tot_reserve;
heap->tree = (HeapNode **)MEM_mallocN(tot_reserve * sizeof(HeapNode *), "BLIHeapTree");
heap->bufsize = MAX2(1, tot_reserve);
heap->tree = (HeapNode **)MEM_mallocN(heap->bufsize * sizeof(HeapNode *), "BLIHeapTree");
heap->arena = BLI_memarena_new(1 << 16, "heap arena");
return heap;
@@ -152,23 +152,17 @@ HeapNode *BLI_heap_insert(Heap *heap, float value, void *ptr)
HeapNode *node;
if ((heap->size + 1) > heap->bufsize) {
unsigned int newsize = heap->bufsize * 2;
HeapNode **newtree;
newtree = (HeapNode **)MEM_mallocN(newsize * sizeof(*newtree), __func__);
memcpy(newtree, heap->tree, sizeof(HeapNode *) * heap->size);
MEM_freeN(heap->tree);
heap->tree = newtree;
heap->bufsize = newsize;
heap->bufsize = heap->bufsize * 2;
heap->tree = MEM_reallocN(heap->tree, heap->bufsize * sizeof(*heap->tree));
}
if (heap->freenodes) {
node = heap->freenodes;
heap->freenodes = (HeapNode *)(((HeapNode *)heap->freenodes)->ptr);
}
else
else {
node = (HeapNode *)BLI_memarena_alloc(heap->arena, sizeof *node);
}
node->value = value;
node->ptr = ptr;