From ade560c6018e0d6b81c519d7da48e92316255532 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Wed, 5 Feb 2025 18:55:51 +0300 Subject: [PATCH] common: cvar: make auto descriptions private to cvar subsystem, use them when Cvar_Get is called with NULL description It allows us to not lose engine-side description when client or gameui registers cvar with the same name. In case of menu it's the only way to get cvar pointer. --- engine/client/cl_game.c | 2 +- engine/client/cl_gameui.c | 2 +- engine/common/cvar.c | 16 +++++++--------- engine/common/cvar.h | 1 - engine/common/filesystem_engine.c | 4 +++- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/engine/client/cl_game.c b/engine/client/cl_game.c index 00141785..a7659fd7 100644 --- a/engine/client/cl_game.c +++ b/engine/client/cl_game.c @@ -1760,7 +1760,7 @@ static cvar_t *GAME_EXPORT pfnCvar_RegisterClientVariable( const char *szName, c || !Q_stricmp( szName, "sensitivity" )) flags |= FCVAR_PRIVILEGED; - return (cvar_t *)Cvar_Get( szName, szValue, flags|FCVAR_CLIENTDLL, Cvar_BuildAutoDescription( szName, flags|FCVAR_CLIENTDLL )); + return (cvar_t *)Cvar_Get( szName, szValue, flags|FCVAR_CLIENTDLL, NULL ); } static int GAME_EXPORT Cmd_AddClientCommand( const char *cmd_name, xcommand_t function ) diff --git a/engine/client/cl_gameui.c b/engine/client/cl_gameui.c index b39ee040..be461513 100644 --- a/engine/client/cl_gameui.c +++ b/engine/client/cl_gameui.c @@ -691,7 +691,7 @@ pfnCvar_RegisterVariable */ static cvar_t *GAME_EXPORT pfnCvar_RegisterGameUIVariable( const char *szName, const char *szValue, int flags ) { - return (cvar_t *)Cvar_Get( szName, szValue, flags|FCVAR_GAMEUIDLL, Cvar_BuildAutoDescription( szName, flags|FCVAR_GAMEUIDLL )); + return (cvar_t *)Cvar_Get( szName, szValue, flags|FCVAR_GAMEUIDLL, NULL ); } static int GAME_EXPORT Cmd_AddGameUICommand( const char *cmd_name, xcommand_t function ) diff --git a/engine/common/cvar.c b/engine/common/cvar.c index cdc18d7d..c6bdc1a0 100644 --- a/engine/common/cvar.c +++ b/engine/common/cvar.c @@ -103,16 +103,10 @@ Cvar_BuildAutoDescription build cvar auto description that based on the setup flags ============ */ -const char *Cvar_BuildAutoDescription( const char *szName, int flags ) +static const char *Cvar_BuildAutoDescription( int flags ) { static char desc[256]; - if( FBitSet( flags, FCVAR_GLCONFIG )) - { - Q_snprintf( desc, sizeof( desc ), CVAR_GLCONFIG_DESCRIPTION, szName ); - return desc; - } - desc[0] = '\0'; if( FBitSet( flags, FCVAR_EXTDLL )) @@ -447,7 +441,7 @@ convar_t *Cvar_Get( const char *name, const char *value, int flags, const char * Cvar_DirectSet( var, value ); } - if( FBitSet( var->flags, FCVAR_ALLOCATED ) && Q_strcmp( var_desc, var->desc )) + if( FBitSet( var->flags, FCVAR_ALLOCATED ) && var_desc != NULL && Q_strcmp( var_desc, var->desc )) { if( !FBitSet( flags, FCVAR_GLCONFIG )) Con_Reportf( "%s change description from %s to %s\n", var->name, var->desc, var_desc ); @@ -460,6 +454,10 @@ convar_t *Cvar_Get( const char *name, const char *value, int flags, const char * } // allocate a new cvar + + if( !var_desc ) + var_desc = Cvar_BuildAutoDescription( flags ); + var = Mem_Malloc( cvar_pool, sizeof( *var )); var->name = copystringpool( cvar_pool, name ); var->string = copystringpool( cvar_pool, value ); @@ -1206,7 +1204,7 @@ static void Cvar_List_f( void ) if( FBitSet( var->flags, FCVAR_EXTENDED|FCVAR_ALLOCATED )) Con_Printf( " %-*s %s ^3%s^7\n", 32, var->name, value, var->desc ); - else Con_Printf( " %-*s %s ^3%s^7\n", 32, var->name, value, Cvar_BuildAutoDescription( var->name, var->flags )); + else Con_Printf( " %-*s %s ^3%s^7\n", 32, var->name, value, Cvar_BuildAutoDescription( var->flags )); count++; } diff --git a/engine/common/cvar.h b/engine/common/cvar.h index 3960fbc2..c76fdf6f 100644 --- a/engine/common/cvar.h +++ b/engine/common/cvar.h @@ -44,7 +44,6 @@ void Cvar_DirectSet( convar_t *var, const char *value ); void Cvar_DirectSetValue( convar_t *var, float value ); void Cvar_Set( const char *var_name, const char *value ); void Cvar_SetValue( const char *var_name, float value ); -const char *Cvar_BuildAutoDescription( const char *szName, int flags ) RETURNS_NONNULL; float Cvar_VariableValue( const char *var_name ); int Cvar_VariableInteger( const char *var_name ); const char *Cvar_VariableString( const char *var_name ) RETURNS_NONNULL; diff --git a/engine/common/filesystem_engine.c b/engine/common/filesystem_engine.c index f10744c2..43f5bca2 100644 --- a/engine/common/filesystem_engine.c +++ b/engine/common/filesystem_engine.c @@ -258,7 +258,8 @@ static qboolean FS_DetermineReadOnlyRootDirectory( char *out, size_t size ) void FS_CheckConfig( void ) { - if( fs_mount_lv.value || fs_mount_hd.value || fs_mount_addon.value || fs_mount_l10n.value ) + // only used to prevent rescan after reading config.cfg when user hasn't enabled any addon directories + if( fs_mount_lv.value || fs_mount_hd.value || fs_mount_addon.value || fs_mount_l10n.value || Q_stricmp( ui_language.string, "english" )) FS_Rescan_f(); } @@ -318,6 +319,7 @@ void FS_Init( const char *basedir ) Cvar_RegisterVariable( &fs_mount_lv ); Cvar_RegisterVariable( &fs_mount_addon ); Cvar_RegisterVariable( &fs_mount_l10n ); + Cvar_RegisterVariable( &ui_language ); if( !Sys_GetParmFromCmdLine( "-dll", host.gamedll )) host.gamedll[0] = 0;