mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-08 17:40:32 +01:00
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:
parent
f58f2d7f39
commit
e5c5622626
3 changed files with 57 additions and 53 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue