r5sdk/r5dev/vpc/rson.cpp
Kawe Mazidjatari ef69611435 Replace memalloc calls throughout entire SDK
Global 'direct' usage of 'MemAllocSingleton()' has been jettisoned. Where possible, smart pointers were used instead. During the refactor, the following bugs were addressed and fixed:
- The virtual destructor of 'CCVarIteratorInternal' was NOT called on destruction.
- Class function 'KeyValues::MakeCopy' did NOT calculate the buffer size of the wide string correctly, the original calculation was 'len+1*sizeof(wchar_t)', but should've been '(len+1)*sizeof(wchar_t)'.

Some other code changes include:
- Tier0 include 'memstd.h' has been moved above all thirdparty includes, to make sure the memalloc functions get shadowed with ours in third party libraries as well.
- RPak file paths string literals are now defines.
- 'DestroyOverlay' has been refactored to match the assembly of the game.
2023-06-26 22:34:24 +02:00

44 lines
1.1 KiB
C++

#include "core/stdafx.h"
#include <tier0/memstd.h>
#include "tier1/utlbuffer.h"
#include <filesystem/filesystem.h>
#include "vpc/rson.h"
RSON::Node_t* RSON::LoadFromBuffer(const char* pszBufferName, char* pBuffer, RSON::eFieldType rootType)
{
return RSON_LoadFromBuffer(pszBufferName, pBuffer, rootType, 0, NULL);
}
RSON::Node_t* RSON::LoadFromFile(const char* pszFilePath)
{
if (FileSystem()->FileExists(pszFilePath, "GAME"))
{
FileHandle_t file = FileSystem()->Open(pszFilePath, "rt");
if (!file)
return NULL;
uint32_t nFileSize = FileSystem()->Size(file);
std::unique_ptr<char[]> fileBuf(new char[nFileSize + 1]);
int nRead = FileSystem()->Read(fileBuf.get(), nFileSize, file);
FileSystem()->Close(file);
fileBuf[nRead] = '\0';
RSON::Node_t* node = RSON::LoadFromBuffer(pszFilePath, fileBuf.get(), eFieldType::RSON_OBJECT);
if (node)
return node;
else
{
// [rexx]: not sure if this should be fatal or not. ideally this should be handled appropriately
// in the calling function
Error(eDLL_T::ENGINE, NO_ERROR, "Error loading file '%s'\n", pszFilePath);
return NULL;
}
}
return NULL;
}