core: flatten connection listing from the settings service

While it may not reduce the LOC it saves a few memory allocations
and is somewhat less error prone since callers don't need to free
the returned lists.
This commit is contained in:
Dan Williams 2010-08-26 18:05:33 -05:00
parent f58f2d7f39
commit e5c5622626
3 changed files with 57 additions and 53 deletions

View file

@ -822,43 +822,33 @@ system_connection_removed_cb (NMSysconfigConnection *connection,
}
static void
system_internal_new_connection (NMManager *manager,
NMSysconfigConnection *connection)
_new_connection (NMSysconfigSettings *settings,
NMSysconfigConnection *connection,
gpointer user_data)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
NMManager *self = NM_MANAGER (user_data);
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
const char *path;
g_return_if_fail (connection != NULL);
g_signal_connect (connection, NM_SYSCONFIG_CONNECTION_UPDATED,
G_CALLBACK (system_connection_updated_cb), manager);
G_CALLBACK (system_connection_updated_cb), self);
g_signal_connect (connection, NM_SYSCONFIG_CONNECTION_REMOVED,
G_CALLBACK (system_connection_removed_cb), manager);
G_CALLBACK (system_connection_removed_cb), self);
path = nm_connection_get_path (NM_CONNECTION (connection));
g_hash_table_insert (priv->system_connections, g_strdup (path),
g_object_ref (connection));
g_signal_emit (manager, signals[CONNECTION_ADDED], 0, connection);
g_signal_emit (self, signals[CONNECTION_ADDED], 0, connection);
}
static void
system_new_connection_cb (NMSysconfigSettings *settings,
NMSysconfigConnection *connection,
NMManager *manager)
NMManager *self)
{
system_internal_new_connection (manager, connection);
}
static void
system_query_connections (NMManager *manager)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
GSList *system_connections, *iter;
system_connections = nm_sysconfig_settings_list_connections (priv->sys_settings);
for (iter = system_connections; iter; iter = g_slist_next (iter))
system_internal_new_connection (manager, NM_SYSCONFIG_CONNECTION (iter->data));
g_slist_free (system_connections);
_new_connection (settings, connection, self);
}
static void
@ -2932,7 +2922,11 @@ nm_manager_start (NMManager *self)
system_unmanaged_devices_changed_cb (priv->sys_settings, NULL, self);
system_hostname_changed_cb (priv->sys_settings, NULL, self);
system_query_connections (self);
/* Get all connections */
nm_sysconfig_settings_for_each_connection (NM_MANAGER_GET_PRIVATE (self)->sys_settings,
_new_connection,
self);
nm_udev_manager_query_devices (priv->udev_mgr);
bluez_manager_resync_devices (self);

View file

@ -168,25 +168,26 @@ load_connections (NMSysconfigSettings *self)
unmanaged_specs_changed (NULL, self);
}
GSList *
nm_sysconfig_settings_list_connections (NMSysconfigSettings *settings)
void
nm_sysconfig_settings_for_each_connection (NMSysconfigSettings *self,
NMSysconfigSettingsForEachFunc for_each_func,
gpointer user_data)
{
NMSysconfigSettingsPrivate *priv;
GHashTableIter iter;
gpointer key;
GSList *list = NULL;
g_return_val_if_fail (settings != NULL, NULL);
g_return_val_if_fail (NM_IS_SYSCONFIG_SETTINGS (settings), NULL);
g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_SYSCONFIG_SETTINGS (self));
g_return_if_fail (for_each_func != NULL);
priv = NM_SYSCONFIG_SETTINGS_GET_PRIVATE (settings);
priv = NM_SYSCONFIG_SETTINGS_GET_PRIVATE (self);
load_connections (settings);
load_connections (self);
g_hash_table_iter_init (&iter, priv->visible_connections);
while (g_hash_table_iter_next (&iter, &key, NULL))
list = g_slist_prepend (list, NM_SYSCONFIG_CONNECTION (key));
return g_slist_reverse (list);
for_each_func (self, NM_SYSCONFIG_CONNECTION (key), user_data);
}
static gboolean
@ -194,38 +195,40 @@ impl_settings_list_connections (NMSysconfigSettings *self,
GPtrArray **connections,
GError **error)
{
GSList *list = NULL, *iter;
NMSysconfigSettingsPrivate *priv = NM_SYSCONFIG_SETTINGS_GET_PRIVATE (self);
GHashTableIter iter;
gpointer key;
list = nm_sysconfig_settings_list_connections (self);
*connections = g_ptr_array_sized_new (g_slist_length (list) + 1);
for (iter = list; iter; iter = g_slist_next (iter)) {
g_ptr_array_add (*connections,
g_strdup (nm_connection_get_path (NM_CONNECTION (iter->data))));
}
g_slist_free (list);
load_connections (self);
*connections = g_ptr_array_sized_new (g_hash_table_size (priv->visible_connections) + 1);
g_hash_table_iter_init (&iter, priv->visible_connections);
while (g_hash_table_iter_next (&iter, &key, NULL))
g_ptr_array_add (*connections, g_strdup (nm_connection_get_path (NM_CONNECTION (key))));
return TRUE;
}
NMSysconfigConnection *
nm_sysconfig_settings_get_connection_by_path (NMSysconfigSettings *settings, const char *path)
nm_sysconfig_settings_get_connection_by_path (NMSysconfigSettings *self, const char *path)
{
NMSysconfigConnection *connection = NULL;
GSList *list = NULL, *iter;
NMSysconfigSettingsPrivate *priv;
GHashTableIter iter;
gpointer key;
g_return_val_if_fail (settings != NULL, NULL);
g_return_val_if_fail (NM_IS_SYSCONFIG_SETTINGS (settings), NULL);
g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_SYSCONFIG_SETTINGS (self), NULL);
g_return_val_if_fail (path != NULL, NULL);
list = nm_sysconfig_settings_list_connections (settings);
for (iter = list; iter; iter = g_slist_next (iter)) {
if (!strcmp (nm_connection_get_path (NM_CONNECTION (iter->data)), path)) {
connection = NM_SYSCONFIG_CONNECTION (iter->data);
break;
}
}
g_slist_free (list);
priv = NM_SYSCONFIG_SETTINGS_GET_PRIVATE (self);
return connection;
load_connections (self);
g_hash_table_iter_init (&iter, priv->visible_connections);
while (g_hash_table_iter_next (&iter, &key, NULL)) {
if (!strcmp (nm_connection_get_path (NM_CONNECTION (key)), path))
return NM_SYSCONFIG_CONNECTION (key);
}
return NULL;
}
static void

View file

@ -62,7 +62,14 @@ NMSysconfigSettings *nm_sysconfig_settings_new (const char *config_file,
const char *plugins,
GError **error);
/* Returns a list of NMSysconfigConnections */
typedef void (*NMSysconfigSettingsForEachFunc) (NMSysconfigSettings *settings,
NMSysconfigConnection *connection,
gpointer user_data);
void nm_sysconfig_settings_for_each_connection (NMSysconfigSettings *settings,
NMSysconfigSettingsForEachFunc for_each_func,
gpointer user_data);
GSList * nm_sysconfig_settings_list_connections (NMSysconfigSettings *settings);
NMSysconfigConnection * nm_sysconfig_settings_get_connection_by_path (NMSysconfigSettings *settings,