summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/NetworkManagerUtils.c83
-rw-r--r--src/NetworkManagerUtils.h2
-rw-r--r--src/devices/adsl/nm-device-adsl.c2
-rw-r--r--src/devices/bluetooth/nm-device-bt.c2
-rw-r--r--src/devices/nm-device-bond.c2
-rw-r--r--src/devices/nm-device-bridge.c2
-rw-r--r--src/devices/nm-device-dummy.c2
-rw-r--r--src/devices/nm-device-ethernet.c2
-rw-r--r--src/devices/nm-device-infiniband.c2
-rw-r--r--src/devices/nm-device-ip-tunnel.c2
-rw-r--r--src/devices/nm-device-macvlan.c2
-rw-r--r--src/devices/nm-device-tun.c2
-rw-r--r--src/devices/nm-device-vlan.c2
-rw-r--r--src/devices/nm-device-vxlan.c2
-rw-r--r--src/devices/nm-device.c2
-rw-r--r--src/devices/nm-device.h4
-rw-r--r--src/devices/team/nm-device-team.c2
-rw-r--r--src/devices/wifi/nm-device-iwd.c2
-rw-r--r--src/devices/wifi/nm-device-olpc-mesh.c2
-rw-r--r--src/devices/wifi/nm-device-wifi.c2
-rw-r--r--src/devices/wwan/nm-device-modem.c2
-rw-r--r--src/devices/wwan/nm-modem-broadband.c2
-rw-r--r--src/devices/wwan/nm-modem.c2
-rw-r--r--src/devices/wwan/nm-modem.h4
-rw-r--r--src/nm-manager.c19
25 files changed, 66 insertions, 86 deletions
diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c
index 35b077a7a1..12d46697ae 100644
--- a/src/NetworkManagerUtils.c
+++ b/src/NetworkManagerUtils.c
@@ -67,43 +67,47 @@ nm_utils_get_shared_wifi_permission (NMConnection *connection)
/*****************************************************************************/
static char *
-get_new_connection_name (const GSList *existing_connections,
+get_new_connection_name (NMConnection *const*existing_connections,
const char *preferred,
const char *fallback_prefix)
{
- GSList *names = NULL;
- const GSList *iter;
- guint i;
+ gs_free const char **existing_names = NULL;
+ guint i, existing_len = 0;
g_assert (fallback_prefix);
- for (iter = existing_connections; iter; iter = g_slist_next (iter)) {
- NMConnection *candidate = NM_CONNECTION (iter->data);
- const char *id;
+ if (existing_connections) {
+ existing_len = NM_PTRARRAY_LEN (existing_connections);
+ existing_names = g_new (const char *, existing_len);
+ for (i = 0; i < existing_len; i++) {
+ NMConnection *candidate;
+ const char *id;
- id = nm_connection_get_id (candidate);
- nm_assert (id);
+ candidate = existing_connections[i];
+ nm_assert (NM_IS_CONNECTION (candidate));
- names = g_slist_append (names, (gpointer) id);
+ id = nm_connection_get_id (candidate);
+ nm_assert (id);
- if ( preferred
- && nm_streq (preferred, id)) {
- /* the preferred name is already taken. Forget about it. */
- preferred = NULL;
+ existing_names[i] = id;
+
+ if ( preferred
+ && nm_streq (preferred, id)) {
+ /* the preferred name is already taken. Forget about it. */
+ preferred = NULL;
+ }
}
+ nm_assert (!existing_connections[i]);
}
/* Return the preferred name if it was unique */
- if (preferred) {
- g_slist_free (names);
+ if (preferred)
return g_strdup (preferred);
- }
/* Otherwise find the next available unique connection name using the given
* connection name template.
*/
for (i = 1; TRUE; i++) {
- gboolean found = FALSE;
char *temp;
/* Translators: the first %s is a prefix for the connection id, such
@@ -112,53 +116,44 @@ get_new_connection_name (const GSList *existing_connections,
* connection id. */
temp = g_strdup_printf (C_("connection id fallback", "%s %u"),
fallback_prefix, i);
- for (iter = names; iter; iter = g_slist_next (iter)) {
- if (nm_streq (iter->data, temp)) {
- found = TRUE;
- break;
- }
- }
- if (!found) {
- g_slist_free (names);
+
+ if (nm_utils_strv_find_first ((char **) existing_names,
+ existing_len,
+ temp) < 0)
return temp;
- }
+
g_free (temp);
}
}
static char *
get_new_connection_ifname (NMPlatform *platform,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
const char *prefix)
{
- guint i;
- char *name;
- const GSList *iter;
- gboolean found;
+ guint i, j;
for (i = 0; TRUE; i++) {
+ char *name;
+
name = g_strdup_printf ("%s%d", prefix, i);
if (nm_platform_link_get_by_ifname (platform, name))
goto next;
- for (iter = existing_connections, found = FALSE; iter; iter = g_slist_next (iter)) {
- NMConnection *candidate = iter->data;
-
- if (nm_streq0 (nm_connection_get_interface_name (candidate), name)) {
- found = TRUE;
- break;
+ if (existing_connections) {
+ for (j = 0; existing_connections[j]; j++) {
+ if (nm_streq0 (nm_connection_get_interface_name (existing_connections[j]),
+ name))
+ goto next;
}
}
- if (!found)
- return name;
+ return name;
- next:
+next:
g_free (name);
}
-
- return NULL;
}
const char *
@@ -250,7 +245,7 @@ void
nm_utils_complete_generic (NMPlatform *platform,
NMConnection *connection,
const char *ctype,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
const char *preferred_id,
const char *fallback_id_prefix,
const char *ifname_prefix,
diff --git a/src/NetworkManagerUtils.h b/src/NetworkManagerUtils.h
index 1947a316cf..13bdb67e85 100644
--- a/src/NetworkManagerUtils.h
+++ b/src/NetworkManagerUtils.h
@@ -31,7 +31,7 @@ const char *nm_utils_get_shared_wifi_permission (NMConnection *connection);
void nm_utils_complete_generic (NMPlatform *platform,
NMConnection *connection,
const char *ctype,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
const char *preferred_id,
const char *fallback_id_prefix,
const char *ifname_prefix,
diff --git a/src/devices/adsl/nm-device-adsl.c b/src/devices/adsl/nm-device-adsl.c
index ed7b868d24..9133137682 100644
--- a/src/devices/adsl/nm-device-adsl.c
+++ b/src/devices/adsl/nm-device-adsl.c
@@ -114,7 +114,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMSettingAdsl *s_adsl;
diff --git a/src/devices/bluetooth/nm-device-bt.c b/src/devices/bluetooth/nm-device-bt.c
index 0b794cbaa5..1d237d9277 100644
--- a/src/devices/bluetooth/nm-device-bt.c
+++ b/src/devices/bluetooth/nm-device-bt.c
@@ -215,7 +215,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE ((NMDeviceBt *) device);
diff --git a/src/devices/nm-device-bond.c b/src/devices/nm-device-bond.c
index 94131bf9f4..2dd9494a8b 100644
--- a/src/devices/nm-device-bond.c
+++ b/src/devices/nm-device-bond.c
@@ -76,7 +76,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMSettingBond *s_bond;
diff --git a/src/devices/nm-device-bridge.c b/src/devices/nm-device-bridge.c
index 22d2d6bb24..c81a025338 100644
--- a/src/devices/nm-device-bridge.c
+++ b/src/devices/nm-device-bridge.c
@@ -115,7 +115,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMSettingBridge *s_bridge;
diff --git a/src/devices/nm-device-dummy.c b/src/devices/nm-device-dummy.c
index 07647897ea..f8bc8e7521 100644
--- a/src/devices/nm-device-dummy.c
+++ b/src/devices/nm-device-dummy.c
@@ -55,7 +55,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMSettingDummy *s_dummy;
diff --git a/src/devices/nm-device-ethernet.c b/src/devices/nm-device-ethernet.c
index 930ab2bac7..16fa431463 100644
--- a/src/devices/nm-device-ethernet.c
+++ b/src/devices/nm-device-ethernet.c
@@ -1371,7 +1371,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMSettingWired *s_wired;
diff --git a/src/devices/nm-device-infiniband.c b/src/devices/nm-device-infiniband.c
index dbba257888..781bbd6921 100644
--- a/src/devices/nm-device-infiniband.c
+++ b/src/devices/nm-device-infiniband.c
@@ -175,7 +175,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMSettingInfiniband *s_infiniband;
diff --git a/src/devices/nm-device-ip-tunnel.c b/src/devices/nm-device-ip-tunnel.c
index f0ee79ccb2..59ca9ed557 100644
--- a/src/devices/nm-device-ip-tunnel.c
+++ b/src/devices/nm-device-ip-tunnel.c
@@ -358,7 +358,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMSettingIPTunnel *s_ip_tunnel;
diff --git a/src/devices/nm-device-macvlan.c b/src/devices/nm-device-macvlan.c
index cc4b984222..b8e748d660 100644
--- a/src/devices/nm-device-macvlan.c
+++ b/src/devices/nm-device-macvlan.c
@@ -334,7 +334,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMSettingMacvlan *s_macvlan;
diff --git a/src/devices/nm-device-tun.c b/src/devices/nm-device-tun.c
index 3573334b3d..123455f16d 100644
--- a/src/devices/nm-device-tun.c
+++ b/src/devices/nm-device-tun.c
@@ -145,7 +145,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMSettingTun *s_tun;
diff --git a/src/devices/nm-device-vlan.c b/src/devices/nm-device-vlan.c
index 8737f10b6a..ae6a0f3690 100644
--- a/src/devices/nm-device-vlan.c
+++ b/src/devices/nm-device-vlan.c
@@ -379,7 +379,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMSettingVlan *s_vlan;
diff --git a/src/devices/nm-device-vxlan.c b/src/devices/nm-device-vxlan.c
index d16754f9ee..e125222374 100644
--- a/src/devices/nm-device-vxlan.c
+++ b/src/devices/nm-device-vxlan.c
@@ -314,7 +314,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMSettingVxlan *s_vxlan;
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index feb2a1b2b0..6c23a77286 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -4781,7 +4781,7 @@ gboolean
nm_device_complete_connection (NMDevice *self,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMDeviceClass *klass;
diff --git a/src/devices/nm-device.h b/src/devices/nm-device.h
index f990f8331e..4ed852bc65 100644
--- a/src/devices/nm-device.h
+++ b/src/devices/nm-device.h
@@ -312,7 +312,7 @@ typedef struct {
gboolean (* complete_connection) (NMDevice *self,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error);
NMActStageReturn (* act_stage1_prepare) (NMDevice *self,
@@ -520,7 +520,7 @@ gboolean nm_device_can_auto_connect (NMDevice *self,
gboolean nm_device_complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connection,
+ NMConnection *const*existing_connections,
GError **error);
gboolean nm_device_check_connection_compatible (NMDevice *device, NMConnection *connection);
diff --git a/src/devices/team/nm-device-team.c b/src/devices/team/nm-device-team.c
index 2f1dbde39f..f83ba22b5d 100644
--- a/src/devices/team/nm-device-team.c
+++ b/src/devices/team/nm-device-team.c
@@ -104,7 +104,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMSettingTeam *s_team;
diff --git a/src/devices/wifi/nm-device-iwd.c b/src/devices/wifi/nm-device-iwd.c
index f3a3a87921..40980b06f0 100644
--- a/src/devices/wifi/nm-device-iwd.c
+++ b/src/devices/wifi/nm-device-iwd.c
@@ -644,7 +644,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMDeviceIwd *self = NM_DEVICE_IWD (device);
diff --git a/src/devices/wifi/nm-device-olpc-mesh.c b/src/devices/wifi/nm-device-olpc-mesh.c
index a330de038d..c3d070d98d 100644
--- a/src/devices/wifi/nm-device-olpc-mesh.c
+++ b/src/devices/wifi/nm-device-olpc-mesh.c
@@ -113,7 +113,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMSettingOlpcMesh *s_mesh;
diff --git a/src/devices/wifi/nm-device-wifi.c b/src/devices/wifi/nm-device-wifi.c
index 7aae9ea6ca..7c64d594b7 100644
--- a/src/devices/wifi/nm-device-wifi.c
+++ b/src/devices/wifi/nm-device-wifi.c
@@ -733,7 +733,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMDeviceWifi *self = NM_DEVICE_WIFI (device);
diff --git a/src/devices/wwan/nm-device-modem.c b/src/devices/wwan/nm-device-modem.c
index 0820b82db0..2a3e9ebeb7 100644
--- a/src/devices/wwan/nm-device-modem.c
+++ b/src/devices/wwan/nm-device-modem.c
@@ -434,7 +434,7 @@ static gboolean
complete_connection (NMDevice *device,
NMConnection *connection,
const char *specific_object,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) device);
diff --git a/src/devices/wwan/nm-modem-broadband.c b/src/devices/wwan/nm-modem-broadband.c
index be0c236201..9a3744db3c 100644
--- a/src/devices/wwan/nm-modem-broadband.c
+++ b/src/devices/wwan/nm-modem-broadband.c
@@ -663,7 +663,7 @@ check_connection_compatible (NMModem *_self, NMConnection *connection)
static gboolean
complete_connection (NMModem *_self,
NMConnection *connection,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMModemBroadband *self = NM_MODEM_BROADBAND (_self);
diff --git a/src/devices/wwan/nm-modem.c b/src/devices/wwan/nm-modem.c
index 7dcbec1b41..61b7247ec8 100644
--- a/src/devices/wwan/nm-modem.c
+++ b/src/devices/wwan/nm-modem.c
@@ -1091,7 +1091,7 @@ nm_modem_check_connection_compatible (NMModem *self, NMConnection *connection)
gboolean
nm_modem_complete_connection (NMModem *self,
NMConnection *connection,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error)
{
NMModemClass *klass;
diff --git a/src/devices/wwan/nm-modem.h b/src/devices/wwan/nm-modem.h
index a95da25534..3e281c0c92 100644
--- a/src/devices/wwan/nm-modem.h
+++ b/src/devices/wwan/nm-modem.h
@@ -126,7 +126,7 @@ typedef struct {
gboolean (*complete_connection) (NMModem *modem,
NMConnection *connection,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error);
NMActStageReturn (*act_stage1_prepare) (NMModem *modem,
@@ -189,7 +189,7 @@ gboolean nm_modem_check_connection_compatible (NMModem *self, NMConnection *conn
gboolean nm_modem_complete_connection (NMModem *self,
NMConnection *connection,
- const GSList *existing_connections,
+ NMConnection *const*existing_connections,
GError **error);
void nm_modem_get_route_parameters (NMModem *self,
diff --git a/src/nm-manager.c b/src/nm-manager.c
index c621c76e1a..7764dbbee3 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -4515,7 +4515,6 @@ impl_manager_add_and_activate_connection (NMDBusObject *obj,
NMManager *self = NM_MANAGER (obj);
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
NMConnection *connection = NULL;
- GSList *all_connections = NULL;
NMActiveConnection *active = NULL;
NMAuthSubject *subject = NULL;
GError *error = NULL;
@@ -4554,17 +4553,6 @@ impl_manager_add_and_activate_connection (NMDBusObject *obj,
if (!subject)
goto error;
- {
- NMSettingsConnection *const*connections;
- guint i, len;
-
- connections = nm_settings_get_connections (priv->settings, &len);
- all_connections = NULL;
- for (i = len; i > 0; ) {
- i--;
- all_connections = g_slist_prepend (all_connections, connections[i]);
- }
- }
if (vpn) {
/* Try to fill the VPN's connection setting and name at least */
if (!nm_connection_get_setting_vpn (connection)) {
@@ -4578,7 +4566,7 @@ impl_manager_add_and_activate_connection (NMDBusObject *obj,
nm_utils_complete_generic (priv->platform,
connection,
NM_SETTING_VPN_SETTING_NAME,
- all_connections,
+ (NMConnection *const*) nm_settings_get_connections (priv->settings, NULL),
NULL,
_("VPN connection"),
NULL,
@@ -4588,12 +4576,10 @@ impl_manager_add_and_activate_connection (NMDBusObject *obj,
if (!nm_device_complete_connection (device,
connection,
specific_object_path,
- all_connections,
+ (NMConnection *const*) nm_settings_get_connections (priv->settings, NULL),
&error))
goto error;
}
- g_slist_free (all_connections);
- all_connections = NULL;
active = _new_active_connection (self,
connection,
@@ -4618,7 +4604,6 @@ impl_manager_add_and_activate_connection (NMDBusObject *obj,
error:
nm_audit_log_connection_op (NM_AUDIT_OP_CONN_ADD_ACTIVATE, NULL, FALSE, NULL, subject, error->message);
g_clear_object (&connection);
- g_slist_free (all_connections);
g_clear_object (&subject);
g_clear_object (&active);