diff options
Diffstat (limited to 'libnm-util/nm-connection.c')
| -rw-r--r-- | libnm-util/nm-connection.c | 48 |
1 files changed, 15 insertions, 33 deletions
diff --git a/libnm-util/nm-connection.c b/libnm-util/nm-connection.c index d9cdc270..33790a63 100644 --- a/libnm-util/nm-connection.c +++ b/libnm-util/nm-connection.c @@ -556,30 +556,6 @@ nm_connection_compare (NMConnection *a, return info.failed ? FALSE : TRUE; } -typedef struct { - gboolean success; - GSList *all_settings; - GError **error; -} VerifySettingsInfo; - -static void -verify_one_setting (gpointer data, gpointer user_data) -{ - NMSetting *setting = NM_SETTING (data); - VerifySettingsInfo *info = (VerifySettingsInfo *) user_data; - - if (info->success) - info->success = nm_setting_verify (setting, info->all_settings, info->error); -} - -static void -hash_values_to_slist (gpointer key, gpointer value, gpointer user_data) -{ - GSList **list = (GSList **) user_data; - - *list = g_slist_prepend (*list, value); -} - /** * nm_connection_verify: * @connection: the #NMConnection to verify @@ -602,7 +578,10 @@ nm_connection_verify (NMConnection *connection, GError **error) { NMConnectionPrivate *priv; NMSetting *s_con; - VerifySettingsInfo info; + GHashTableIter iter; + gpointer value; + GSList *all_settings = NULL; + gboolean success = TRUE; if (error) g_return_val_if_fail (*error == NULL, FALSE); @@ -627,15 +606,18 @@ nm_connection_verify (NMConnection *connection, GError **error) return FALSE; } + /* Build up the list of settings */ + g_hash_table_iter_init (&iter, priv->settings); + while (g_hash_table_iter_next (&iter, NULL, &value)) + all_settings = g_slist_append (all_settings, value); + /* Now, run the verify function of each setting */ - memset (&info, 0, sizeof (info)); - info.success = TRUE; - info.error = error; - g_hash_table_foreach (priv->settings, hash_values_to_slist, &info.all_settings); - - g_slist_foreach (info.all_settings, verify_one_setting, &info); - g_slist_free (info.all_settings); - return info.success; + g_hash_table_iter_init (&iter, priv->settings); + while (g_hash_table_iter_next (&iter, NULL, &value) && success) + success = nm_setting_verify (NM_SETTING (value), all_settings, error); + + g_slist_free (all_settings); + return success; } /** |