From a52ee53e2cae57b4fceb1b6a423450c00403c73f Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Sat, 6 Oct 2007 13:27:51 +0000 Subject: [PATCH] 2007-10-06 Dan Williams * src/nm-manager.c - (connections_to_slist): sort connections first on autoconnect, then on timestamp git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@2947 4912f4e0-d625-0410-9fb7-b9a5a253dbdc --- ChangeLog | 6 ++++++ src/nm-manager.c | 30 ++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index d5b3883d9b..c3ef6d7f4e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-10-06 Dan Williams + + * src/nm-manager.c + - (connections_to_slist): sort connections first on autoconnect, then + on timestamp + 2007-10-06 Dan Williams * libnm-util/nm-connection.c diff --git a/src/nm-manager.c b/src/nm-manager.c index 39f4f66568..bd12453da6 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -1259,12 +1259,38 @@ impl_manager_legacy_state (NMManager *manager, guint32 *state, GError **err) /* Connections */ +static int +connection_sort (gconstpointer pa, gconstpointer pb) +{ + NMConnection *a = NM_CONNECTION (pa); + NMSettingConnection *con_a; + NMConnection *b = NM_CONNECTION (pb); + NMSettingConnection *con_b; + + con_a = (NMSettingConnection *) nm_connection_get_setting (a, NM_SETTING_CONNECTION); + g_assert (con_a); + con_b = (NMSettingConnection *) nm_connection_get_setting (b, NM_SETTING_CONNECTION); + g_assert (con_b); + + if (con_a->autoconnect != con_b->autoconnect) { + if (con_a->autoconnect) + return -1; + return 1; + } + + if (con_a->timestamp > con_b->timestamp) + return -1; + else if (con_a->timestamp == con_b->timestamp) + return 0; + return 1; +} + static void connections_to_slist (gpointer key, gpointer value, gpointer user_data) { GSList **list = (GSList **) user_data; - *list = g_slist_prepend (*list, g_object_ref (value)); + *list = g_slist_insert_sorted (*list, g_object_ref (value), connection_sort); } /* Returns a GSList of referenced NMConnection objects, caller must @@ -1285,7 +1311,7 @@ nm_manager_get_connections (NMManager *manager, else if (type == NM_CONNECTION_TYPE_SYSTEM) g_hash_table_foreach (priv->system_connections, connections_to_slist, &list); else - nm_warning ("Unknown NMConnectionType %d", type); + nm_warning ("Unknown NMConnectionType %d", type); return list; }