Skip to content

Commit

Permalink
common: cvar: make auto descriptions private to cvar subsystem, use t…
Browse files Browse the repository at this point in the history
…hem 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.
  • Loading branch information
a1batross committed Feb 5, 2025
1 parent 62e3ba2 commit ade560c
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 13 deletions.
2 changes: 1 addition & 1 deletion engine/client/cl_game.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 )
Expand Down
2 changes: 1 addition & 1 deletion engine/client/cl_gameui.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 )
Expand Down
16 changes: 7 additions & 9 deletions engine/common/cvar.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 ))
Expand Down Expand Up @@ -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 );
Expand All @@ -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 );
Expand Down Expand Up @@ -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++;
}
Expand Down
1 change: 0 additions & 1 deletion engine/common/cvar.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 3 additions & 1 deletion engine/common/filesystem_engine.c
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit ade560c

Please sign in to comment.