diff options
Diffstat (limited to 'libnm-core/nm-connection.c')
-rw-r--r-- | libnm-core/nm-connection.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/libnm-core/nm-connection.c b/libnm-core/nm-connection.c index f000d0c4d9..858f5aab88 100644 --- a/libnm-core/nm-connection.c +++ b/libnm-core/nm-connection.c @@ -585,21 +585,28 @@ _nm_connection_find_base_type_setting (NMConnection *connection) NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (connection); GHashTableIter iter; NMSetting *setting = NULL, *s_iter; + guint32 setting_prio, s_iter_prio; g_hash_table_iter_init (&iter, priv->settings); while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &s_iter)) { - if (!_nm_setting_is_base_type (s_iter)) + s_iter_prio = _nm_setting_get_base_type_priority (s_iter); + if (!s_iter_prio) continue; if (setting) { - NMSettingConnection *s_con = nm_connection_get_setting_connection (connection); + if (s_iter_prio > setting_prio) { + continue; + } else if (s_iter_prio == setting_prio) { + NMSettingConnection *s_con = nm_connection_get_setting_connection (connection); - if (!s_con) - return NULL; - return nm_connection_get_setting_by_name (connection, - nm_setting_connection_get_connection_type (s_con)); + if (!s_con) + return NULL; + return nm_connection_get_setting_by_name (connection, + nm_setting_connection_get_connection_type (s_con)); + } } setting = s_iter; + setting_prio = s_iter_prio; } return setting; } @@ -1620,7 +1627,7 @@ nm_connection_is_type (NMConnection *connection, const char *type) if (!setting) return FALSE; - return _nm_setting_is_base_type (setting); + return !!_nm_setting_get_base_type_priority (setting); } static int |