]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
maint: heap.c: simplify dynamic allocations
authorPádraig Brady <P@draigBrady.com>
Tue, 13 Jul 2010 07:23:52 +0000 (08:23 +0100)
committerPádraig Brady <P@draigBrady.com>
Tue, 13 Jul 2010 15:51:38 +0000 (16:51 +0100)
* 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.

gl/lib/heap.c

index a37224fa003d7cd5a01cc95058383989c88af4ea..1de3391a598dd8af0b8a703e30e11524206267ae 100644 (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);