| /** | |
| * This file has no copyright assigned and is placed in the Public Domain. | |
| * This file is part of the mingw-w64 runtime package. | |
| * No warranty is given; refer to the file DISCLAIMER.PD within this package. | |
| */ | |
| #include <malloc.h> | |
| #include <string.h> | |
| void * __cdecl _aligned_recalloc(void *memory, size_t count, size_t size, size_t alignment) | |
| { | |
| void *new_memory; | |
| size_t previous_size; | |
| size_t total_size; | |
| if (__builtin_mul_overflow(count, size, &total_size)) | |
| return NULL; | |
| previous_size = memory ? _aligned_msize(memory, alignment, 0) : 0; | |
| if (previous_size == (size_t)-1) | |
| return NULL; | |
| new_memory = _aligned_realloc(memory, total_size, alignment); | |
| if (new_memory && previous_size < total_size) | |
| memset(new_memory + previous_size, 0, total_size - previous_size); | |
| return new_memory; | |
| } | |
| void * (__cdecl *__MINGW_IMP_SYMBOL(_aligned_recalloc))(void *, size_t, size_t, size_t) = _aligned_recalloc; |