Browse Source

Allow remove key with empty value from target config.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
Andrew Borodin 14 years ago
parent
commit
6484b1dce7
4 changed files with 15 additions and 11 deletions
  1. 1 1
      lib/filehighlight/ini-file-read.c
  2. 2 1
      lib/mcconfig.h
  3. 11 8
      lib/mcconfig/common.c
  4. 1 1
      src/setup.c

+ 1 - 1
lib/filehighlight/ini-file-read.c

@@ -187,7 +187,7 @@ mc_fhl_read_ini_file (mc_fhl_t * fhl, const gchar * filename)
         return FALSE;
 
     if (fhl->config != NULL)
-        return mc_config_read_file (fhl->config, filename);
+        return mc_config_read_file (fhl->config, filename, FALSE);
 
     fhl->config = mc_config_init (filename);
     return (fhl->config != NULL);

+ 2 - 1
lib/mcconfig.h

@@ -34,7 +34,8 @@ gboolean mc_config_del_group (mc_config_t *, const char *);
 gboolean mc_config_has_param (mc_config_t *, const char *, const gchar *);
 gboolean mc_config_has_group (mc_config_t *, const char *);
 
-gboolean mc_config_read_file (mc_config_t *, const gchar *);
+gboolean mc_config_read_file (mc_config_t * mc_config, const gchar * ini_path,
+                              gboolean remove_empty);
 
 gboolean mc_config_save_file (mc_config_t * config, GError ** error);
 

+ 11 - 8
lib/mcconfig/common.c

@@ -194,7 +194,7 @@ mc_config_del_group (mc_config_t * mc_config, const char *group)
 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 
 gboolean
-mc_config_read_file (mc_config_t * mc_config, const gchar * ini_path)
+mc_config_read_file (mc_config_t * mc_config, const gchar * ini_path, gboolean remove_empty)
 {
     mc_config_t *tmp_config;
     gchar **groups, **curr_grp;
@@ -202,9 +202,7 @@ mc_config_read_file (mc_config_t * mc_config, const gchar * ini_path)
     gchar *value;
 
     if (mc_config == NULL)
-    {
         return FALSE;
-    }
 
     tmp_config = mc_config_init (ini_path);
     if (tmp_config == NULL)
@@ -224,11 +222,16 @@ mc_config_read_file (mc_config_t * mc_config, const gchar * ini_path)
         for (curr_key = keys; *curr_key != NULL; curr_key++)
         {
             value = g_key_file_get_value (tmp_config->handle, *curr_grp, *curr_key, NULL);
-            if (value == NULL)
-                continue;
-
-            g_key_file_set_value (mc_config->handle, *curr_grp, *curr_key, value);
-            g_free (value);
+            if (value != NULL)
+            {
+                if (*value == '\0' && remove_empty)
+                    g_key_file_remove_key (mc_config->handle, *curr_grp, *curr_key, NULL);
+                else
+                    g_key_file_set_value (mc_config->handle, *curr_grp, *curr_key, value);
+                g_free (value);
+            }
+            else if (remove_empty)
+                g_key_file_remove_key (mc_config->handle, *curr_grp, *curr_key, NULL);
         }
         g_strfreev (keys);
     }

+ 1 - 1
src/setup.c

@@ -529,7 +529,7 @@ load_setup_init_config_from_file (mc_config_t ** config, const char *fname)
     if (exist_file (fname))
     {
         if (*config != NULL)
-            mc_config_read_file (*config, fname);
+            mc_config_read_file (*config, fname, TRUE);
         else
             *config = mc_config_init (fname);
     }