summaryrefslogtreecommitdiff
path: root/libnm-core/nm-setting-wired.c
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2014-10-22 12:31:31 -0400
committerDan Winship <danw@gnome.org>2014-10-28 17:08:46 -0400
commitdfcb2213379405cb58ea69b362ab4637396e175d (patch)
tree6374120cb8b3e4dee54b1104af55bb5ffcef3aca /libnm-core/nm-setting-wired.c
parentaf3d604e4f4a04b3b6de153ab6de949f253b7630 (diff)
downloadNetworkManager-dfcb2213379405cb58ea69b362ab4637396e175d.tar.gz
libnm-core: make _get_mac_address_blacklist() methods return arrays
Make nm_setting_wired_get_mac_address_blacklist() and nm_setting_wireless_get_mac_address_blacklist() return a char**, rather than a GSList.
Diffstat (limited to 'libnm-core/nm-setting-wired.c')
-rw-r--r--libnm-core/nm-setting-wired.c82
1 files changed, 49 insertions, 33 deletions
diff --git a/libnm-core/nm-setting-wired.c b/libnm-core/nm-setting-wired.c
index 928dd628c9..b49812769b 100644
--- a/libnm-core/nm-setting-wired.c
+++ b/libnm-core/nm-setting-wired.c
@@ -50,7 +50,7 @@ typedef struct {
gboolean auto_negotiate;
char *device_mac_address;
char *cloned_mac_address;
- GSList *mac_address_blacklist;
+ GArray *mac_address_blacklist;
guint32 mtu;
char **s390_subchannels;
char *s390_nettype;
@@ -185,15 +185,17 @@ nm_setting_wired_get_cloned_mac_address (NMSettingWired *setting)
* nm_setting_wired_get_mac_address_blacklist:
* @setting: the #NMSettingWired
*
- * Returns: (element-type utf8): the #NMSettingWired:mac-address-blacklist
- * property of the setting
+ * Returns: the #NMSettingWired:mac-address-blacklist property of the setting
**/
-const GSList *
+const char * const *
nm_setting_wired_get_mac_address_blacklist (NMSettingWired *setting)
{
+ NMSettingWiredPrivate *priv;
+
g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
- return NM_SETTING_WIRED_GET_PRIVATE (setting)->mac_address_blacklist;
+ priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
+ return (const char * const *) priv->mac_address_blacklist->data;
}
/**
@@ -207,7 +209,7 @@ nm_setting_wired_get_num_mac_blacklist_items (NMSettingWired *setting)
{
g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), 0);
- return g_slist_length (NM_SETTING_WIRED_GET_PRIVATE (setting)->mac_address_blacklist);
+ return NM_SETTING_WIRED_GET_PRIVATE (setting)->mac_address_blacklist->len;
}
/**
@@ -226,9 +228,9 @@ nm_setting_wired_get_mac_blacklist_item (NMSettingWired *setting, guint32 idx)
g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
- g_return_val_if_fail (idx <= g_slist_length (priv->mac_address_blacklist), NULL);
+ g_return_val_if_fail (idx <= priv->mac_address_blacklist->len, NULL);
- return (const char *) g_slist_nth_data (priv->mac_address_blacklist, idx);
+ return g_array_index (priv->mac_address_blacklist, const char *, idx);
}
/**
@@ -245,7 +247,7 @@ gboolean
nm_setting_wired_add_mac_blacklist_item (NMSettingWired *setting, const char *mac)
{
NMSettingWiredPrivate *priv;
- GSList *iter;
+ int i;
g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), FALSE);
g_return_val_if_fail (mac != NULL, FALSE);
@@ -254,13 +256,13 @@ nm_setting_wired_add_mac_blacklist_item (NMSettingWired *setting, const char *ma
return FALSE;
priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
- for (iter = priv->mac_address_blacklist; iter; iter = g_slist_next (iter)) {
- if (!strcasecmp (mac, (char *) iter->data))
+ for (i = 0; i < priv->mac_address_blacklist->len; i++) {
+ if (!strcasecmp (mac, g_array_index (priv->mac_address_blacklist, char *, i)))
return FALSE;
}
- priv->mac_address_blacklist = g_slist_append (priv->mac_address_blacklist,
- g_ascii_strup (mac, -1));
+ mac = g_ascii_strup (mac, -1);
+ g_array_append_val (priv->mac_address_blacklist, mac);
g_object_notify (G_OBJECT (setting), NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST);
return TRUE;
}
@@ -276,16 +278,13 @@ void
nm_setting_wired_remove_mac_blacklist_item (NMSettingWired *setting, guint32 idx)
{
NMSettingWiredPrivate *priv;
- GSList *elt;
g_return_if_fail (NM_IS_SETTING_WIRED (setting));
priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
- elt = g_slist_nth (priv->mac_address_blacklist, idx);
- g_return_if_fail (elt != NULL);
+ g_return_if_fail (idx < priv->mac_address_blacklist->len);
- g_free (elt->data);
- priv->mac_address_blacklist = g_slist_delete_link (priv->mac_address_blacklist, elt);
+ g_array_remove_index (priv->mac_address_blacklist, idx);
g_object_notify (G_OBJECT (setting), NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST);
}
@@ -303,7 +302,7 @@ gboolean
nm_setting_wired_remove_mac_blacklist_item_by_value (NMSettingWired *setting, const char *mac)
{
NMSettingWiredPrivate *priv;
- GSList *iter;
+ int i;
g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), FALSE);
g_return_val_if_fail (mac != NULL, FALSE);
@@ -312,9 +311,9 @@ nm_setting_wired_remove_mac_blacklist_item_by_value (NMSettingWired *setting, co
return FALSE;
priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
- for (iter = priv->mac_address_blacklist; iter; iter = g_slist_next (iter)) {
- if (!strcasecmp (mac, (char *) iter->data)) {
- priv->mac_address_blacklist = g_slist_delete_link (priv->mac_address_blacklist, iter);
+ for (i = 0; i < priv->mac_address_blacklist->len; i++) {
+ if (!strcasecmp (mac, g_array_index (priv->mac_address_blacklist, char *, i))) {
+ g_array_remove_index (priv->mac_address_blacklist, i);
g_object_notify (G_OBJECT (setting), NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST);
return TRUE;
}
@@ -333,8 +332,7 @@ nm_setting_wired_clear_mac_blacklist_items (NMSettingWired *setting)
{
g_return_if_fail (NM_IS_SETTING_WIRED (setting));
- g_slist_free_full (NM_SETTING_WIRED_GET_PRIVATE (setting)->mac_address_blacklist, g_free);
- NM_SETTING_WIRED_GET_PRIVATE (setting)->mac_address_blacklist = NULL;
+ g_array_set_size (NM_SETTING_WIRED_GET_PRIVATE (setting)->mac_address_blacklist, 0);
g_object_notify (G_OBJECT (setting), NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST);
}
@@ -563,8 +561,8 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
const char *valid_duplex[] = { "half", "full", NULL };
const char *valid_nettype[] = { "qeth", "lcs", "ctc", NULL };
GHashTableIter iter;
- GSList* mac_blacklist_iter;
const char *key, *value;
+ int i;
if (priv->port && !_nm_utils_string_in_list (priv->port, valid_ports)) {
g_set_error (error,
@@ -595,14 +593,15 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
return FALSE;
}
- for (mac_blacklist_iter = priv->mac_address_blacklist; mac_blacklist_iter;
- mac_blacklist_iter = mac_blacklist_iter->next) {
- if (!nm_utils_hwaddr_valid (mac_blacklist_iter->data, ETH_ALEN)) {
+ for (i = 0; i < priv->mac_address_blacklist->len; i++) {
+ const char *mac = g_array_index (priv->mac_address_blacklist, const char *, i);
+
+ if (!nm_utils_hwaddr_valid (mac, ETH_ALEN)) {
g_set_error (error,
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_INVALID_PROPERTY,
_("'%s' is not a valid MAC address"),
- (const char *) mac_blacklist_iter->data);
+ mac);
g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST);
return FALSE;
}
@@ -658,11 +657,21 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
}
static void
+clear_blacklist_item (char **item_p)
+{
+ g_free (*item_p);
+}
+
+static void
nm_setting_wired_init (NMSettingWired *setting)
{
NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
priv->s390_options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+ /* We use GArray rather than GPtrArray so it will automatically be NULL-terminated */
+ priv->mac_address_blacklist = g_array_new (TRUE, FALSE, sizeof (char *));
+ g_array_set_clear_func (priv->mac_address_blacklist, (GDestroyNotify) clear_blacklist_item);
}
static void
@@ -678,7 +687,7 @@ finalize (GObject *object)
g_free (priv->device_mac_address);
g_free (priv->cloned_mac_address);
- g_slist_free_full (priv->mac_address_blacklist, g_free);
+ g_array_unref (priv->mac_address_blacklist);
if (priv->s390_subchannels)
g_strfreev (priv->s390_subchannels);
@@ -691,6 +700,7 @@ set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (object);
+ char **blacklist;
switch (prop_id) {
case PROP_PORT:
@@ -716,8 +726,14 @@ set_property (GObject *object, guint prop_id,
priv->cloned_mac_address = g_value_dup_string (value);
break;
case PROP_MAC_ADDRESS_BLACKLIST:
- g_slist_free_full (priv->mac_address_blacklist, g_free);
- priv->mac_address_blacklist = _nm_utils_strv_to_slist (g_value_get_boxed (value));
+ blacklist = g_value_dup_boxed (value);
+ g_array_set_size (priv->mac_address_blacklist, 0);
+ if (blacklist) {
+ g_array_set_size (priv->mac_address_blacklist, g_strv_length (blacklist));
+ memcpy (priv->mac_address_blacklist->data, blacklist,
+ priv->mac_address_blacklist->len * sizeof (char *));
+ g_free (blacklist);
+ }
break;
case PROP_MTU:
priv->mtu = g_value_get_uint (value);
@@ -768,7 +784,7 @@ get_property (GObject *object, guint prop_id,
g_value_set_string (value, nm_setting_wired_get_cloned_mac_address (setting));
break;
case PROP_MAC_ADDRESS_BLACKLIST:
- g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->mac_address_blacklist));
+ g_value_set_boxed (value, (char **) priv->mac_address_blacklist->data);
break;
case PROP_MTU:
g_value_set_uint (value, nm_setting_wired_get_mtu (setting));