From: Pádraig Brady
Date: Tue, 13 Jul 2010 07:23:52 +0000 (+0100) Subject: maint: heap.c: simplify dynamic allocations X-Git-Tag: v8.6~110 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f8574063d566bbf08dbf2dc469f055f13684e525;p=thirdparty%2Fcoreutils.git 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. --- diff --git a/gl/lib/heap.c b/gl/lib/heap.c index a37224fa00..1de3391a59 100644 --- a/gl/lib/heap.c +++ b/gl/lib/heap.c @@ -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);