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

Code factorization

parent eb2e4add
......@@ -27,6 +27,7 @@
#include "vlc_keys.h"
#include <errno.h> /* errno */
#include <stdbool.h>
#ifdef HAVE_LIMITS_H
# include <limits.h>
......@@ -342,6 +343,32 @@ int config_CreateDir( vlc_object_t *p_this, const char *psz_dirname )
return -1;
}
static int
config_Write (FILE *file, const char *type, const char *desc,
bool comment, const char *name, const char *fmt, ...)
{
va_list ap;
int ret;
if (desc == NULL)
desc = "?";
if (fprintf (file, "# %s (%s)\n%s%s=", desc, gettext (type),
comment ? "#" : "", name) < 0)
return -1;
va_start (ap, fmt);
ret = vfprintf (file, fmt, ap);
va_end (ap);
if (ret < 0)
return -1;
if (fputs ("\n\n", file) == EOF)
return -1;
return 0;
}
/*****************************************************************************
* config_SaveConfigFile: Save a module's config options.
*****************************************************************************
......@@ -511,85 +538,68 @@ static int SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name,
p_item < p_end;
p_item++ )
{
char *psz_key;
int i_value = p_item->value.i;
float f_value = p_item->value.f;
const char *psz_value = p_item->value.psz;
/* Do not save the new value in the configuration file
* if doing an autosave, and the item is not an "autosaved" one. */
vlc_bool_t b_retain = b_autosave && !p_item->b_autosave;
if( p_item->i_type & CONFIG_HINT )
/* ignore hints */
continue;
/* Ignore deprecated options */
if( p_item->psz_current )
continue;
if( p_item->b_unsaveable )
/*obvious*/
if ((p_item->i_type & CONFIG_HINT) /* ignore hint */
|| p_item->psz_current /* ignore deprecated option */
|| p_item->b_unsaveable) /* ignore volatile option */
continue;
if( b_autosave && !p_item->b_autosave )
if (IsConfigIntegerType (p_item->i_type))
{
i_value = p_item->saved.i;
f_value = p_item->saved.f;
psz_value = p_item->saved.psz;
if( !psz_value ) psz_value = p_item->orig.psz;
int val = b_retain ? p_item->saved.i : p_item->value.i;
if (p_item->i_type == CONFIG_ITEM_KEY)
{
char *psz_key = ConfigKeyToString (val);
config_Write (file, p_item->psz_text, N_("key"),
val == p_item->orig.i,
p_item->psz_name, "%s",
psz_key ? psz_key : "");
free (psz_key);
}
else
config_Write (file, p_item->psz_text,
(p_item->i_type == CONFIG_ITEM_BOOL)
? N_("boolean") : N_("integer"),
val == p_item->orig.i,
p_item->psz_name, "%d", val);
p_item->saved.i = val;
}
else
if (IsConfigFloatType (p_item->i_type))
{
p_item->b_dirty = VLC_FALSE;
float val = b_retain ? p_item->saved.f : p_item->value.f;
config_Write (file, p_item->psz_text, N_("float"),
val == p_item->orig.f,
p_item->psz_name, "%f", val);
p_item->saved.f = val;
}
switch( p_item->i_type )
else
{
case CONFIG_ITEM_BOOL:
case CONFIG_ITEM_INTEGER:
if( p_item->psz_text )
fprintf( file, "# %s (%s)\n", p_item->psz_text,
(p_item->i_type == CONFIG_ITEM_BOOL) ?
_("boolean") : _("integer") );
if( i_value == p_item->orig.i )
fputc ('#', file);
fprintf( file, "%s=%i\n", p_item->psz_name, i_value );
p_item->saved.i = i_value;
break;
case CONFIG_ITEM_KEY:
if( p_item->psz_text )
fprintf( file, "# %s (%s)\n", p_item->psz_text,
_("key") );
if( i_value == p_item->orig.i )
fputc ('#', file);
psz_key = ConfigKeyToString( i_value );
fprintf( file, "%s=%s\n", p_item->psz_name,
psz_key ? psz_key : "" );
free (psz_key);
p_item->saved.i = i_value;
break;
case CONFIG_ITEM_FLOAT:
if( p_item->psz_text )
fprintf( file, "# %s (%s)\n", p_item->psz_text,
_("float") );
if( f_value == p_item->orig.f )
fputc ('#', file);
fprintf( file, "%s=%f\n", p_item->psz_name, (double)f_value );
p_item->saved.f = f_value;
break;
default:
if( p_item->psz_text )
fprintf( file, "# %s (%s)\n", p_item->psz_text,
_("string") );
if( (!psz_value && !p_item->orig.psz) ||
(psz_value && p_item->orig.psz &&
!strcmp( psz_value, p_item->orig.psz )) )
fputc ('#', file);
fprintf( file, "%s=%s\n", p_item->psz_name,
psz_value ?: "" );
if( b_autosave && !p_item->b_autosave ) break;
const char *psz_value = b_retain ? p_item->saved.psz
: p_item->value.psz;
bool modified;
assert (IsConfigStringType (p_item->i_type));
if (b_retain && (psz_value == NULL)) /* FIXME: hack */
psz_value = p_item->orig.psz;
modified =
(psz_value != NULL)
? ((p_item->orig.psz != NULL)
? (strcmp (psz_value, p_item->orig.psz) != 0)
: true)
: (p_item->orig.psz != NULL);
config_Write (file, p_item->psz_text, N_("string"),
modified, p_item->psz_name, "%s",
psz_value ? psz_value : "");
if (b_retain)
break;
free ((char *)p_item->saved.psz);
if( (psz_value && p_item->orig.psz &&
......@@ -599,9 +609,10 @@ static int SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name,
else
p_item->saved.psz = NULL;
}
}
fputc ('\n', file);
if (!b_retain)
p_item->b_dirty = VLC_FALSE;
}
}
vlc_list_release( p_list );
......
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