2021-12-03 21:55:19 +01:00
|
|
|
#include "pch.h"
|
|
|
|
#include "memalloc.h"
|
2022-10-18 00:26:07 +02:00
|
|
|
#include "tier0.h"
|
|
|
|
|
|
|
|
using namespace Tier0;
|
2021-12-03 21:55:19 +01:00
|
|
|
|
2021-12-30 02:58:19 +01:00
|
|
|
// TODO: rename to malloc and free after removing statically compiled .libs
|
|
|
|
|
2021-12-30 06:26:10 +01:00
|
|
|
extern "C" void* _malloc_base(size_t n)
|
2021-12-03 21:55:19 +01:00
|
|
|
{
|
|
|
|
// allocate into static buffer if g_pMemAllocSingleton isn't initialised
|
2021-12-31 13:44:15 +01:00
|
|
|
if (!g_pMemAllocSingleton)
|
2022-10-18 00:26:07 +02:00
|
|
|
TryCreateGlobalMemAlloc();
|
|
|
|
|
2021-12-31 13:44:15 +01:00
|
|
|
return g_pMemAllocSingleton->m_vtable->Alloc(g_pMemAllocSingleton, n);
|
2021-12-03 21:55:19 +01:00
|
|
|
}
|
|
|
|
|
2021-12-30 06:26:10 +01:00
|
|
|
/*extern "C" void* malloc(size_t n)
|
|
|
|
{
|
|
|
|
return _malloc_base(n);
|
|
|
|
}*/
|
|
|
|
|
|
|
|
extern "C" void _free_base(void* p)
|
2021-12-03 21:55:19 +01:00
|
|
|
{
|
2021-12-31 13:44:15 +01:00
|
|
|
if (!g_pMemAllocSingleton)
|
2022-10-18 00:26:07 +02:00
|
|
|
TryCreateGlobalMemAlloc();
|
|
|
|
|
2021-12-03 21:55:19 +01:00
|
|
|
g_pMemAllocSingleton->m_vtable->Free(g_pMemAllocSingleton, p);
|
2021-12-30 02:58:19 +01:00
|
|
|
}
|
|
|
|
|
2021-12-31 22:46:45 +01:00
|
|
|
extern "C" void* _realloc_base(void* oldPtr, size_t size)
|
|
|
|
{
|
2021-12-31 13:44:15 +01:00
|
|
|
if (!g_pMemAllocSingleton)
|
2022-10-18 00:26:07 +02:00
|
|
|
TryCreateGlobalMemAlloc();
|
|
|
|
|
2021-12-31 13:44:15 +01:00
|
|
|
return g_pMemAllocSingleton->m_vtable->Realloc(g_pMemAllocSingleton, oldPtr, size);
|
2021-12-30 06:26:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
extern "C" void* _calloc_base(size_t n, size_t size)
|
|
|
|
{
|
2021-12-31 13:44:15 +01:00
|
|
|
size_t bytes = n * size;
|
|
|
|
void* memory = _malloc_base(bytes);
|
2021-12-31 14:00:39 +01:00
|
|
|
if (memory)
|
|
|
|
{
|
2021-12-31 13:44:15 +01:00
|
|
|
memset(memory, 0, bytes);
|
|
|
|
}
|
|
|
|
return memory;
|
2021-12-30 06:26:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
extern "C" char* _strdup_base(const char* src)
|
|
|
|
{
|
|
|
|
char* str;
|
|
|
|
char* p;
|
|
|
|
int len = 0;
|
|
|
|
|
|
|
|
while (src[len])
|
|
|
|
len++;
|
2021-12-31 22:46:45 +01:00
|
|
|
str = reinterpret_cast<char*>(_malloc_base(len + 1));
|
2021-12-30 06:26:10 +01:00
|
|
|
p = str;
|
|
|
|
while (*src)
|
|
|
|
*p++ = *src++;
|
|
|
|
*p = '\0';
|
|
|
|
return str;
|
2021-12-30 04:47:16 +01:00
|
|
|
}
|
|
|
|
|
2022-04-14 00:29:44 +02:00
|
|
|
void* operator new(size_t n)
|
|
|
|
{
|
|
|
|
return _malloc_base(n);
|
|
|
|
}
|
2021-12-30 02:58:19 +01:00
|
|
|
|
2022-08-08 12:12:11 +02:00
|
|
|
void operator delete(void* p) noexcept
|
2022-04-14 00:29:44 +02:00
|
|
|
{
|
|
|
|
_free_base(p);
|
2022-08-08 12:12:11 +02:00
|
|
|
} // /FORCE:MULTIPLE
|