mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
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.
44 lines
1.1 KiB
C++
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;
|
|
} |