summaryrefslogtreecommitdiff
path: root/libnm-core/nm-connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnm-core/nm-connection.c')
-rw-r--r--libnm-core/nm-connection.c21
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