Support reallocarray(3)

This commit is contained in:
Christian Göttsche 2025-04-05 15:59:11 +02:00
parent 1d7fc7ffe0
commit 98298a276b
2 changed files with 13 additions and 0 deletions

View file

@ -1656,6 +1656,17 @@ EXPORT void *h_realloc(void *old, size_t size) {
return new;
}
EXPORT void *h_reallocarray(void *ptr, size_t nmemb, size_t size) {
size_t bytes;
if (unlikely(__builtin_mul_overflow(nmemb, size, &bytes))) {
errno = ENOMEM;
return NULL;
}
return h_realloc(ptr, bytes);
}
EXPORT int h_posix_memalign(void **memptr, size_t alignment, size_t size) {
return alloc_aligned(memptr, alignment, size, sizeof(void *));
}

View file

@ -13,6 +13,7 @@ extern "C" {
#define h_malloc malloc
#define h_calloc calloc
#define h_realloc realloc
#define h_reallocarray reallocarray
#define h_aligned_alloc aligned_alloc
#define h_free free
@ -51,6 +52,7 @@ extern "C" {
__attribute__((malloc)) __attribute__((alloc_size(1))) void *h_malloc(size_t size);
__attribute__((malloc)) __attribute__((alloc_size(1, 2))) void *h_calloc(size_t nmemb, size_t size);
__attribute__((alloc_size(2))) void *h_realloc(void *ptr, size_t size);
__attribute__((alloc_size(2, 3))) void *h_reallocarray(void *ptr, size_t nmemb, size_t size);
__attribute__((malloc)) __attribute__((alloc_size(2))) __attribute__((alloc_align(1)))
void *h_aligned_alloc(size_t alignment, size_t size);
void h_free(void *ptr);