mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Tier1: use CUtlStringList for ConVar flag string parser
The previous implementation contained a bug causing it to add other flags intermittently. Utilize CUtlStringList instead as it was designed for this purpose.
This commit is contained in:
parent
057a2c801a
commit
8c9d873fbe
@ -320,8 +320,7 @@ void CModSystem::ModInstance_t::ParseConVars()
|
||||
}
|
||||
}
|
||||
|
||||
int flags = FCVAR_NONE;
|
||||
|
||||
int flags;
|
||||
if (ConVar_ParseFlagString(pszFlagsString, flags, pszName))
|
||||
{
|
||||
if (g_pCVar->FindCommandBase(pszName) != nullptr)
|
||||
|
@ -74,37 +74,24 @@ ConVarFlags g_ConVarFlags;
|
||||
//-----------------------------------------------------------------------------
|
||||
bool ConVar_ParseFlagString(const char* pszFlags, int& nFlags, const char* pszConVarName)
|
||||
{
|
||||
const size_t len = V_strlen(pszFlags);
|
||||
CUtlString sFlag;
|
||||
nFlags = FCVAR_NONE;
|
||||
const CUtlStringList flagList(pszFlags, "|");
|
||||
|
||||
for (size_t i = 0; i < len; ++i)
|
||||
FOR_EACH_VEC(flagList, i)
|
||||
{
|
||||
char c = pszFlags[i];
|
||||
const char* sflag = flagList[i];
|
||||
const int find = g_ConVarFlags.m_StringToFlags.FindElement(sflag, -1);
|
||||
|
||||
if (V_isspace(c))
|
||||
continue;
|
||||
|
||||
if (c != '|')
|
||||
sFlag += c;
|
||||
|
||||
if (c == '|' || i == len - 1)
|
||||
if (find == -1)
|
||||
{
|
||||
if (sFlag == "")
|
||||
continue;
|
||||
Warning(eDLL_T::COMMON,
|
||||
"%s: Attempted to parse invalid flag '%s' for convar '%s'\n",
|
||||
__FUNCTION__, sflag, pszConVarName);
|
||||
|
||||
const int find = g_ConVarFlags.m_StringToFlags.FindElement(sFlag.Get(), -1);
|
||||
if (find == -1)
|
||||
{
|
||||
Warning(eDLL_T::COMMON,
|
||||
"%s: Attempted to parse invalid flag '%s' for convar '%s'\n",
|
||||
__FUNCTION__, sFlag.Get(), pszConVarName);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
nFlags |= find;
|
||||
sFlag = "";
|
||||
return false;
|
||||
}
|
||||
|
||||
nFlags |= find;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user