]> git.sesse.net Git - vlc/blobdiff - src/misc/configuration.c
* src/misc/configuration.c: minor fix in a comment.
[vlc] / src / misc / configuration.c
index 8795197cc61cf9be6055ca22cd51f5933546b0d1..a24da6a091493a65e7b288fff3f1edcc94eccf10 100644 (file)
@@ -2,7 +2,7 @@
  * configuration.c management of the modules configuration
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: configuration.c,v 1.54 2003/04/07 11:48:51 gbazin Exp $
+ * $Id: configuration.c,v 1.58 2003/06/27 13:38:54 sam Exp $
  *
  * Authors: Gildas Bazin <gbazin@netcourrier.com>
  *
@@ -187,7 +187,7 @@ void __config_PutPsz( vlc_object_t *p_this,
     /* free old string */
     if( p_config->psz_value ) free( p_config->psz_value );
 
-    if( psz_value ) p_config->psz_value = strdup( psz_value );
+    if( psz_value && *psz_value ) p_config->psz_value = strdup( psz_value );
     else p_config->psz_value = NULL;
 
     vlc_mutex_unlock( p_config->p_lock );
@@ -387,9 +387,11 @@ void config_Duplicate( module_t *p_module, module_config_t *p_orig )
         p_module->p_config[i].i_type = p_orig[i].i_type;
         p_module->p_config[i].i_short = p_orig[i].i_short;
         p_module->p_config[i].i_value = p_orig[i].i_value;
+        p_module->p_config[i].i_value_orig = p_orig[i].i_value;
         p_module->p_config[i].i_min = p_orig[i].i_min;
         p_module->p_config[i].i_max = p_orig[i].i_max;
         p_module->p_config[i].f_value = p_orig[i].f_value;
+        p_module->p_config[i].f_value_orig = p_orig[i].f_value;
         p_module->p_config[i].f_min = p_orig[i].f_min;
         p_module->p_config[i].f_max = p_orig[i].f_max;
         p_module->p_config[i].b_dirty = p_orig[i].b_dirty;
@@ -405,6 +407,8 @@ void config_Duplicate( module_t *p_module, module_config_t *p_orig )
                                    strdup( _(p_orig[i].psz_longtext) ) : NULL;
         p_module->p_config[i].psz_value = p_orig[i].psz_value ?
                                    strdup( p_orig[i].psz_value ) : NULL;
+        p_module->p_config[i].psz_value_orig = p_orig[i].psz_value ?
+                                   strdup( p_orig[i].psz_value ) : NULL;
 
         p_module->p_config[i].p_lock = &p_module->object_lock;
 
@@ -459,6 +463,9 @@ void config_Free( module_t *p_module )
         if( p_item->psz_value )
             free( p_item->psz_value );
 
+        if( p_item->psz_value_orig )
+            free( p_item->psz_value_orig );
+
         if( p_item->ppsz_list )
         {
             for( i = 0; p_item->ppsz_list[i]; i++ )
@@ -502,6 +509,41 @@ void config_UnsetCallbacks( module_config_t *p_new )
     }
 }
 
+/*****************************************************************************
+ * config_ResetAll: reset the configuration data for all the modules.
+ *****************************************************************************/
+void __config_ResetAll( vlc_object_t *p_this )
+{
+    int i_index, i;
+    vlc_list_t *p_list;
+    module_t *p_module;
+
+    /* Acquire config file lock */
+    vlc_mutex_lock( &p_this->p_vlc->config_lock );
+
+    p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE );
+
+    for( i_index = 0; i_index < p_list->i_count; i_index++ )
+    {
+        p_module = (module_t *)p_list->p_values[i_index].p_object ;
+        if( p_module->b_submodule ) continue;
+
+        for( i = 0; p_module->p_config[i].i_type != CONFIG_HINT_END; i++ )
+        {
+            p_module->p_config[i].i_value = p_module->p_config[i].i_value_orig;
+            p_module->p_config[i].f_value = p_module->p_config[i].f_value_orig;
+            if( p_module->p_config[i].psz_value )
+                free( p_module->p_config[i].psz_value );
+            p_module->p_config[i].psz_value =
+                p_module->p_config[i].psz_value_orig ?
+                strdup( p_module->p_config[i].psz_value_orig ) : NULL;
+        }
+    }
+
+    vlc_list_release( p_list );
+    vlc_mutex_unlock( &p_this->p_vlc->config_lock );
+}
+
 /*****************************************************************************
  * config_LoadConfigFile: loads the configuration file.
  *****************************************************************************
@@ -902,6 +944,8 @@ int __config_SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name )
                     fprintf( file, "# %s (%s)\n", p_item->psz_text,
                              (p_item->i_type == CONFIG_ITEM_BOOL) ?
                              _("boolean") : _("integer") );
+                if( p_item->i_value == p_item->i_value_orig )
+                    fprintf( file, "#" );
                 fprintf( file, "%s=%i\n", p_item->psz_name, p_item->i_value );
                 break;
 
@@ -909,6 +953,8 @@ int __config_SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name )
                 if( p_item->psz_text )
                     fprintf( file, "# %s (%s)\n", p_item->psz_text,
                              _("float") );
+                if( p_item->f_value == p_item->f_value_orig )
+                    fprintf( file, "#" );
                 fprintf( file, "%s=%f\n", p_item->psz_name,
                          (double)p_item->f_value );
                 break;
@@ -917,6 +963,10 @@ int __config_SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name )
                 if( p_item->psz_text )
                     fprintf( file, "# %s (%s)\n", p_item->psz_text,
                              _("string") );
+                if( (!p_item->psz_value && !p_item->psz_value_orig) ||
+                    (p_item->psz_value && p_item->psz_value_orig &&
+                     !strcmp( p_item->psz_value, p_item->psz_value_orig )) )
+                    fprintf( file, "#" );
                 fprintf( file, "%s=%s\n", p_item->psz_name,
                          p_item->psz_value ? p_item->psz_value : "" );
             }
@@ -1284,7 +1334,7 @@ char *config_GetHomeDir( void )
     HINSTANCE shfolder_dll;
     SHGETFOLDERPATH SHGetFolderPath ;
 
-    /* load the shell32 dll to retreive SHGetFolderPath */
+    /* load the shfolder dll to retrieve SHGetFolderPath */
     if( ( shfolder_dll = LoadLibrary("shfolder.dll") ) != NULL )
     {
         SHGetFolderPath = (void *)GetProcAddress( shfolder_dll,