fix(heap): Fixes Coverity false positive in va_list initialization

This commit is contained in:
Konstantin Kondrashov
2025-08-20 12:35:36 +03:00
committed by BOT
parent ca2ccf164c
commit 1ca82baec3

View File

@@ -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, ... ) HEAP_IRAM_ATTR void *heap_caps_malloc_prefer( size_t size, size_t num, ... )
{ {
va_list argp;
va_start( argp, num );
void *r = NULL; void *r = NULL;
uint32_t caps = MALLOC_CAP_DEFAULT; uint32_t caps = MALLOC_CAP_DEFAULT;
while (num--) {
caps = va_arg( argp, uint32_t ); if (num > 0) {
r = heap_caps_malloc_base( size, caps ); va_list argp = {0};
if (r != NULL || size == 0) { va_start(argp, num);
break;
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__); heap_caps_alloc_failed(size, caps, __func__);
} }
va_end( argp );
return r; 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, ... ) 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; void *r = NULL;
uint32_t caps = MALLOC_CAP_DEFAULT; uint32_t caps = MALLOC_CAP_DEFAULT;
while (num--) {
caps = va_arg( argp, uint32_t ); if (num > 0) {
r = heap_caps_realloc_base( ptr, size, caps ); va_list argp = {0};
if (r != NULL || size == 0) { va_start(argp, num);
break;
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__); heap_caps_alloc_failed(size, caps, __func__);
} }
va_end( argp );
return r; return r;
} }
/* /*
Memory callocation as preference in decreasing order. 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; void *r = NULL;
uint32_t caps = MALLOC_CAP_DEFAULT; uint32_t caps = MALLOC_CAP_DEFAULT;
while (num--) {
caps = va_arg( argp, uint32_t ); if (num > 0) {
r = heap_caps_calloc_base( n, size, caps ); va_list argp = {0};
if (r != NULL || size == 0){ va_start(argp, num);
break;
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__); heap_caps_alloc_failed(size, caps, __func__);
} }
va_end( argp );
return r; return r;
} }