Fixed some gamedata lookups requiring symbols on linux/mac (bug 4832, r=fyren).

This commit is contained in:
Nicholas Hastings
2011-04-04 13:44:19 -04:00
parent a5c4739804
commit ef082d855c
3 changed files with 82 additions and 59 deletions
+23 -16
View File
@@ -285,26 +285,33 @@ void TempEntityManager::Initialize()
int offset;
m_Loaded = false;
/*
* First try to lookup s_pTempEntities directly for platforms with symbols.
* If symbols aren't present (Windows or stripped Linux/Mac),
* attempt find via CBaseTempEntity ctor + offset
*/
/* Read our sigs and offsets from the config file */
#if defined PLATFORM_WINDOWS
if (!g_pGameConf->GetMemSig("CBaseTempEntity", &addr) || !addr)
if (g_pGameConf->GetMemSig("s_pTempEntities", &addr) && addr)
{
/* Store the head of the TE linked list */
m_ListHead = *(void **)addr;
}
else if (g_pGameConf->GetMemSig("CBaseTempEntity", &addr) && addr)
{
if (!g_pGameConf->GetOffset("s_pTempEntities", &offset))
{
return;
}
/* Store the head of the TE linked list */
m_ListHead = **(void ***)((unsigned char *)addr + offset);
}
else
{
return;
}
if (!g_pGameConf->GetOffset("s_pTempEntities", &offset))
{
return;
}
/* Store the head of the TE linked list */
m_ListHead = **(void ***)((unsigned char *)addr + offset);
#else
if (!g_pGameConf->GetMemSig("s_pTempEntities", &addr) || !addr)
{
return;
}
/* Store the head of the TE linked list */
m_ListHead = *(void **)addr;
#endif
if (!g_pGameConf->GetOffset("GetTEName", &m_NameOffs))
{
return;
+17 -18
View File
@@ -39,29 +39,28 @@ void InitializeValveGlobals()
{
g_EntList = gamehelpers->GetGlobalEntityList();
/*
* g_pGameRules
*
* First try to lookup pointer directly for platforms with symbols.
* If symbols aren't present (Windows or stripped Linux/Mac),
* attempt find via CreateGameRulesObject + offset
*/
char *addr;
#ifdef PLATFORM_WINDOWS
/* g_pGameRules */
if (!g_pGameConf->GetMemSig("CreateGameRulesObject", (void **)&addr) || !addr)
if (g_pGameConf->GetMemSig("g_pGameRules", (void **)&addr) && addr)
{
return;
g_pGameRules = reinterpret_cast<void **>(addr);
}
int offset;
if (!g_pGameConf->GetOffset("g_pGameRules", &offset) || !offset)
else if (g_pGameConf->GetMemSig("CreateGameRulesObject", (void **)&addr) && addr)
{
return;
int offset;
if (!g_pGameConf->GetOffset("g_pGameRules", &offset) || !offset)
{
return;
}
g_pGameRules = *reinterpret_cast<void ***>(addr + offset);
}
g_pGameRules = *reinterpret_cast<void ***>(addr + offset);
#elif defined PLATFORM_LINUX || defined PLATFORM_APPLE
/* g_pGameRules */
if (!g_pGameConf->GetMemSig("g_pGameRules", (void **)&addr) || !addr)
{
return;
}
g_pGameRules = reinterpret_cast<void **>(addr);
#endif
}
size_t UTIL_StringToSignature(const char *str, char buffer[], size_t maxlength)