Heap: add heap_freeSpace(), a new function.
authorbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Mon, 19 Apr 2010 22:49:56 +0000 (22:49 +0000)
committerbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Mon, 19 Apr 2010 22:49:56 +0000 (22:49 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3470 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/struct/heap.c
bertos/struct/heap.h

index b8d06701cbc04c9dd8766cf71743d1d3ae019f49..1e4d60530336c7ae0f86e8cf891e7eeb44ccf63a 100644 (file)
@@ -184,6 +184,25 @@ void heap_freemem(struct Heap* h, void *mem, size_t size)
        }
 }
 
+/**
+ * Returns the number of free bytes in a heap.
+ * \param h the heap to check.
+ *
+ * \note The returned value is the sum of all free memory regions 
+ *       in the heap.
+ *       Those regions are likely to be *not* contiguous,
+ *       so a successive allocation may fail even if the
+ *       requested amount of memory is lower than the current free space.
+ */
+size_t heap_freeSpace(struct Heap *h)
+{
+       size_t free_mem = 0;
+       for (MemChunck *chunk = h->FreeList; hunk; chunk = chunk->next)
+               free_mem += chunck->size;
+
+       return free_mem;
+}
+
 #if CONFIG_HEAP_MALLOC
 
 void *heap_malloc(struct Heap* h, size_t size)
index ad362a6b1966867a04a16b25854bf3b6bdc195e6..efd02c284ad5a7ffd9544cc8315bf37b521399c4 100644 (file)
@@ -85,6 +85,7 @@ void *heap_allocmem(struct Heap* heap, size_t size);
 /// Free a chunk of memory of \a size bytes from the heap
 void heap_freemem(struct Heap* heap, void *mem, size_t size);
 
+size_t heap_freeSpace(struct Heap *h);
 
 #define HNEW(heap, type) \
        (type*)heap_allocmem(heap, sizeof(type))