diff options
Diffstat (limited to 'src/nm-config.c')
| -rw-r--r-- | src/nm-config.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/nm-config.c b/src/nm-config.c index e8cb0864..4626ae26 100644 --- a/src/nm-config.c +++ b/src/nm-config.c @@ -275,14 +275,18 @@ merge_no_auto_default_state (NMConfig *config) if (g_file_get_contents (priv->no_auto_default_file, &data, NULL, NULL)) { list = g_strsplit (data, "\n", -1); for (i = 0; list[i]; i++) { - if (!*list[i]) + if (!*list[i]) { + g_free (list[i]); continue; + } for (j = 0; j < updated->len; j++) { if (!strcmp (list[i], updated->pdata[j])) break; } if (j == updated->len) g_ptr_array_add (updated, list[i]); + else + g_free (list[i]); } g_free (list); g_free (data); @@ -403,10 +407,12 @@ read_config (NMConfig *config, const char *path, GError **error) continue; for (k = 0; keys[k]; k++) { int len = strlen (keys[k]); + char *v; + if (keys[k][len - 1] == '+') { char *base_key = g_strndup (keys[k], len - 1); - const char *old_val = g_key_file_get_value (priv->keyfile, groups[g], base_key, NULL); - const char *new_val = g_key_file_get_value (kf, groups[g], keys[k], NULL); + char *old_val = g_key_file_get_value (priv->keyfile, groups[g], base_key, NULL); + char *new_val = g_key_file_get_value (kf, groups[g], keys[k], NULL); if (old_val && *old_val) { char *combined = g_strconcat (old_val, ",", new_val, NULL); @@ -417,13 +423,18 @@ read_config (NMConfig *config, const char *path, GError **error) g_key_file_set_value (priv->keyfile, groups[g], base_key, new_val); g_free (base_key); + g_free (old_val); + g_free (new_val); continue; } g_key_file_set_value (priv->keyfile, groups[g], keys[k], - g_key_file_get_value (kf, groups[g], keys[k], NULL)); + v = g_key_file_get_value (kf, groups[g], keys[k], NULL)); + g_free (v); } + g_strfreev (keys); } + g_strfreev (groups); g_key_file_free (kf); return TRUE; |