diff --git a/components/heap/heap_caps.c b/components/heap/heap_caps.c index d19f5bd76e..0b27b0b523 100644 --- a/components/heap/heap_caps.c +++ b/components/heap/heap_caps.c @@ -171,22 +171,27 @@ HEAP_IRAM_ATTR void *heap_caps_realloc_default( void *ptr, size_t size ) */ HEAP_IRAM_ATTR void *heap_caps_malloc_prefer( size_t size, size_t num, ... ) { - va_list argp; - va_start( argp, num ); void *r = NULL; uint32_t caps = MALLOC_CAP_DEFAULT; - while (num--) { - caps = va_arg( argp, uint32_t ); - r = heap_caps_malloc_base( size, caps ); - if (r != NULL || size == 0) { - break; + + if (num > 0) { + va_list argp = {0}; + va_start(argp, num); + + for ( ; num > 0; --num) { + caps = va_arg(argp, uint32_t); + r = heap_caps_malloc_base(size, caps); + if (r != NULL || size == 0) { + break; + } } + + va_end( argp ); } - if (r == NULL && size > 0){ + if (r == NULL && size > 0) { heap_caps_alloc_failed(size, caps, __func__); } - va_end( argp ); return r; } @@ -195,46 +200,58 @@ HEAP_IRAM_ATTR void *heap_caps_malloc_prefer( size_t size, size_t num, ... ) */ HEAP_IRAM_ATTR void *heap_caps_realloc_prefer( void *ptr, size_t size, size_t num, ... ) { - va_list argp; - va_start( argp, num ); void *r = NULL; uint32_t caps = MALLOC_CAP_DEFAULT; - while (num--) { - caps = va_arg( argp, uint32_t ); - r = heap_caps_realloc_base( ptr, size, caps ); - if (r != NULL || size == 0) { - break; + + if (num > 0) { + va_list argp = {0}; + va_start(argp, num); + + for ( ; num > 0; --num) { + caps = va_arg(argp, uint32_t); + r = heap_caps_realloc_base(ptr, size, caps); + if (r != NULL || size == 0) { + break; + } } + + va_end( argp ); } - if (r == NULL && size > 0){ + if (r == NULL && size > 0) { heap_caps_alloc_failed(size, caps, __func__); } - va_end( argp ); return r; } + /* Memory callocation as preference in decreasing order. */ -HEAP_IRAM_ATTR void *heap_caps_calloc_prefer( size_t n, size_t size, size_t num, ... ) +HEAP_IRAM_ATTR void *heap_caps_calloc_prefer(size_t n, size_t size, size_t num, ...) { - va_list argp; - va_start( argp, num ); void *r = NULL; uint32_t caps = MALLOC_CAP_DEFAULT; - while (num--) { - caps = va_arg( argp, uint32_t ); - r = heap_caps_calloc_base( n, size, caps ); - if (r != NULL || size == 0){ - break; + + if (num > 0) { + va_list argp = {0}; + va_start(argp, num); + + for (; num > 0; --num) { + caps = va_arg(argp, uint32_t); + r = heap_caps_calloc_base(n, size, caps); + if (r != NULL || size == 0) { + break; + } } + + va_end(argp); } - if (r == NULL && size > 0){ + if (r == NULL && size > 0) { heap_caps_alloc_failed(size, caps, __func__); } - va_end( argp ); + return r; }