Commit c296e05b authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Cleanup / speedup

parent 39c62524
...@@ -228,37 +228,36 @@ void config_ChainDestroy( config_chain_t *p_cfg ) ...@@ -228,37 +228,36 @@ void config_ChainDestroy( config_chain_t *p_cfg )
void __config_ChainParse( vlc_object_t *p_this, const char *psz_prefix, void __config_ChainParse( vlc_object_t *p_this, const char *psz_prefix,
const char *const *ppsz_options, config_chain_t *cfg ) const char *const *ppsz_options, config_chain_t *cfg )
{ {
char *psz_name; if( psz_prefix == NULL ) psz_prefix = "";
int i_type; size_t plen = 1 + strlen( psz_prefix );
int i;
/* First, var_Create all variables */ /* First, var_Create all variables */
for( i = 0; ppsz_options[i] != NULL; i++ ) for( size_t i = 0; ppsz_options[i] != NULL; i++ )
{ {
asprintf( &psz_name, "%s%s", psz_prefix, const char *optname = ppsz_options[i];
*ppsz_options[i] == '*' ? &ppsz_options[i][1] : ppsz_options[i] ); if (optname[0] == '*')
optname++;
i_type = config_GetType( p_this, psz_name ); char name[plen + strlen( optname )];
snprintf( name, sizeof (name), "%s%s", psz_prefix, optname );
var_Create( p_this, psz_name, i_type | VLC_VAR_DOINHERIT ); if( var_Create( p_this, name,
free( psz_name ); config_GetType( p_this, name ) | VLC_VAR_DOINHERIT ) )
return /* VLC_xxx */;
} }
/* Now parse options and set value */ /* Now parse options and set value */
if( psz_prefix == NULL ) psz_prefix = ""; for(; cfg; cfg = cfg->p_next )
while( cfg )
{ {
vlc_value_t val; vlc_value_t val;
vlc_bool_t b_yes = VLC_TRUE; vlc_bool_t b_yes = VLC_TRUE;
vlc_bool_t b_once = VLC_FALSE; vlc_bool_t b_once = VLC_FALSE;
module_config_t *p_conf; module_config_t *p_conf;
int i_type;
size_t i;
if( cfg->psz_name == NULL || *cfg->psz_name == '\0' ) if( cfg->psz_name == NULL || *cfg->psz_name == '\0' )
{
cfg = cfg->p_next;
continue; continue;
}
for( i = 0; ppsz_options[i] != NULL; i++ ) for( i = 0; ppsz_options[i] != NULL; i++ )
{ {
if( !strcmp( ppsz_options[i], cfg->psz_name ) ) if( !strcmp( ppsz_options[i], cfg->psz_name ) )
...@@ -282,68 +281,62 @@ void __config_ChainParse( vlc_object_t *p_this, const char *psz_prefix, ...@@ -282,68 +281,62 @@ void __config_ChainParse( vlc_object_t *p_this, const char *psz_prefix,
} }
} }
if( ppsz_options[i] == NULL ) if( ppsz_options[i] == NULL )
{ {
msg_Warn( p_this, "option %s is unknown", cfg->psz_name ); msg_Warn( p_this, "option %s is unknown", cfg->psz_name );
cfg = cfg->p_next;
continue; continue;
} }
/* create name */ /* create name */
asprintf( &psz_name, "%s%s", psz_prefix, b_once ? &ppsz_options[i][1] : ppsz_options[i] ); char name[plen + strlen( ppsz_options[i] )];
const char *psz_name = name;
snprintf( name, sizeof (name), "%s%s", psz_prefix,
b_once ? (ppsz_options[i] + 1) : ppsz_options[i] );
/* Check if the option is deprecated */ /* Check if the option is deprecated */
p_conf = config_FindConfig( p_this, psz_name ); p_conf = config_FindConfig( p_this, name );
/* This is basically cut and paste from src/misc/configuration.c /* This is basically cut and paste from src/misc/configuration.c
* with slight changes */ * with slight changes */
if( p_conf && p_conf->psz_current ) if( p_conf && p_conf->psz_current )
{ {
if( !strcmp( p_conf->psz_current, "SUPPRESSED" ) ) if( p_conf->b_strict )
{ {
msg_Err( p_this, "Option %s is no longer used.", msg_Err( p_this, "Option %s is not supported anymore.",
p_conf->psz_name ); p_conf->psz_name );
goto next;
}
else if( p_conf->b_strict )
{
msg_Err( p_this, "Option %s is deprecated. Use %s instead.",
p_conf->psz_name, p_conf->psz_current );
/* TODO: this should return an error and end option parsing /* TODO: this should return an error and end option parsing
* ... but doing this would change the VLC API and all the * ... but doing this would change the VLC API and all the
* modules so i'll do it later */ * modules so i'll do it later */
goto next; continue;
}
else
{
msg_Warn( p_this, "Option %s is deprecated. You should use "
"%s instead.", p_conf->psz_name, p_conf->psz_current );
free( psz_name );
psz_name = strdup( p_conf->psz_current );
} }
msg_Warn( p_this, "Option %s is obsolete. Use %s instead.",
p_conf->psz_name, p_conf->psz_current );
psz_name = p_conf->psz_current;
} }
/* </Check if the option is deprecated> */ /* </Check if the option is deprecated> */
/* get the type of the variable */ /* get the type of the variable */
msg_Err( p_this, "name = %s", name );
i_type = config_GetType( p_this, psz_name ); i_type = config_GetType( p_this, psz_name );
if( !i_type ) if( !i_type )
{ {
msg_Warn( p_this, "unknown option %s (value=%s)", msg_Warn( p_this, "unknown option %s (value=%s)",
cfg->psz_name, cfg->psz_value ); cfg->psz_name, cfg->psz_value );
goto next; continue;
} }
i_type &= 0x00f0; i_type &= CONFIG_ITEM;
if( i_type != VLC_VAR_BOOL && cfg->psz_value == NULL ) if( i_type != VLC_VAR_BOOL && cfg->psz_value == NULL )
{ {
msg_Warn( p_this, "missing value for option %s", cfg->psz_name ); msg_Warn( p_this, "missing value for option %s", cfg->psz_name );
goto next; continue;
} }
if( i_type != VLC_VAR_STRING && b_once ) if( i_type != VLC_VAR_STRING && b_once )
{ {
msg_Warn( p_this, "*option_name need to be a string option" ); msg_Warn( p_this, "*option_name need to be a string option" );
goto next; continue;
} }
switch( i_type ) switch( i_type )
...@@ -376,15 +369,11 @@ void __config_ChainParse( vlc_object_t *p_this, const char *psz_prefix, ...@@ -376,15 +369,11 @@ void __config_ChainParse( vlc_object_t *p_this, const char *psz_prefix,
{ {
free( val2.psz_string ); free( val2.psz_string );
msg_Dbg( p_this, "ignoring option %s (not first occurrence)", psz_name ); msg_Dbg( p_this, "ignoring option %s (not first occurrence)", psz_name );
goto next; continue;
} }
free( val2.psz_string ); free( val2.psz_string );
} }
var_Set( p_this, psz_name, val ); var_Set( p_this, psz_name, val );
msg_Dbg( p_this, "set config option: %s to %s", psz_name, cfg->psz_value ); msg_Dbg( p_this, "set config option: %s to %s", psz_name, cfg->psz_value );
next:
free( psz_name );
cfg = cfg->p_next;
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment