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

Add support for aliases through vlc_config_set

parent 2bca4f1c
...@@ -184,8 +184,8 @@ struct module_config_t ...@@ -184,8 +184,8 @@ struct module_config_t
/* to take effect */ /* to take effect */
/* Deprecated */ /* Deprecated */
const char *psz_current; /* Good option name */ char *psz_oldname; /* Old option name */
vlc_bool_t b_strict; /* Transitionnal or strict */ vlc_bool_t b_removed;
/* Option values loaded from config file */ /* Option values loaded from config file */
vlc_bool_t b_autosave; /* Config will be auto-saved at exit time */ vlc_bool_t b_autosave; /* Config will be auto-saved at exit time */
...@@ -278,6 +278,9 @@ enum vlc_config_properties ...@@ -278,6 +278,9 @@ enum vlc_config_properties
VLC_CONFIG_ADD_ACTION, VLC_CONFIG_ADD_ACTION,
/* add value change callback (args=vlc_callback_t, const char *) */ /* add value change callback (args=vlc_callback_t, const char *) */
VLC_CONFIG_OLDNAME,
/* former option name (args=const char *) */
}; };
...@@ -408,17 +411,6 @@ VLC_EXPORT( int, vlc_config_set, (module_config_t *, int, ...) ); ...@@ -408,17 +411,6 @@ VLC_EXPORT( int, vlc_config_set, (module_config_t *, int, ...) );
add_typename_inner( CONFIG_ITEM_BOOL, name, text, longtext, advc, p_callback ); \ add_typename_inner( CONFIG_ITEM_BOOL, name, text, longtext, advc, p_callback ); \
if (v) vlc_config_set (p_config + i_config, VLC_CONFIG_VALUE, (int)VLC_TRUE) if (v) vlc_config_set (p_config + i_config, VLC_CONFIG_VALUE, (int)VLC_TRUE)
/* For renamed option */
#define add_deprecated_alias( name ) \
add_config_inner( ); \
p_config[ i_config ].i_type = p_config[ i_config -1 ].i_type; \
vlc_config_set (p_config + i_config, VLC_CONFIG_NAME, \
(const char *)(name), (vlc_callback_t)NULL); \
p_config[i_config].b_strict = VLC_FALSE; \
p_config[ i_config ].psz_current = p_config[ i_config-1 ].psz_current \
? p_config[ i_config-1 ].psz_current \
: p_config[ i_config-1 ].psz_name;
/* For removed option */ /* For removed option */
#define add_obsolete_inner( name, type ) \ #define add_obsolete_inner( name, type ) \
add_type_inner( type ); \ add_type_inner( type ); \
...@@ -439,6 +431,11 @@ VLC_EXPORT( int, vlc_config_set, (module_config_t *, int, ...) ); ...@@ -439,6 +431,11 @@ VLC_EXPORT( int, vlc_config_set, (module_config_t *, int, ...) );
add_obsolete_inner( name, CONFIG_ITEM_STRING ) add_obsolete_inner( name, CONFIG_ITEM_STRING )
/* Modifier macros for the config options (used for fine tuning) */ /* Modifier macros for the config options (used for fine tuning) */
#define add_deprecated_alias( name ) \
vlc_config_set (p_config + i_config, VLC_CONFIG_OLDNAME, \
(const char *)(name))
#define change_short( ch ) \ #define change_short( ch ) \
vlc_config_set (p_config + i_config, VLC_CONFIG_SHORTCUT, (int)(ch)) vlc_config_set (p_config + i_config, VLC_CONFIG_SHORTCUT, (int)(ch))
......
...@@ -296,20 +296,24 @@ void __config_ChainParse( vlc_object_t *p_this, const char *psz_prefix, ...@@ -296,20 +296,24 @@ void __config_ChainParse( vlc_object_t *p_this, const char *psz_prefix,
/* 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 )
{ {
if( p_conf->b_strict ) if( p_conf->b_removed )
{ {
msg_Err( p_this, "Option %s is not supported anymore.", msg_Err( p_this, "Option %s is not supported anymore.",
p_conf->psz_name ); name );
/* 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 */
continue; continue;
} }
if( p_conf->psz_oldname
&& !strcmp( p_conf->psz_oldname, name ) )
{
psz_name = p_conf->psz_name;
msg_Warn( p_this, "Option %s is obsolete. Use %s instead.", msg_Warn( p_this, "Option %s is obsolete. Use %s instead.",
p_conf->psz_name, p_conf->psz_current ); name, psz_name );
psz_name = p_conf->psz_current; }
} }
/* </Check if the option is deprecated> */ /* </Check if the option is deprecated> */
......
...@@ -278,20 +278,21 @@ int __config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc, ...@@ -278,20 +278,21 @@ int __config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
if( p_conf ) if( p_conf )
{ {
/* Check if the option is deprecated */ /* Check if the option is deprecated */
if( p_conf->psz_current ) if( p_conf->b_removed )
{
if( p_conf->b_strict )
{ {
fprintf(stderr, fprintf(stderr,
"Warning: option --%s no longer exists.\n", "Warning: option --%s no longer exists.\n",
p_conf->psz_name); psz_name);
continue; continue;
} }
if( p_conf->psz_oldname
&& !strcmp( p_conf->psz_oldname, psz_name) )
{
fprintf( stderr, fprintf( stderr,
"%s: option --%s is deprecated. Use --%s instead.\n", "%s: option --%s is deprecated. Use --%s instead.\n",
b_ignore_errors ? "Warning" : "Error", b_ignore_errors ? "Warning" : "Error",
p_conf->psz_name, p_conf->psz_current); psz_name, p_conf->psz_name );
if( !b_ignore_errors ) if( !b_ignore_errors )
{ {
/*free */ /*free */
...@@ -303,8 +304,7 @@ int __config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc, ...@@ -303,8 +304,7 @@ int __config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
return -1; return -1;
} }
psz_name = (char *)p_conf->psz_current; psz_name = p_conf->psz_name;
p_conf = config_FindConfig( p_this, psz_name );
} }
switch( p_conf->i_type ) switch( p_conf->i_type )
......
...@@ -464,7 +464,9 @@ module_config_t *config_FindConfig( vlc_object_t *p_this, const char *psz_name ) ...@@ -464,7 +464,9 @@ module_config_t *config_FindConfig( vlc_object_t *p_this, const char *psz_name )
if( p_item->i_type & CONFIG_HINT ) if( p_item->i_type & CONFIG_HINT )
/* ignore hints */ /* ignore hints */
continue; continue;
if( !strcmp( psz_name, p_item->psz_name ) ) if( !strcmp( psz_name, p_item->psz_name )
|| ( p_item->psz_oldname
&& !strcmp( psz_name, p_item->psz_oldname ) ) )
{ {
vlc_list_release( p_list ); vlc_list_release( p_list );
return p_item; return p_item;
......
...@@ -543,7 +543,7 @@ static int SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name, ...@@ -543,7 +543,7 @@ static int SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name,
vlc_bool_t b_retain = b_autosave && !p_item->b_autosave; vlc_bool_t b_retain = b_autosave && !p_item->b_autosave;
if ((p_item->i_type & CONFIG_HINT) /* ignore hint */ if ((p_item->i_type & CONFIG_HINT) /* ignore hint */
|| p_item->psz_current /* ignore deprecated option */ || p_item->b_removed /* ignore deprecated option */
|| p_item->b_unsaveable) /* ignore volatile option */ || p_item->b_unsaveable) /* ignore volatile option */
continue; continue;
......
...@@ -1455,8 +1455,8 @@ static void Usage( libvlc_int_t *p_this, char const *psz_module_name ) ...@@ -1455,8 +1455,8 @@ static void Usage( libvlc_int_t *p_this, char const *psz_module_name )
signed int i; signed int i;
size_t i_cur_width; size_t i_cur_width;
/* Skip deprecated options */ /* Skip removed options */
if( p_item->psz_current ) if( p_item->b_removed )
{ {
continue; continue;
} }
......
...@@ -352,7 +352,8 @@ static int CacheLoadConfig( module_t *p_module, FILE *file ) ...@@ -352,7 +352,8 @@ static int CacheLoadConfig( module_t *p_module, FILE *file )
LOAD_STRING( p_module->p_config[i].psz_name ); LOAD_STRING( p_module->p_config[i].psz_name );
LOAD_STRING( p_module->p_config[i].psz_text ); LOAD_STRING( p_module->p_config[i].psz_text );
LOAD_STRING( p_module->p_config[i].psz_longtext ); LOAD_STRING( p_module->p_config[i].psz_longtext );
LOAD_STRING( p_module->p_config[i].psz_current ); LOAD_STRING( p_module->p_config[i].psz_oldname );
LOAD_IMMEDIATE( p_module->p_config[i].b_removed );
if (IsConfigStringType (p_module->p_config[i].i_type)) if (IsConfigStringType (p_module->p_config[i].i_type))
{ {
...@@ -617,7 +618,9 @@ static int CacheSaveConfig( module_t *p_module, FILE *file ) ...@@ -617,7 +618,9 @@ static int CacheSaveConfig( module_t *p_module, FILE *file )
SAVE_STRING( p_module->p_config[i].psz_name ); SAVE_STRING( p_module->p_config[i].psz_name );
SAVE_STRING( p_module->p_config[i].psz_text ); SAVE_STRING( p_module->p_config[i].psz_text );
SAVE_STRING( p_module->p_config[i].psz_longtext ); SAVE_STRING( p_module->p_config[i].psz_longtext );
SAVE_STRING( p_module->p_config[i].psz_current ); SAVE_STRING( p_module->p_config[i].psz_oldname );
SAVE_IMMEDIATE( p_module->p_config[i].b_removed );
if (IsConfigStringType (p_module->p_config[i].i_type)) if (IsConfigStringType (p_module->p_config[i].i_type))
SAVE_STRING( p_module->p_config[i].orig.psz ); SAVE_STRING( p_module->p_config[i].orig.psz );
......
...@@ -268,7 +268,7 @@ int vlc_config_set (module_config_t *restrict item, int id, ...) ...@@ -268,7 +268,7 @@ int vlc_config_set (module_config_t *restrict item, int id, ...)
break; break;
case VLC_CONFIG_REMOVED: case VLC_CONFIG_REMOVED:
item->psz_current = "SUPPRESSED"; item->b_removed = VLC_TRUE;
ret = 0; ret = 0;
break; break;
...@@ -384,6 +384,15 @@ int vlc_config_set (module_config_t *restrict item, int id, ...) ...@@ -384,6 +384,15 @@ int vlc_config_set (module_config_t *restrict item, int id, ...)
item->i_action++; item->i_action++;
ret = 0; ret = 0;
break;
}
case VLC_CONFIG_OLDNAME:
{
const char *oldname = va_arg (ap, const char *);
item->psz_oldname = oldname ? strdup (oldname) : NULL;
ret = 0;
break;
} }
} }
......
...@@ -804,7 +804,7 @@ module_config_t *module_GetConfig (const module_t *module, unsigned *restrict ps ...@@ -804,7 +804,7 @@ module_config_t *module_GetConfig (const module_t *module, unsigned *restrict ps
const module_config_t *item = module->p_config + i; const module_config_t *item = module->p_config + i;
if (item->b_internal /* internal option */ if (item->b_internal /* internal option */
|| item->b_unsaveable /* non-modifiable option */ || item->b_unsaveable /* non-modifiable option */
|| item->psz_current /* deprecated option name */) || item->b_removed /* removed option */)
continue; continue;
if (config != NULL) if (config != NULL)
......
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