mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2026-10-10 03:43:06 +08:00
Extend ConVar_Unregister to actually unregister all cvars/cmds
This commit is contained in:
@@ -1562,6 +1562,7 @@ class ConCommandRegList
|
||||
{
|
||||
public:
|
||||
friend void ConVar_Register( uint64 nCVarFlag, FnConVarRegisterCallback cvar_reg_cb, FnConCommandRegisterCallback cmd_reg_cb );
|
||||
friend void ConVar_Unregister();
|
||||
friend void SetupConCommand( ConCommand *cmd, const ConCommandCreation_t &info );
|
||||
|
||||
struct Entry_t
|
||||
@@ -1573,6 +1574,7 @@ public:
|
||||
private:
|
||||
static void RegisterConCommand( const Entry_t &cmd );
|
||||
static void RegisterAll();
|
||||
static void UnregisterAll();
|
||||
static void AddToList( const Entry_t &cmd );
|
||||
|
||||
public:
|
||||
@@ -1590,6 +1592,7 @@ class ConVarRegList
|
||||
{
|
||||
public:
|
||||
friend void ConVar_Register( uint64 nCVarFlag, FnConVarRegisterCallback cvar_reg_cb, FnConCommandRegisterCallback cmd_reg_cb );
|
||||
friend void ConVar_Unregister();
|
||||
friend void SetupConVar( ConVarRefAbstract *cvar, ConVarData **cvar_data, ConVarCreation_t &info );
|
||||
|
||||
struct Entry_t
|
||||
@@ -1603,6 +1606,7 @@ public:
|
||||
private:
|
||||
static void RegisterConVar( const Entry_t &cvar );
|
||||
static void RegisterAll();
|
||||
static void UnregisterAll();
|
||||
static void AddToList( const Entry_t &cvar );
|
||||
|
||||
public:
|
||||
|
||||
+66
-22
@@ -39,6 +39,17 @@ static bool s_bRegistered = false;
|
||||
bool ConCommandRegList::s_bConCommandsRegistered = false;
|
||||
ConCommandRegList *ConCommandRegList::s_pRoot = nullptr;
|
||||
|
||||
void UnRegisterConCommand( ConCommandRef *cmd )
|
||||
{
|
||||
if(cmd->IsValidRef())
|
||||
{
|
||||
if(g_pCVar)
|
||||
g_pCVar->UnregisterConCommandCallbacks( *cmd );
|
||||
|
||||
cmd->InvalidateRef();
|
||||
}
|
||||
}
|
||||
|
||||
void ConCommandRegList::RegisterConCommand( const Entry_t &cmd )
|
||||
{
|
||||
*cmd.m_Command = g_pCVar->RegisterConCommand( cmd.m_Info, s_nCVarFlag );
|
||||
@@ -65,6 +76,25 @@ void ConCommandRegList::RegisterAll()
|
||||
RegisterConCommand( list->m_Entries[i] );
|
||||
}
|
||||
|
||||
prev = list->m_pPrev;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
void ConCommandRegList::UnregisterAll()
|
||||
{
|
||||
if(s_bConCommandsRegistered && g_pCVar)
|
||||
{
|
||||
s_bConCommandsRegistered = false;
|
||||
|
||||
ConCommandRegList *prev = nullptr;
|
||||
for(auto list = s_pRoot; list; list = prev)
|
||||
{
|
||||
for(size_t i = 0; i < list->m_nSize; i++)
|
||||
{
|
||||
UnRegisterConCommand( list->m_Entries[i].m_Command );
|
||||
}
|
||||
|
||||
prev = list->m_pPrev;
|
||||
delete list;
|
||||
};
|
||||
@@ -102,20 +132,20 @@ void SetupConCommand( ConCommand *cmd, const ConCommandCreation_t& info )
|
||||
ConCommandRegList::AddToList( entry );
|
||||
}
|
||||
|
||||
void UnRegisterConCommand( ConCommand *cmd )
|
||||
{
|
||||
if(cmd->IsValidRef())
|
||||
{
|
||||
if(g_pCVar)
|
||||
g_pCVar->UnregisterConCommandCallbacks( *cmd );
|
||||
|
||||
cmd->InvalidateRef();
|
||||
}
|
||||
}
|
||||
|
||||
bool ConVarRegList::s_bConVarsRegistered = false;
|
||||
ConVarRegList *ConVarRegList::s_pRoot = nullptr;
|
||||
|
||||
void UnRegisterConVar( ConVarRef *cvar )
|
||||
{
|
||||
if(cvar->IsValidRef())
|
||||
{
|
||||
if(g_pCVar)
|
||||
g_pCVar->UnregisterConVarCallbacks( *cvar );
|
||||
|
||||
cvar->InvalidateRef();
|
||||
}
|
||||
}
|
||||
|
||||
void ConVarRegList::RegisterConVar( const Entry_t &cvar )
|
||||
{
|
||||
g_pCVar->RegisterConVar( cvar.m_Info, s_nCVarFlag, cvar.m_pConVar, cvar.m_pConVarData );
|
||||
@@ -143,6 +173,25 @@ void ConVarRegList::RegisterAll()
|
||||
RegisterConVar( list->m_Entries[i] );
|
||||
}
|
||||
|
||||
prev = list->m_pPrev;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
void ConVarRegList::UnregisterAll()
|
||||
{
|
||||
if(s_bConVarsRegistered && g_pCVar)
|
||||
{
|
||||
s_bConVarsRegistered = false;
|
||||
|
||||
ConVarRegList *prev = nullptr;
|
||||
for(auto list = s_pRoot; list; list = prev)
|
||||
{
|
||||
for(size_t i = 0; i < list->m_nSize; i++)
|
||||
{
|
||||
UnRegisterConVar( list->m_Entries[i].m_pConVar );
|
||||
}
|
||||
|
||||
prev = list->m_pPrev;
|
||||
delete list;
|
||||
};
|
||||
@@ -181,17 +230,6 @@ void SetupConVar( ConVarRefAbstract *cvar, ConVarData **cvar_data, ConVarCreatio
|
||||
ConVarRegList::AddToList( entry );
|
||||
}
|
||||
|
||||
void UnRegisterConVar( ConVarRef *cvar )
|
||||
{
|
||||
if(cvar->IsValidRef())
|
||||
{
|
||||
if(g_pCVar)
|
||||
g_pCVar->UnregisterConVarCallbacks( *cvar );
|
||||
|
||||
cvar->InvalidateRef();
|
||||
}
|
||||
}
|
||||
|
||||
uint64 SanitiseConVarFlags( uint64 flags )
|
||||
{
|
||||
#ifdef SANITIZE_CVAR_FLAGS
|
||||
@@ -236,6 +274,12 @@ void ConVar_Unregister( )
|
||||
return;
|
||||
|
||||
s_bRegistered = false;
|
||||
s_nCVarFlag = FCVAR_NONE;
|
||||
s_ConVarRegCB = nullptr;
|
||||
s_ConCommandRegCB = nullptr;
|
||||
|
||||
ConCommandRegList::UnregisterAll();
|
||||
ConVarRegList::UnregisterAll();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user