1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #define MODULE "xalloc"
- #include "compiler.h"
- #include "xmalloc.h"
- #include "common.h"
- #include <assert.h>
- no_return __noinline alloc_panic(void)
- {
- assert(!"FATAL: OUT OF MEMORY!!!");
- while (1)
- suspend();
- }
- void *xrealloc(void *ptr, size_t len)
- {
- return null_check(realloc(ptr, Max(len,1)));
- }
- void *xmalloc(size_t len)
- {
- return null_check(malloc(Max(len,1)));
- }
- void *xmalloc_dma(size_t len)
- {
- return null_check(heap_caps_malloc(Max(len,1), MALLOC_CAP_DMA));
- }
- void *xzalloc(size_t len)
- {
- return null_check(calloc(Max(len,1), 1));
- }
- static inline size_t nsize(size_t nmemb, size_t size)
- {
- size2_t len = nmemb * size;
- if (unlikely(len >> CHAR_BIT*sizeof(size_t)))
- alloc_panic();
- return (size_t)len;
- }
- void *xnmalloc(size_t nmemb, size_t size)
- {
- return xmalloc(nsize(nmemb, size));
- }
- void *xcalloc(size_t nmemb, size_t size)
- {
- return xzalloc(nsize(nmemb, size));
- }
- void *xnrealloc(void *ptr, size_t nmemb, size_t size)
- {
- return xrealloc(ptr, nsize(nmemb, size));
- }
|