From bef75ae8f094f21a72e78cfb48631587f06d38a4 Mon Sep 17 00:00:00 2001 From: Christophe Massiot Date: Fri, 22 Oct 2004 13:37:21 +0000 Subject: [PATCH] * src/misc/variables.c: Implemented inheritance for variables of type list. --- src/misc/variables.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/misc/variables.c b/src/misc/variables.c index 86113e9c79..f210d0e8c9 100644 --- a/src/misc/variables.c +++ b/src/misc/variables.c @@ -63,16 +63,22 @@ static void DupList( vlc_value_t *p_val ) int i; vlc_list_t *p_list = malloc( sizeof(vlc_list_t) ); + p_list->i_count = p_val->p_list->i_count; if( p_val->p_list->i_count ) { - p_list->i_count = p_val->p_list->i_count; p_list->p_values = malloc( p_list->i_count * sizeof(vlc_value_t) ); p_list->pi_types = malloc( p_list->i_count * sizeof(int) ); } + else + { + p_list->p_values = NULL; + p_list->pi_types = NULL; + } for( i = 0; i < p_list->i_count; i++ ) { p_list->p_values[i] = p_val->p_list->p_values[i]; + p_list->pi_types[i] = p_val->p_list->pi_types[i]; switch( p_val->p_list->pi_types[i] & VLC_VAR_TYPE ) { case VLC_VAR_STRING: @@ -1224,6 +1230,33 @@ static int InheritValue( vlc_object_t *p_this, const char *psz_name, case VLC_VAR_BOOL: p_val->b_bool = config_GetInt( p_this, psz_name ); break; + case VLC_VAR_LIST: + { + char * psz_var = config_GetPsz( p_this, psz_name ); + vlc_list_t *p_list = malloc(sizeof(vlc_list_t)); + p_val->p_list = p_list; + p_list->i_count = 0; + while ( *psz_var ) + { + char * psz_item = psz_var; + vlc_value_t val; + while ( *psz_var && *psz_var != ',' ) + psz_var++; + if ( *psz_var == ',' ) + { + *psz_var = '\0'; + psz_var++; + } + val.i_int = strtol( psz_item, NULL, 0 ); + INSERT_ELEM( p_list->p_values, p_list->i_count, p_list->i_count, + val ); + /* p_list->i_count is incremented twice by INSERT_ELEM */ + p_list->i_count--; + INSERT_ELEM( p_list->pi_types, p_list->i_count, p_list->i_count, + VLC_VAR_INTEGER ); + } + break; + } default: return VLC_ENOOBJ; break; -- 2.39.2