X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=mware%2Fheap.c;h=b1dbb72b6451c7d12f9513c88b4110a8325917d8;hb=888d1c49ed7cea0f272f520a74be35a32032bd6e;hp=2bac2b21373d0747ec851147a9d8230d7291a5ca;hpb=ea4ef51b306fde6480c03f72e81c4b31d51660f6;p=bertos.git diff --git a/mware/heap.c b/mware/heap.c index 2bac2b21..b1dbb72b 100755 --- a/mware/heap.c +++ b/mware/heap.c @@ -3,7 +3,7 @@ * * * \brief Heap subsystem (public interface). @@ -13,29 +13,35 @@ * \author Bernardo Innocenti */ -/* - * $Log$ - * Revision 1.3 2004/08/14 19:37:57 rasky - * Merge da SC: macros.h, pool.h, BIT_CHANGE, nome dei processi, etc. - * - * Revision 1.2 2004/08/04 15:54:18 rasky - * Merge da SC: prima versione veramente funzionante - * - * Revision 1.1 2004/07/31 16:33:58 rasky - * Spostato lo heap da kern/ a mware/ - * - * Revision 1.2 2004/06/03 11:27:09 bernie - * Add dual-license information. - * - * Revision 1.1 2004/05/23 17:27:00 bernie - * Import kern/ subdirectory. - * - */ +/*#* + *#* $Log$ + *#* Revision 1.8 2005/11/04 16:20:02 bernie + *#* Fix reference to README.devlib in header. + *#* + *#* Revision 1.7 2005/04/11 19:10:28 bernie + *#* Include top-level headers from cfg/ subdir. + *#* + *#* Revision 1.6 2004/10/26 09:02:13 bernie + *#* heap_free(): Handle NULL pointers like free(), write documentation. + *#* + *#* Revision 1.5 2004/10/03 20:43:22 bernie + *#* Import changes from sc/firmware. + *#* + *#* Revision 1.1 2004/07/31 16:33:58 rasky + *#* Spostato lo heap da kern/ a mware/ + *#* + *#* Revision 1.2 2004/06/03 11:27:09 bernie + *#* Add dual-license information. + *#* + *#* Revision 1.1 2004/05/23 17:27:00 bernie + *#* Import kern/ subdirectory. + *#* + *#*/ #include "heap.h" #include // memset() -#include // IS_POW2() -#include // ASSERT() +#include // IS_POW2() +#include // ASSERT() /* NOTE: struct size must be a 2's power! */ typedef struct _MemChunk @@ -204,11 +210,28 @@ void *heap_calloc(struct Heap* h, size_t size) return mem; } -void heap_free(struct Heap* h, void *mem_) +/*! + * Free a block of memory, determining its size automatically. + * + * \param h Heap from which the block was allocated. + * \param mem Pointer to a block of memory previously allocated with + * either heap_malloc() or heap_calloc(). + * + * \note If \a mem is a NULL pointer, no operation is performed. + * + * \note Freeing the same memory block twice has undefined behavior. + * + * \note This function works like the ANSI C free(). + */ +void heap_free(struct Heap *h, void *mem) { - size_t* mem = (size_t*)mem_; - --mem; - heap_freemem(h, mem, *mem); + size_t *_mem = (size_t *)mem; + + if (_mem) + { + --_mem; + heap_freemem(h, _mem, *_mem); + } } #endif /* CONFIG_HEAP_MALLOC */