1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-02-18 05:12:15 +02:00

maint: heap.c: simplify dynamic allocations

* gl/lib/heap.c (heap_alloc): Use the fact that the xalloc
routines will not return NULL.  Also remove the redundant
temporary variables.
(heap_insert): From Jim Meyering, use x2nrealloc() which
is simpler while handling overflow and increasing the
size more efficiently.  This reallocation is currently
unused by coreutils in any case as it preallocates enough.
This commit is contained in:
Pádraig Brady
2010-07-13 08:23:52 +01:00
parent 9face836f3
commit f8574063d5

View File

@@ -36,22 +36,12 @@ static void heapify_up (void **, size_t,
struct heap *
heap_alloc (int (*compare)(const void *, const void *), size_t n_reserve)
{
struct heap *heap;
void *xmalloc_ret = xmalloc (sizeof *heap);
heap = (struct heap *) xmalloc_ret;
if (!heap)
return NULL;
struct heap *heap = xmalloc (sizeof *heap);
if (n_reserve <= 0)
if (n_reserve == 0)
n_reserve = 1;
xmalloc_ret = xmalloc (n_reserve * sizeof *(heap->array));
heap->array = (void **) xmalloc_ret;
if (!heap->array)
{
free (heap);
return NULL;
}
heap->array = xmalloc (n_reserve * sizeof *(heap->array));
heap->array[0] = NULL;
heap->capacity = n_reserve;
@@ -82,15 +72,8 @@ int
heap_insert (struct heap *heap, void *item)
{
if (heap->capacity - 1 <= heap->count)
{
size_t new_size = (2 + heap->count) * sizeof *(heap->array);
void *realloc_ret = xrealloc (heap->array, new_size);
heap->array = (void **) realloc_ret;
heap->capacity = (2 + heap->count);
if (!heap->array)
return -1;
}
heap->array = x2nrealloc (heap->array, &heap->capacity,
sizeof *(heap->array));
heap->array[++heap->count] = item;
heapify_up (heap->array, heap->count, heap->compare);