* src/misc/variables.c: Implemented inheritance for variables of type list.
authorChristophe Massiot <massiot@videolan.org>
Fri, 22 Oct 2004 13:37:21 +0000 (13:37 +0000)
committerChristophe Massiot <massiot@videolan.org>
Fri, 22 Oct 2004 13:37:21 +0000 (13:37 +0000)
src/misc/variables.c

index 86113e9..f210d0e 100644 (file)
@@ -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;