1
0
mirror of https://github.com/alliedmodders/hl2sdk.git synced 2024-12-23 01:59:43 +08:00

Fix crash saving KeyValues to file on games using older SDK 2013 version (#38)

Fixes https://github.com/alliedmodders/sourcemod/issues/666

The tier1 lib will need to be recompiled for all platforms as well.
This commit is contained in:
Nicholas Hastings 2017-11-05 08:42:51 -05:00 committed by GitHub
parent 245ba001b2
commit 537953200e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -45,6 +45,30 @@ void KVStringDelete(void* pMem)
MemAlloc_Free(pMem); MemAlloc_Free(pMem);
} }
static bool BKeyValuesSystemSupportsCache()
{
static bool s_bSupportsCache = false;
static bool s_bCheckedForCacheSupport = false;
if (!s_bCheckedForCacheSupport)
{
// Use Sys_LoadModule to resolve actual bin name.
CSysModule *pTier0 = Sys_LoadModule("tier0");
if (pTier0)
{
#ifdef _WIN32
s_bSupportsCache = !!GetProcAddress(reinterpret_cast<HMODULE>(pTier0), "HushAsserts");
#elif defined(POSIX)
s_bSupportsCache = !!dlsym(reinterpret_cast<void *>(pTier0), "HushAsserts");
#endif
}
s_bCheckedForCacheSupport = true;
}
return s_bSupportsCache;
}
static const char * s_LastFileLoadingFrom = "unknown"; // just needed for error messages static const char * s_LastFileLoadingFrom = "unknown"; // just needed for error messages
// Statics for the growable string table // Statics for the growable string table
@ -766,8 +790,13 @@ bool KeyValues::SaveToFile( IBaseFileSystem *filesystem, const char *resourceNam
return false; return false;
} }
bool bSupportsCache = BKeyValuesSystemSupportsCache();
if (bSupportsCache)
{
KeyValuesSystem()->InvalidateCacheForFile(resourceName, pathID); KeyValuesSystem()->InvalidateCacheForFile(resourceName, pathID);
if ( bCacheResult ) { }
if ( bCacheResult && bSupportsCache ) {
KeyValuesSystem()->AddFileKeyValuesToCache( this, resourceName, pathID ); KeyValuesSystem()->AddFileKeyValuesToCache( this, resourceName, pathID );
} }
RecursiveSaveToFile(filesystem, f, NULL, 0, sortKeys, bAllowEmptyString ); RecursiveSaveToFile(filesystem, f, NULL, 0, sortKeys, bAllowEmptyString );