diff options
author | Thomas Haller <thaller@redhat.com> | 2014-12-16 15:36:56 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2015-02-03 13:01:53 +0100 |
commit | 64520b7ba4aec12d4750d5351f2bba8317d3fa1b (patch) | |
tree | 37c320bb6786e5ff4f70be4149d4190537afb024 | |
parent | 4429f8aea5bf24fc12add15554ad49183439a069 (diff) | |
download | NetworkManager-64520b7ba4aec12d4750d5351f2bba8317d3fa1b.tar.gz |
config: refactor read_entire_config() to merge command line options
-rw-r--r-- | src/nm-config.c | 61 |
1 files changed, 34 insertions, 27 deletions
diff --git a/src/nm-config.c b/src/nm-config.c index 0466f3d982..592979aa25 100644 --- a/src/nm-config.c +++ b/src/nm-config.c @@ -646,6 +646,7 @@ read_entire_config (const NMConfigCmdLineOptions *cli, guint i; char *o_config_main_file = NULL; char *o_config_description = NULL; + char **plugins_tmp; g_return_val_if_fail (config_dir, NULL); g_return_val_if_fail (out_config_main_file && !*out_config_main_file, FALSE); @@ -665,19 +666,35 @@ read_entire_config (const NMConfigCmdLineOptions *cli, for (i = 0; i < confs->len; i++) { if (!read_config (keyfile, confs->pdata[i], error)) { g_key_file_free (keyfile); - keyfile = NULL; - break; + g_free (o_config_main_file); + g_free (o_config_description); + g_ptr_array_unref (confs); + return NULL; } } g_ptr_array_unref (confs); - if (keyfile) { - *out_config_main_file = o_config_main_file; - *out_config_description = o_config_description; - } else { - g_free (o_config_main_file); - g_free (o_config_description); - } + /* Merge settings from command line. They overwrite everything read from + * config files. */ + + if (cli && cli->plugins && cli->plugins[0]) + g_key_file_set_value (keyfile, "main", "plugins", cli->plugins); + plugins_tmp = g_key_file_get_string_list (keyfile, "main", "plugins", NULL, NULL); + if (!plugins_tmp) { + if (STRLEN (CONFIG_PLUGINS_DEFAULT) > 0) + g_key_file_set_value (keyfile, "main", "plugins", CONFIG_PLUGINS_DEFAULT); + } else + g_strfreev (plugins_tmp); + + if (cli && cli->connectivity_uri && cli->connectivity_uri[0]) + g_key_file_set_value (keyfile, "connectivity", "uri", cli->connectivity_uri); + if (cli && cli->connectivity_interval >= 0) + g_key_file_set_integer (keyfile, "connectivity", "interval", cli->connectivity_interval); + if (cli && cli->connectivity_response && cli->connectivity_response[0]) + g_key_file_set_value (keyfile, "connectivity", "response", cli->connectivity_response); + + *out_config_main_file = o_config_main_file; + *out_config_description = o_config_description; return keyfile; } @@ -793,7 +810,8 @@ nm_config_new (const NMConfigCmdLineOptions *cli, GError **error) g_key_file_free (priv->keyfile); priv->keyfile = keyfile; - /* Handle no-auto-default key and state file */ + /* Initialize read only private members */ + priv->no_auto_default = g_key_file_get_string_list (priv->keyfile, "main", "no-auto-default", NULL, NULL); if (priv->cli.no_auto_default_file) priv->no_auto_default_file = g_strdup (priv->cli.no_auto_default_file); @@ -801,12 +819,9 @@ nm_config_new (const NMConfigCmdLineOptions *cli, GError **error) priv->no_auto_default_file = g_strdup (NM_NO_AUTO_DEFAULT_STATE_FILE); merge_no_auto_default_state (self); - /* Now let command-line options override the config files, and fill in priv. */ - if (priv->cli.plugins && priv->cli.plugins[0]) - g_key_file_set_value (priv->keyfile, "main", "plugins", priv->cli.plugins); priv->plugins = g_key_file_get_string_list (priv->keyfile, "main", "plugins", NULL, NULL); - if (!priv->plugins && STRLEN (CONFIG_PLUGINS_DEFAULT) > 0) - priv->plugins = g_strsplit (CONFIG_PLUGINS_DEFAULT, ",", -1); + if (!priv->plugins) + priv->plugins = g_new0 (char *, 1); priv->monitor_connection_files = _get_bool_value (priv->keyfile, "main", "monitor-connection-files", FALSE); @@ -820,22 +835,14 @@ nm_config_new (const NMConfigCmdLineOptions *cli, GError **error) priv->debug = g_key_file_get_value (priv->keyfile, "main", "debug", NULL); - if (priv->cli.connectivity_uri && priv->cli.connectivity_uri[0]) - g_key_file_set_value (priv->keyfile, "connectivity", "uri", priv->cli.connectivity_uri); - connectivity_uri = g_key_file_get_value (priv->keyfile, "connectivity", "uri", NULL); - - if (priv->cli.connectivity_interval >= 0) - g_key_file_set_integer (priv->keyfile, "connectivity", "interval", priv->cli.connectivity_interval); - connectivity_interval = g_key_file_get_integer (priv->keyfile, "connectivity", "interval", NULL); - - if (priv->cli.connectivity_response && priv->cli.connectivity_response[0]) - g_key_file_set_value (priv->keyfile, "connectivity", "response", priv->cli.connectivity_response); - connectivity_response = g_key_file_get_value (priv->keyfile, "connectivity", "response", NULL); - priv->ignore_carrier = g_key_file_get_string_list (priv->keyfile, "main", "ignore-carrier", NULL, NULL); priv->configure_and_quit = _get_bool_value (priv->keyfile, "main", "configure-and-quit", FALSE); + connectivity_uri = g_key_file_get_value (priv->keyfile, "connectivity", "uri", NULL); + connectivity_interval = g_key_file_get_integer (priv->keyfile, "connectivity", "interval", NULL); + connectivity_response = g_key_file_get_value (priv->keyfile, "connectivity", "response", NULL); + priv->config_data = g_object_new (NM_TYPE_CONFIG_DATA, NM_CONFIG_DATA_CONNECTIVITY_URI, connectivity_uri, NM_CONFIG_DATA_CONNECTIVITY_INTERVAL, connectivity_interval, |