blob: 82d6a11dbf8805e47c4c61b976f4f2789ed3d05c [file] [log] [blame]
/**
* 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 _recalloc(void *memory, size_t count, size_t size)
{
void *new_memory;
size_t previous_size;
size_t total_size;
if (__builtin_mul_overflow(count, size, &total_size))
return NULL;
previous_size = memory ? _msize(memory) : 0;
if (previous_size == (size_t)-1)
return NULL;
new_memory = realloc(memory, total_size);
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(_recalloc))(void *, size_t, size_t) = _recalloc;