>From 2713100c725a8d47fc37d54e91f2a19098b7dbd3 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Wed, 6 Mar 2013 14:13:26 -0500 Subject: [PATCH 2/2] keyfile: Handle /etc/NetworkManager/NetworkManager.conf not existing Since in gnome-ostree we're trying to move towards an empty /etc. We'll create it on demand if necessary. --- src/settings/plugins/keyfile/plugin.c | 35 ++++++++++++++++++++++++-------- 1 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/settings/plugins/keyfile/plugin.c b/src/settings/plugins/keyfile/plugin.c index a50f8c5..4f177bf 100644 --- a/src/settings/plugins/keyfile/plugin.c +++ b/src/settings/plugins/keyfile/plugin.c @@ -405,6 +405,29 @@ add_connection (NMSystemConfigInterface *config, return added; } +static gboolean +parse_key_file_allow_none (SCPluginKeyfilePrivate *priv, + GKeyFile *key_file, + GError **error) +{ + gboolean ret = FALSE; + GError *local_error = NULL; + + if (!g_key_file_load_from_file (key_file, priv->conf_file, G_KEY_FILE_NONE, &local_error)) { + if (g_error_matches (local_error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) { + g_clear_error (&local_error); + } else { + g_propagate_prefixed_error (error, local_error, + "Error parsing file '%s': %s", priv->conf_file); + goto out; + } + } + + ret = TRUE; + out: + return ret; +} + static GSList * get_unmanaged_specs (NMSystemConfigInterface *config) { @@ -418,10 +441,8 @@ get_unmanaged_specs (NMSystemConfigInterface *config) return NULL; key_file = g_key_file_new (); - if (!g_key_file_load_from_file (key_file, priv->conf_file, G_KEY_FILE_NONE, &error)) { - g_prefix_error (&error, "Error parsing file '%s': ", priv->conf_file); + if (!parse_key_file_allow_none (priv, key_file, &error)) goto out; - } str = g_key_file_get_value (key_file, "keyfile", "unmanaged-devices", NULL); if (str) { @@ -475,10 +496,8 @@ plugin_get_hostname (SCPluginKeyfile *plugin) return NULL; key_file = g_key_file_new (); - if (!g_key_file_load_from_file (key_file, priv->conf_file, G_KEY_FILE_NONE, &error)) { - g_prefix_error (&error, "Error parsing file '%s': ", priv->conf_file); + if (!parse_key_file_allow_none (priv, key_file, &error)) goto out; - } hostname = g_key_file_get_value (key_file, "keyfile", "hostname", NULL); @@ -513,10 +532,8 @@ plugin_set_hostname (SCPluginKeyfile *plugin, const char *hostname) priv->hostname = g_strdup (hostname); key_file = g_key_file_new (); - if (!g_key_file_load_from_file (key_file, priv->conf_file, G_KEY_FILE_NONE, &error)) { - g_prefix_error (&error, "Error parsing file '%s': ", priv->conf_file); + if (!parse_key_file_allow_none (priv, key_file, &error)) goto out; - } g_key_file_set_string (key_file, "keyfile", "hostname", hostname); -- 1.7.1