#include <security_cdsa_utilities/cssmalloc.h>
#include <stdlib.h>
#include <errno.h>
namespace Security {
void *CssmMemoryFunctionsAllocator::malloc(size_t size) throw(std::bad_alloc)
{ return functions.malloc(size); }
void CssmMemoryFunctionsAllocator::free(void *addr) throw()
{ return functions.free(addr); }
void *CssmMemoryFunctionsAllocator::realloc(void *addr, size_t size) throw(std::bad_alloc)
{ return functions.realloc(addr, size); }
CssmAllocatorMemoryFunctions::CssmAllocatorMemoryFunctions(Allocator &alloc)
{
AllocRef = &alloc;
malloc_func = relayMalloc;
free_func = relayFree;
realloc_func = relayRealloc;
calloc_func = relayCalloc;
}
void *CssmAllocatorMemoryFunctions::relayMalloc(size_t size, void *ref) throw(std::bad_alloc)
{ return allocator(ref).malloc(size); }
void CssmAllocatorMemoryFunctions::relayFree(void *mem, void *ref) throw()
{ allocator(ref).free(mem); }
void *CssmAllocatorMemoryFunctions::relayRealloc(void *mem, size_t size, void *ref) throw(std::bad_alloc)
{ return allocator(ref).realloc(mem, size); }
void *CssmAllocatorMemoryFunctions::relayCalloc(uint32 count, size_t size, void *ref) throw(std::bad_alloc)
{
void *mem = allocator(ref).malloc(size * count);
memset(mem, 0, size * count);
return mem;
}
}