From 16c8555b24417712d4e09da6d12938acc3734762 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 14 May 2020 20:57:53 +0200 Subject: libnm: check options in NMSettingEthtool.verify() in defined order Iterating the hash gives the entries in undefined order. That means, when validation would fail for more than one option, then the error message arbitrarily points out one or the other. Instead, process the entries in a defined order. --- libnm-core/nm-setting-ethtool.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/libnm-core/nm-setting-ethtool.c b/libnm-core/nm-setting-ethtool.c index 28307e4941..17fbdc62a1 100644 --- a/libnm-core/nm-setting-ethtool.c +++ b/libnm-core/nm-setting-ethtool.c @@ -198,6 +198,8 @@ nm_setting_ethtool_clear_features (NMSettingEthtool *setting) nm_ethtool_optname_is_feature); } +/*****************************************************************************/ + guint nm_setting_ethtool_init_features (NMSettingEthtool *setting, NMTernary *requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */) @@ -277,17 +279,16 @@ nm_setting_ethtool_get_optnames (NMSettingEthtool *setting, static gboolean verify (NMSetting *setting, NMConnection *connection, GError **error) { - GHashTable *hash; - GHashTableIter iter; - const char *optname; - GVariant *variant; + const char *const*optnames; + GVariant *const*variants; + guint len; + guint i; - hash = _nm_setting_option_hash (setting, FALSE); - if (!hash) - return TRUE; + len = _nm_setting_option_get_all (setting, &optnames, &variants); - g_hash_table_iter_init (&iter, hash); - while (g_hash_table_iter_next (&iter, (gpointer *) &optname, (gpointer *) &variant)) { + for (i = 0; i < len; i++) { + const char *optname = optnames[i]; + GVariant *variant = variants[i]; const GVariantType *variant_type; NMEthtoolID ethtool_id; -- cgit v1.2.1