summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2020-03-14 17:52:08 +0100
committerThomas Haller <thaller@redhat.com>2020-03-14 17:52:08 +0100
commit67c00353d36764b29225e4a6ad1c808f25dee7a6 (patch)
treebc81e3773c87dd408413e2adbdda910acbdbdf06
parent2b814f4e874d615b37341b8eefb3dbced4a3f900 (diff)
downloadNetworkManager-67c00353d36764b29225e4a6ad1c808f25dee7a6.tar.gz
libnm: reuse _list_find_by_service() for searching NMVpnPluginInfo
-rw-r--r--libnm-core/nm-vpn-plugin-info.c65
1 files changed, 31 insertions, 34 deletions
diff --git a/libnm-core/nm-vpn-plugin-info.c b/libnm-core/nm-vpn-plugin-info.c
index aa016e6d13..7ef34a62c8 100644
--- a/libnm-core/nm-vpn-plugin-info.c
+++ b/libnm-core/nm-vpn-plugin-info.c
@@ -52,6 +52,12 @@ G_DEFINE_TYPE_WITH_CODE (NMVpnPluginInfo, nm_vpn_plugin_info, G_TYPE_OBJECT,
/*****************************************************************************/
+static NMVpnPluginInfo *_list_find_by_service (GSList *list,
+ const char *name,
+ const char *service);
+
+/*****************************************************************************/
+
/**
* nm_vpn_plugin_info_validate_filename:
* @filename: the filename to check
@@ -351,33 +357,16 @@ nm_vpn_plugin_info_list_load ()
NMVpnPluginInfo *
nm_vpn_plugin_info_new_search_file (const char *name, const char *service)
{
- NMVpnPluginInfo *plugin_info = NULL;
+ NMVpnPluginInfo *info;
GSList *infos;
- GSList *info;
if (!name && !service)
g_return_val_if_reached (NULL);
infos = nm_vpn_plugin_info_list_load ();
-
- for (info = infos; info; info = info->next) {
- NMVpnPluginInfo *p = info->data;
-
- if ( name
- && !nm_streq (nm_vpn_plugin_info_get_name (p), name))
- continue;
- if ( service
- && !nm_streq (nm_vpn_plugin_info_get_service (p), service)
- && (nm_utils_strv_find_first (NM_VPN_PLUGIN_INFO_GET_PRIVATE (p)->aliases,
- -1, service) < 0))
- continue;
- plugin_info = g_object_ref (p);
- break;
- }
-
+ info = nm_g_object_ref (_list_find_by_service (infos, name, service));
g_slist_free_full (infos, g_object_unref);
-
- return plugin_info;
+ return info;
}
/*****************************************************************************/
@@ -542,14 +531,22 @@ nm_vpn_plugin_info_list_find_by_filename (GSList *list, const char *filename)
}
static NMVpnPluginInfo *
-_list_find_by_service (GSList *list, const char *service)
+_list_find_by_service (GSList *list,
+ const char *name,
+ const char *service)
{
for (; list; list = list->next) {
NMVpnPluginInfoPrivate *priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE (list->data);
- if ( nm_streq (priv->service, service)
- || nm_utils_strv_find_first (priv->aliases, -1, service) >= 0)
- return list->data;
+ if ( name
+ && !nm_streq (name, priv->name))
+ continue;
+ if ( service
+ && !nm_streq (priv->service, service)
+ && (nm_utils_strv_find_first (priv->aliases, -1, service) < 0))
+ continue;
+
+ return list->data;
}
return NULL;
}
@@ -569,7 +566,7 @@ nm_vpn_plugin_info_list_find_by_service (GSList *list, const char *service)
{
if (!service)
g_return_val_if_reached (NULL);
- return _list_find_by_service (list, service);
+ return _list_find_by_service (list, NULL, service);
}
/* known_names are well known short names for the service-type. They all implicitly
@@ -612,26 +609,26 @@ static const char *known_names[] = {
char *
nm_vpn_plugin_info_list_find_service_type (GSList *list, const char *name)
{
- GSList *iter;
+ NMVpnPluginInfo *info;
char *n;
if (!name)
g_return_val_if_reached (NULL);
if (!*name)
return NULL;
+ if (!list)
+ return NULL;
/* First, try to interpret @name as a full service-type (or alias). */
- if (_list_find_by_service (list, name))
+ info = _list_find_by_service (list, NULL, name);
+ if (info)
return g_strdup (name);
/* try to interpret @name as plugin name, in which case we return
* the main service-type (not an alias). */
- for (iter = list; iter; iter = iter->next) {
- NMVpnPluginInfoPrivate *priv = NM_VPN_PLUGIN_INFO_GET_PRIVATE (iter->data);
-
- if (nm_streq (priv->name, name))
- return g_strdup (priv->service);
- }
+ info = _list_find_by_service (list, name, NULL);
+ if (info)
+ return g_strdup (NM_VPN_PLUGIN_INFO_GET_PRIVATE (info)->service);
/* check the hard-coded list of short-names. They all have have the same
* well-known prefix org.freedesktop.NetworkManager and the name. */
@@ -641,7 +638,7 @@ nm_vpn_plugin_info_list_find_service_type (GSList *list, const char *name)
/* try, if there exists a plugin with @name under org.freedesktop.NetworkManager.
* Allow this to be a valid abbreviation. */
n = g_strdup_printf ("%s.%s", NM_DBUS_INTERFACE, name);
- if (_list_find_by_service (list, n))
+ if (_list_find_by_service (list, NULL, n))
return n;
g_free (n);