diff options
author | Dan Winship <danw@gnome.org> | 2014-08-21 13:19:53 -0400 |
---|---|---|
committer | Dan Winship <danw@gnome.org> | 2014-09-03 15:59:04 -0400 |
commit | 6c33cccb90cff7a42d8104ebd70121ec91501186 (patch) | |
tree | 643a7a1099ffa542fa26a3ecaa1d09ddfa12d614 | |
parent | b5509c0d15d8342b3f3c720b9f86d3913ed0c390 (diff) | |
download | NetworkManager-6c33cccb90cff7a42d8104ebd70121ec91501186.tar.gz |
libnm-core: change list-of-string and array-of-string properties to G_TYPE_STRV
Change all DBUS_TYPE_G_LIST_OF_STRING and DBUS_TYPE_G_ARRAY_OF_STRING
properties to G_TYPE_STRV, and update everything accordingly.
(This doesn't actually require using
_nm_setting_class_transform_property(); dbus-glib is happy to transform
between 'as' and G_TYPE_STRV.)
26 files changed, 295 insertions, 392 deletions
diff --git a/clients/cli/nmcli.c b/clients/cli/nmcli.c index ab0455d473..1ba9c890c6 100644 --- a/clients/cli/nmcli.c +++ b/clients/cli/nmcli.c @@ -388,6 +388,26 @@ setup_signals (void) return TRUE; } +static void +nmc_convert_strv_to_string (const GValue *src_value, GValue *dest_value) +{ + char **strings; + + strings = g_value_get_boxed (src_value); + if (strings) + g_value_take_string (dest_value, g_strjoinv (",", strings)); + else + g_value_set_string (dest_value, ""); +} + +static void +nmc_value_transforms_register (void) +{ + g_value_register_transform_func (G_TYPE_STRV, + G_TYPE_STRING, + nmc_convert_strv_to_string); +} + static NMClient * nmc_get_client (NmCli *nmc) { @@ -496,6 +516,8 @@ main (int argc, char *argv[]) */ rl_set_keyboard_input_timeout (10000); + nmc_value_transforms_register (); + nmc_init (&nm_cli); g_idle_add (start, &args_info); diff --git a/clients/tui/nmt-page-main.c b/clients/tui/nmt-page-main.c index 2e1510f375..ada5c29a25 100644 --- a/clients/tui/nmt-page-main.c +++ b/clients/tui/nmt-page-main.c @@ -96,9 +96,9 @@ permissions_transform_to_allusers (GBinding *binding, GValue *target_value, gpointer user_data) { - GSList *perms = g_value_get_boxed (source_value); + char **perms = g_value_get_boxed (source_value); - g_value_set_boolean (target_value, perms == NULL); + g_value_set_boolean (target_value, g_strv_length (perms) == 0); return TRUE; } @@ -109,12 +109,13 @@ permissions_transform_from_allusers (GBinding *binding, gpointer user_data) { gboolean allusers = g_value_get_boolean (source_value); - GSList *perms = NULL; + char **perms = NULL; if (allusers) { - char *perm = g_strdup_printf ("user:%s:", g_get_user_name ()); + perms = g_new (char *, 2); - perms = g_slist_prepend (perms, perm); + perms[0] = g_strdup_printf ("user:%s:", g_get_user_name ()); + perms[1] = NULL; } g_value_take_boxed (target_value, perms); return TRUE; diff --git a/libnm-core/nm-connection.c b/libnm-core/nm-connection.c index a167117b8e..e02ccf98ff 100644 --- a/libnm-core/nm-connection.c +++ b/libnm-core/nm-connection.c @@ -256,12 +256,11 @@ validate_permissions_type (GHashTable *hash, GError **error) if (s_con) { permissions = g_hash_table_lookup (s_con, NM_SETTING_CONNECTION_PERMISSIONS); if (permissions) { - if ( !G_VALUE_HOLDS (permissions, G_TYPE_STRV) - && !G_VALUE_HOLDS (permissions, DBUS_TYPE_G_LIST_OF_STRING)) { + if (!G_VALUE_HOLDS (permissions, G_TYPE_STRV)) { g_set_error_literal (error, NM_SETTING_ERROR, NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH, - "Wrong permissions property type; should be a list of strings."); + "Wrong permissions property type; should be an array of strings."); return FALSE; } } diff --git a/libnm-core/nm-setting-8021x.c b/libnm-core/nm-setting-8021x.c index 15e91725ff..688fee7342 100644 --- a/libnm-core/nm-setting-8021x.c +++ b/libnm-core/nm-setting-8021x.c @@ -2819,7 +2819,7 @@ set_property (GObject *object, guint prop_id, switch (prop_id) { case PROP_EAP: g_slist_free_full (priv->eap, g_free); - priv->eap = g_value_dup_boxed (value); + priv->eap = _nm_utils_strv_to_slist (g_value_get_boxed (value)); break; case PROP_IDENTITY: g_free (priv->identity); @@ -2855,7 +2855,7 @@ set_property (GObject *object, guint prop_id, break; case PROP_ALTSUBJECT_MATCHES: g_slist_free_full (priv->altsubject_matches, g_free); - priv->altsubject_matches = g_value_dup_boxed (value); + priv->altsubject_matches = _nm_utils_strv_to_slist (g_value_get_boxed (value)); break; case PROP_CLIENT_CERT: if (priv->client_cert) { @@ -2911,7 +2911,7 @@ set_property (GObject *object, guint prop_id, break; case PROP_PHASE2_ALTSUBJECT_MATCHES: g_slist_free_full (priv->phase2_altsubject_matches, g_free); - priv->phase2_altsubject_matches = g_value_dup_boxed (value); + priv->phase2_altsubject_matches = _nm_utils_strv_to_slist (g_value_get_boxed (value)); break; case PROP_PHASE2_CLIENT_CERT: if (priv->phase2_client_cert) { @@ -3003,7 +3003,7 @@ get_property (GObject *object, guint prop_id, switch (prop_id) { case PROP_EAP: - g_value_set_boxed (value, priv->eap); + g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->eap)); break; case PROP_IDENTITY: g_value_set_string (value, priv->identity); @@ -3024,7 +3024,7 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, priv->subject_match); break; case PROP_ALTSUBJECT_MATCHES: - g_value_set_boxed (value, priv->altsubject_matches); + g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->altsubject_matches)); break; case PROP_CLIENT_CERT: g_value_set_boxed (value, priv->client_cert); @@ -3054,7 +3054,7 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, priv->phase2_subject_match); break; case PROP_PHASE2_ALTSUBJECT_MATCHES: - g_value_set_boxed (value, priv->phase2_altsubject_matches); + g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->phase2_altsubject_matches)); break; case PROP_PHASE2_CLIENT_CERT: g_value_set_boxed (value, priv->phase2_client_cert); @@ -3135,7 +3135,7 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class) g_object_class_install_property (object_class, PROP_EAP, g_param_spec_boxed (NM_SETTING_802_1X_EAP, "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); @@ -3241,7 +3241,7 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class) g_object_class_install_property (object_class, PROP_ALTSUBJECT_MATCHES, g_param_spec_boxed (NM_SETTING_802_1X_ALTSUBJECT_MATCHES, "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); @@ -3417,7 +3417,7 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class) g_object_class_install_property (object_class, PROP_PHASE2_ALTSUBJECT_MATCHES, g_param_spec_boxed (NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES, "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); diff --git a/libnm-core/nm-setting-connection.c b/libnm-core/nm-setting-connection.c index fc1e43e04b..9fea63b783 100644 --- a/libnm-core/nm-setting-connection.c +++ b/libnm-core/nm-setting-connection.c @@ -24,7 +24,7 @@ #include <glib/gi18n.h> #include "nm-utils.h" -#include "nm-dbus-glib-types.h" +#include "nm-utils-private.h" #include "nm-setting-connection.h" #include "nm-setting-private.h" @@ -1033,14 +1033,15 @@ finalize (GObject *object) } static GSList * -perm_stringlist_to_permlist (GSList *strlist) +perm_strv_to_permlist (char **strv) { - GSList *list = NULL, *iter; + GSList *list = NULL; + int i; - for (iter = strlist; iter; iter = g_slist_next (iter)) { + for (i = 0; strv[i]; i++) { Permission *p; - p = permission_new_from_str ((const char *) iter->data); + p = permission_new_from_str (strv[i]); if (p) list = g_slist_append (list, p); } @@ -1073,7 +1074,7 @@ set_property (GObject *object, guint prop_id, break; case PROP_PERMISSIONS: g_slist_free_full (priv->permissions, (GDestroyNotify) permission_free); - priv->permissions = perm_stringlist_to_permlist (g_value_get_boxed (value)); + priv->permissions = perm_strv_to_permlist (g_value_get_boxed (value)); break; case PROP_AUTOCONNECT: priv->autoconnect = g_value_get_boolean (value); @@ -1098,7 +1099,7 @@ set_property (GObject *object, guint prop_id, break; case PROP_SECONDARIES: g_slist_free_full (priv->secondaries, g_free); - priv->secondaries = g_value_dup_boxed (value); + priv->secondaries = _nm_utils_strv_to_slist (g_value_get_boxed (value)); break; case PROP_GATEWAY_PING_TIMEOUT: priv->gateway_ping_timeout = g_value_get_uint (value); @@ -1109,14 +1110,18 @@ set_property (GObject *object, guint prop_id, } } -static GSList * -perm_permlist_to_stringlist (GSList *permlist) +static char ** +perm_permlist_to_strv (GSList *permlist) { - GSList *list = NULL, *iter; + GPtrArray *strings; + GSList *iter; + strings = g_ptr_array_new (); for (iter = permlist; iter; iter = g_slist_next (iter)) - list = g_slist_append (list, permission_to_string ((Permission *) iter->data)); - return list; + g_ptr_array_add (strings, permission_to_string ((Permission *) iter->data)); + g_ptr_array_add (strings, NULL); + + return (char **) g_ptr_array_free (strings, FALSE); } static void @@ -1140,7 +1145,7 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, nm_setting_connection_get_connection_type (setting)); break; case PROP_PERMISSIONS: - g_value_take_boxed (value, perm_permlist_to_stringlist (priv->permissions)); + g_value_take_boxed (value, perm_permlist_to_strv (priv->permissions)); break; case PROP_AUTOCONNECT: g_value_set_boolean (value, nm_setting_connection_get_autoconnect (setting)); @@ -1161,7 +1166,7 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, nm_setting_connection_get_slave_type (setting)); break; case PROP_SECONDARIES: - g_value_set_boxed (value, priv->secondaries); + g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->secondaries)); break; case PROP_GATEWAY_PING_TIMEOUT: g_value_set_uint (value, priv->gateway_ping_timeout); @@ -1289,7 +1294,7 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class) g_object_class_install_property (object_class, PROP_PERMISSIONS, g_param_spec_boxed (NM_SETTING_CONNECTION_PERMISSIONS, "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); @@ -1403,7 +1408,7 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class) g_object_class_install_property (object_class, PROP_SECONDARIES, g_param_spec_boxed (NM_SETTING_CONNECTION_SECONDARIES, "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_STATIC_STRINGS)); diff --git a/libnm-core/nm-setting-ip4-config.c b/libnm-core/nm-setting-ip4-config.c index 62fcff750c..1228778cbc 100644 --- a/libnm-core/nm-setting-ip4-config.c +++ b/libnm-core/nm-setting-ip4-config.c @@ -30,7 +30,7 @@ #include "nm-glib-compat.h" #include "nm-setting-private.h" #include "nm-core-internal.h" - +#include "nm-utils-private.h" /** * SECTION:nm-setting-ip4-config @@ -459,7 +459,7 @@ gboolean nm_setting_ip4_config_add_address (NMSettingIP4Config *setting, NMIP4Address *address) { - return _nm_setting_ip4_config_add_address_with_label (setting, address, NULL); + return _nm_setting_ip4_config_add_address_with_label (setting, address, ""); } gboolean @@ -473,6 +473,7 @@ _nm_setting_ip4_config_add_address_with_label (NMSettingIP4Config *setting, g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), FALSE); g_return_val_if_fail (address != NULL, FALSE); + g_return_val_if_fail (label != NULL, FALSE); priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting); for (iter = priv->addresses; iter; iter = g_slist_next (iter)) { @@ -510,8 +511,7 @@ nm_setting_ip4_config_remove_address (NMSettingIP4Config *setting, guint32 i) nm_ip4_address_unref ((NMIP4Address *) addr->data); priv->addresses = g_slist_delete_link (priv->addresses, addr); - if (label->data) - g_free (label->data); + g_free (label->data); priv->address_labels = g_slist_delete_link (priv->address_labels, label); g_object_notify (G_OBJECT (setting), NM_SETTING_IP4_CONFIG_ADDRESSES); @@ -840,6 +840,9 @@ verify_label (const char *label) const char *p; char *iface; + if (!*label) + return TRUE; + p = strchr (label, ':'); if (!p) return FALSE; @@ -976,7 +979,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) return FALSE; } - if (label && !verify_label (label)) { + if (!verify_label (label)) { g_set_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY, @@ -1078,7 +1081,7 @@ set_property (GObject *object, guint prop_id, break; case PROP_DNS_SEARCH: g_slist_free_full (priv->dns_search, g_free); - priv->dns_search = g_value_dup_boxed (value); + priv->dns_search = _nm_utils_strv_to_slist (g_value_get_boxed (value)); break; case PROP_ADDRESSES: g_slist_free_full (priv->addresses, (GDestroyNotify) nm_ip4_address_unref); @@ -1088,19 +1091,12 @@ set_property (GObject *object, guint prop_id, g_slist_free_full (priv->address_labels, g_free); priv->address_labels = NULL; for (iter = priv->addresses; iter; iter = iter->next) - priv->address_labels = g_slist_prepend (priv->address_labels, NULL); + priv->address_labels = g_slist_prepend (priv->address_labels, g_strdup ("")); } break; case PROP_ADDRESS_LABELS: g_slist_free_full (priv->address_labels, g_free); - priv->address_labels = g_value_dup_boxed (value); - /* NULLs get converted to "" when this is sent over D-Bus. */ - for (iter = priv->address_labels; iter; iter = iter->next) { - if (!g_strcmp0 (iter->data, "")) { - g_free (iter->data); - iter->data = NULL; - } - } + priv->address_labels = _nm_utils_strv_to_slist (g_value_get_boxed (value)); break; case PROP_ROUTES: g_slist_free_full (priv->routes, (GDestroyNotify) nm_ip4_route_unref); @@ -1150,13 +1146,13 @@ get_property (GObject *object, guint prop_id, g_value_set_boxed (value, priv->dns); break; case PROP_DNS_SEARCH: - g_value_set_boxed (value, priv->dns_search); + g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->dns_search)); break; case PROP_ADDRESSES: nm_utils_ip4_addresses_to_gvalue (priv->addresses, value); break; case PROP_ADDRESS_LABELS: - g_value_set_boxed (value, priv->address_labels); + g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->address_labels)); break; case PROP_ROUTES: nm_utils_ip4_routes_to_gvalue (priv->routes, value); @@ -1256,7 +1252,7 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class) g_object_class_install_property (object_class, PROP_DNS_SEARCH, g_param_spec_boxed (NM_SETTING_IP4_CONFIG_DNS_SEARCH, "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); @@ -1288,7 +1284,7 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class) g_object_class_install_property (object_class, PROP_ADDRESS_LABELS, g_param_spec_boxed ("address-labels", "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS)); diff --git a/libnm-core/nm-setting-ip6-config.c b/libnm-core/nm-setting-ip6-config.c index 46cc538fba..a17e3620c3 100644 --- a/libnm-core/nm-setting-ip6-config.c +++ b/libnm-core/nm-setting-ip6-config.c @@ -25,6 +25,7 @@ #include "nm-setting-ip6-config.h" #include "nm-utils.h" +#include "nm-utils-private.h" #include "nm-dbus-glib-types.h" #include "nm-glib-compat.h" #include "nm-setting-private.h" @@ -902,7 +903,7 @@ set_property (GObject *object, guint prop_id, break; case PROP_DNS_SEARCH: g_slist_free_full (priv->dns_search, g_free); - priv->dns_search = g_value_dup_boxed (value); + priv->dns_search = _nm_utils_strv_to_slist (g_value_get_boxed (value)); break; case PROP_ADDRESSES: g_slist_free_full (priv->addresses, g_free); @@ -951,7 +952,7 @@ get_property (GObject *object, guint prop_id, nm_utils_ip6_dns_to_gvalue (priv->dns, value); break; case PROP_DNS_SEARCH: - g_value_set_boxed (value, priv->dns_search); + g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->dns_search)); break; case PROP_ADDRESSES: nm_utils_ip6_addresses_to_gvalue (priv->addresses, value); @@ -1063,7 +1064,7 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class) g_object_class_install_property (object_class, PROP_DNS_SEARCH, g_param_spec_boxed (NM_SETTING_IP6_CONFIG_DNS_SEARCH, "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); diff --git a/libnm-core/nm-setting-vlan.c b/libnm-core/nm-setting-vlan.c index e27ffcda15..f1781027d0 100644 --- a/libnm-core/nm-setting-vlan.c +++ b/libnm-core/nm-setting-vlan.c @@ -21,12 +21,10 @@ #include <stdlib.h> #include <string.h> -#include <dbus/dbus-glib.h> #include <glib/gi18n.h> #include "nm-setting-vlan.h" #include "nm-utils.h" -#include "nm-dbus-glib-types.h" #include "nm-setting-connection.h" #include "nm-setting-private.h" @@ -574,14 +572,15 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) } static GSList * -priority_stringlist_to_maplist (NMVlanPriorityMap map, GSList *strlist) +priority_strv_to_maplist (NMVlanPriorityMap map, char **strv) { - GSList *list = NULL, *iter; + GSList *list = NULL; + int i; - for (iter = strlist; iter; iter = g_slist_next (iter)) { + for (i = 0; strv[i]; i++) { PriorityMap *item; - item = priority_map_new_from_str (map, (const char *) iter->data); + item = priority_map_new_from_str (map, strv[i]); if (item) list = g_slist_prepend (list, item); } @@ -609,12 +608,12 @@ set_property (GObject *object, guint prop_id, case PROP_INGRESS_PRIORITY_MAP: g_slist_free_full (priv->ingress_priority_map, g_free); priv->ingress_priority_map = - priority_stringlist_to_maplist (NM_VLAN_INGRESS_MAP, g_value_get_boxed (value)); + priority_strv_to_maplist (NM_VLAN_INGRESS_MAP, g_value_get_boxed (value)); break; case PROP_EGRESS_PRIORITY_MAP: g_slist_free_full (priv->egress_priority_map, g_free); priv->egress_priority_map = - priority_stringlist_to_maplist (NM_VLAN_EGRESS_MAP, g_value_get_boxed (value)); + priority_strv_to_maplist (NM_VLAN_EGRESS_MAP, g_value_get_boxed (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -622,17 +621,22 @@ set_property (GObject *object, guint prop_id, } } -static GSList * -priority_maplist_to_stringlist (GSList *list) +static char ** +priority_maplist_to_strv (GSList *list) { - GSList *strlist = NULL, *iter; + GSList *iter; + GPtrArray *strv; + + strv = g_ptr_array_new (); for (iter = list; iter; iter = g_slist_next (iter)) { PriorityMap *item = iter->data; - strlist = g_slist_prepend (strlist, g_strdup_printf ("%d:%d", item->from, item->to)); + g_ptr_array_add (strv, g_strdup_printf ("%d:%d", item->from, item->to)); } - return g_slist_reverse (strlist); + g_ptr_array_add (strv, NULL); + + return (char **) g_ptr_array_free (strv, FALSE); } static void @@ -653,10 +657,10 @@ get_property (GObject *object, guint prop_id, g_value_set_uint (value, priv->flags); break; case PROP_INGRESS_PRIORITY_MAP: - g_value_take_boxed (value, priority_maplist_to_stringlist (priv->ingress_priority_map)); + g_value_take_boxed (value, priority_maplist_to_strv (priv->ingress_priority_map)); break; case PROP_EGRESS_PRIORITY_MAP: - g_value_take_boxed (value, priority_maplist_to_stringlist (priv->egress_priority_map)); + g_value_take_boxed (value, priority_maplist_to_strv (priv->egress_priority_map)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -753,7 +757,7 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class) g_object_class_install_property (object_class, PROP_INGRESS_PRIORITY_MAP, g_param_spec_boxed (NM_SETTING_VLAN_INGRESS_PRIORITY_MAP, "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS)); @@ -768,7 +772,7 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class) g_object_class_install_property (object_class, PROP_EGRESS_PRIORITY_MAP, g_param_spec_boxed (NM_SETTING_VLAN_EGRESS_PRIORITY_MAP, "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS)); diff --git a/libnm-core/nm-setting-wired.c b/libnm-core/nm-setting-wired.c index 683180937c..e115da69db 100644 --- a/libnm-core/nm-setting-wired.c +++ b/libnm-core/nm-setting-wired.c @@ -72,7 +72,7 @@ typedef struct { char *cloned_mac_address; GSList *mac_address_blacklist; guint32 mtu; - GPtrArray *s390_subchannels; + char **s390_subchannels; char *s390_nettype; GHashTable *s390_options; } NMSettingWiredPrivate; @@ -380,15 +380,15 @@ nm_setting_wired_get_mtu (NMSettingWired *setting) * connection is applicable to. The connection should only be used in * conjunction with that device. * - * Returns: (element-type utf8): #GPtrArray of strings, each specifying one - * subchannel the s390 device uses to communicate to the host. + * Returns: (transfer none) (element-type utf8): array of strings, each specifying + * one subchannel the s390 device uses to communicate to the host. **/ -const GPtrArray * +const char * const * nm_setting_wired_get_s390_subchannels (NMSettingWired *setting) { g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL); - return NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_subchannels; + return (const char * const *) NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_subchannels; } /** @@ -628,14 +628,17 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) } } - if ( priv->s390_subchannels - && !(priv->s390_subchannels->len == 3 || priv->s390_subchannels->len == 2)) { - g_set_error_literal (error, - NM_SETTING_WIRED_ERROR, - NM_SETTING_WIRED_ERROR_INVALID_PROPERTY, - _("property is invalid")); - g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_S390_SUBCHANNELS); - return FALSE; + if (priv->s390_subchannels) { + int len = g_strv_length (priv->s390_subchannels); + + if (len != 2 && len != 3) { + g_set_error_literal (error, + NM_SETTING_WIRED_ERROR, + NM_SETTING_WIRED_ERROR_INVALID_PROPERTY, + _("property is invalid")); + g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_S390_SUBCHANNELS); + return FALSE; + } } if (priv->s390_nettype && !_nm_utils_string_in_list (priv->s390_nettype, valid_nettype)) { @@ -697,10 +700,8 @@ finalize (GObject *object) g_free (priv->cloned_mac_address); g_slist_free_full (priv->mac_address_blacklist, g_free); - if (priv->s390_subchannels) { - g_ptr_array_set_free_func (priv->s390_subchannels, g_free); - g_ptr_array_free (priv->s390_subchannels, TRUE); - } + if (priv->s390_subchannels) + g_strfreev (priv->s390_subchannels); G_OBJECT_CLASS (nm_setting_wired_parent_class)->finalize (object); } @@ -743,16 +744,14 @@ set_property (GObject *object, guint prop_id, break; case PROP_MAC_ADDRESS_BLACKLIST: g_slist_free_full (priv->mac_address_blacklist, g_free); - priv->mac_address_blacklist = g_value_dup_boxed (value); + priv->mac_address_blacklist = _nm_utils_strv_to_slist (g_value_get_boxed (value)); break; case PROP_MTU: priv->mtu = g_value_get_uint (value); break; case PROP_S390_SUBCHANNELS: - if (priv->s390_subchannels) { - g_ptr_array_set_free_func (priv->s390_subchannels, g_free); - g_ptr_array_free (priv->s390_subchannels, TRUE); - } + if (priv->s390_subchannels) + g_strfreev (priv->s390_subchannels); priv->s390_subchannels = g_value_dup_boxed (value); break; case PROP_S390_NETTYPE: @@ -799,13 +798,13 @@ 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_set_boxed (value, nm_setting_wired_get_mac_address_blacklist (setting)); + g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->mac_address_blacklist)); break; case PROP_MTU: g_value_set_uint (value, nm_setting_wired_get_mtu (setting)); break; case PROP_S390_SUBCHANNELS: - g_value_set_boxed (value, nm_setting_wired_get_s390_subchannels (setting)); + g_value_set_boxed (value, priv->s390_subchannels); break; case PROP_S390_NETTYPE: g_value_set_string (value, nm_setting_wired_get_s390_nettype (setting)); @@ -939,7 +938,7 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class) g_object_class_install_property (object_class, PROP_MAC_ADDRESS_BLACKLIST, g_param_spec_boxed (NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_STATIC_STRINGS)); @@ -973,7 +972,7 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class) g_object_class_install_property (object_class, PROP_S390_SUBCHANNELS, g_param_spec_boxed (NM_SETTING_WIRED_S390_SUBCHANNELS, "", "", - DBUS_TYPE_G_ARRAY_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS)); diff --git a/libnm-core/nm-setting-wired.h b/libnm-core/nm-setting-wired.h index b395f2e3be..73a25230c1 100644 --- a/libnm-core/nm-setting-wired.h +++ b/libnm-core/nm-setting-wired.h @@ -103,7 +103,7 @@ void nm_setting_wired_clear_mac_blacklist_items (NMSettingWired * guint32 nm_setting_wired_get_mtu (NMSettingWired *setting); -const GPtrArray * nm_setting_wired_get_s390_subchannels (NMSettingWired *setting); +const char * const *nm_setting_wired_get_s390_subchannels (NMSettingWired *setting); const char * nm_setting_wired_get_s390_nettype (NMSettingWired *setting); guint32 nm_setting_wired_get_num_s390_options (NMSettingWired *setting); diff --git a/libnm-core/nm-setting-wireless-security.c b/libnm-core/nm-setting-wireless-security.c index 8ea4971509..c84d123b2d 100644 --- a/libnm-core/nm-setting-wireless-security.c +++ b/libnm-core/nm-setting-wireless-security.c @@ -22,13 +22,11 @@ #include <config.h> #include <string.h> -#include <dbus/dbus-glib.h> #include <glib/gi18n.h> #include "nm-setting-wireless-security.h" #include "nm-setting-8021x.h" #include "nm-utils.h" -#include "nm-dbus-glib-types.h" #include "nm-utils-private.h" #include "nm-setting-private.h" @@ -1191,15 +1189,15 @@ set_property (GObject *object, guint prop_id, break; case PROP_PROTO: g_slist_free_full (priv->proto, g_free); - priv->proto = g_value_dup_boxed (value); + priv->proto = _nm_utils_strv_to_slist (g_value_get_boxed (value)); break; case PROP_PAIRWISE: g_slist_free_full (priv->pairwise, g_free); - priv->pairwise = g_value_dup_boxed (value); + priv->pairwise = _nm_utils_strv_to_slist (g_value_get_boxed (value)); break; case PROP_GROUP: g_slist_free_full (priv->group, g_free); - priv->group = g_value_dup_boxed (value); + priv->group = _nm_utils_strv_to_slist (g_value_get_boxed (value)); break; case PROP_LEAP_USERNAME: g_free (priv->leap_username); @@ -1265,13 +1263,13 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, priv->auth_alg); break; case PROP_PROTO: - g_value_set_boxed (value, priv->proto); + g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->proto)); break; case PROP_PAIRWISE: - g_value_set_boxed (value, priv->pairwise); + g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->pairwise)); break; case PROP_GROUP: - g_value_set_boxed (value, priv->group); + g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->group)); break; case PROP_LEAP_USERNAME: g_value_set_string (value, priv->leap_username); @@ -1389,7 +1387,7 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting g_object_class_install_property (object_class, PROP_PROTO, g_param_spec_boxed (NM_SETTING_WIRELESS_SECURITY_PROTO, "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); @@ -1404,7 +1402,7 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting g_object_class_install_property (object_class, PROP_PAIRWISE, g_param_spec_boxed (NM_SETTING_WIRELESS_SECURITY_PAIRWISE, "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); @@ -1419,7 +1417,7 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting g_object_class_install_property (object_class, PROP_GROUP, g_param_spec_boxed (NM_SETTING_WIRELESS_SECURITY_GROUP, "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); diff --git a/libnm-core/nm-setting-wireless.c b/libnm-core/nm-setting-wireless.c index d3a35af1b4..4d96c5137a 100644 --- a/libnm-core/nm-setting-wireless.c +++ b/libnm-core/nm-setting-wireless.c @@ -898,14 +898,14 @@ set_property (GObject *object, guint prop_id, break; case PROP_MAC_ADDRESS_BLACKLIST: g_slist_free_full (priv->mac_address_blacklist, g_free); - priv->mac_address_blacklist = g_value_dup_boxed (value); + priv->mac_address_blacklist = _nm_utils_strv_to_slist (g_value_get_boxed (value)); break; case PROP_MTU: priv->mtu = g_value_get_uint (value); break; case PROP_SEEN_BSSIDS: g_slist_free_full (priv->seen_bssids, g_free); - priv->seen_bssids = g_value_dup_boxed (value); + priv->seen_bssids = _nm_utils_strv_to_slist (g_value_get_boxed (value)); break; case PROP_HIDDEN: priv->hidden = g_value_get_boolean (value); @@ -921,6 +921,7 @@ get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { NMSettingWireless *setting = NM_SETTING_WIRELESS (object); + NMSettingWirelessPrivate *priv = NM_SETTING_WIRELESS_GET_PRIVATE (object); switch (prop_id) { case PROP_SSID: @@ -951,13 +952,13 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, nm_setting_wireless_get_cloned_mac_address (setting)); break; case PROP_MAC_ADDRESS_BLACKLIST: - g_value_set_boxed (value, nm_setting_wireless_get_mac_address_blacklist (setting)); + g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->mac_address_blacklist)); break; case PROP_MTU: g_value_set_uint (value, nm_setting_wireless_get_mtu (setting)); break; case PROP_SEEN_BSSIDS: - g_value_set_boxed (value, NM_SETTING_WIRELESS_GET_PRIVATE (setting)->seen_bssids); + g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->seen_bssids)); break; case PROP_HIDDEN: g_value_set_boolean (value, nm_setting_wireless_get_hidden (setting)); @@ -1138,7 +1139,7 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class) g_object_class_install_property (object_class, PROP_MAC_ADDRESS_BLACKLIST, g_param_spec_boxed (NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_STATIC_STRINGS)); @@ -1156,7 +1157,7 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class) g_object_class_install_property (object_class, PROP_SEEN_BSSIDS, g_param_spec_boxed (NM_SETTING_WIRELESS_SEEN_BSSIDS, "", "", - DBUS_TYPE_G_LIST_OF_STRING, + G_TYPE_STRV, G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_STATIC_STRINGS)); diff --git a/libnm-core/nm-utils-private.h b/libnm-core/nm-utils-private.h index 580ced77f3..b4ddf6e8a0 100644 --- a/libnm-core/nm-utils-private.h +++ b/libnm-core/nm-utils-private.h @@ -39,4 +39,7 @@ void _nm_utils_hwaddr_to_dbus (const GValue *prop_value, void _nm_utils_hwaddr_from_dbus (const GValue *dbus_value, GValue *prop_value); +GSList * _nm_utils_strv_to_slist (char **strv); +char ** _nm_utils_slist_to_strv (GSList *slist); + #endif diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c index 7bc1aad9c6..9945a79210 100644 --- a/libnm-core/nm-utils.c +++ b/libnm-core/nm-utils.c @@ -564,6 +564,37 @@ _nm_utils_hash_values_to_slist (GHashTable *hash) return list; } +GSList * +_nm_utils_strv_to_slist (char **strv) +{ + int i; + GSList *list = NULL; + + g_return_val_if_fail (strv != NULL, NULL); + + for (i = 0; strv[i]; i++) + list = g_slist_prepend (list, g_strdup (strv[i])); + + return g_slist_reverse (list); +} + +char ** +_nm_utils_slist_to_strv (GSList *slist) +{ + GSList *iter; + char **strv; + int len, i = 0; + + len = g_slist_length (slist); + strv = g_new (char *, len + 1); + + for (i = 0, iter = slist; iter; iter = iter->next, i++) + strv[i] = g_strdup (iter->data); + strv[i] = NULL; + + return strv; +} + static gboolean device_supports_ap_ciphers (guint32 dev_caps, guint32 ap_flags, diff --git a/libnm-core/nm-value-transforms.c b/libnm-core/nm-value-transforms.c index 00e7e77579..2631a9d651 100644 --- a/libnm-core/nm-value-transforms.c +++ b/libnm-core/nm-value-transforms.c @@ -37,80 +37,6 @@ _nm_utils_convert_op_to_string (const GValue *src_value, GValue *dest_value) } static void -_nm_utils_convert_strv_to_slist (const GValue *src_value, GValue *dest_value) -{ - char **str; - GSList *list = NULL; - guint i = 0; - - g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), G_TYPE_STRV)); - - str = (char **) g_value_get_boxed (src_value); - - while (str && str[i]) - list = g_slist_prepend (list, g_strdup (str[i++])); - - g_value_take_boxed (dest_value, g_slist_reverse (list)); -} - -static void -_nm_utils_convert_slist_to_strv (const GValue *src_value, GValue *dest_value) -{ - GSList *slist; - char **strv; - int len, i = 0; - - slist = g_value_get_boxed (src_value); - len = g_slist_length (slist); - - strv = g_new (char *, len + 1); - for (i = 0; slist; slist = slist->next, i++) - strv[i] = g_strdup (slist->data); - strv[i] = NULL; - - g_value_take_boxed (dest_value, strv); -} - -static void -_nm_utils_convert_strv_to_ptrarray (const GValue *src_value, GValue *dest_value) -{ - char **str; - GPtrArray *array = NULL; - guint i = 0; - - g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), G_TYPE_STRV)); - - str = (char **) g_value_get_boxed (src_value); - - array = g_ptr_array_sized_new (3); - while (str && str[i]) - g_ptr_array_add (array, g_strdup (str[i++])); - - g_value_take_boxed (dest_value, array); -} - -static void -_nm_utils_convert_string_list_to_string (const GValue *src_value, GValue *dest_value) -{ - GSList *strings; - GString *printable; - GSList *iter; - - g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_LIST_OF_STRING)); - - strings = (GSList *) g_value_get_boxed (src_value); - - printable = g_string_new (NULL); - for (iter = strings; iter; iter = iter->next) { - if (iter != strings) - g_string_append_c (printable, ','); - g_string_append (printable, iter->data ? iter->data : "(null)"); - } - - g_value_take_string (dest_value, g_string_free (printable, FALSE)); -} - -static void _string_array_to_string (const GPtrArray *strings, GValue *dest_value) { GString *printable; @@ -127,17 +53,6 @@ _string_array_to_string (const GPtrArray *strings, GValue *dest_value) } static void -_nm_utils_convert_string_array_to_string (const GValue *src_value, GValue *dest_value) -{ - const GPtrArray *strings; - - g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_ARRAY_OF_STRING)); - - strings = (const GPtrArray *) g_value_get_boxed (src_value); - _string_array_to_string (strings, dest_value); -} - -static void _nm_utils_convert_op_array_to_string (const GValue *src_value, GValue *dest_value) { const GPtrArray *strings; @@ -543,21 +458,6 @@ _nm_value_transforms_register (void) g_value_register_transform_func (DBUS_TYPE_G_OBJECT_PATH, G_TYPE_STRING, _nm_utils_convert_op_to_string); - g_value_register_transform_func (G_TYPE_STRV, - DBUS_TYPE_G_LIST_OF_STRING, - _nm_utils_convert_strv_to_slist); - g_value_register_transform_func (DBUS_TYPE_G_LIST_OF_STRING, - G_TYPE_STRV, - _nm_utils_convert_slist_to_strv); - g_value_register_transform_func (G_TYPE_STRV, - DBUS_TYPE_G_ARRAY_OF_STRING, - _nm_utils_convert_strv_to_ptrarray); - g_value_register_transform_func (DBUS_TYPE_G_LIST_OF_STRING, - G_TYPE_STRING, - _nm_utils_convert_string_list_to_string); - g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_STRING, - G_TYPE_STRING, - _nm_utils_convert_string_array_to_string); g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, G_TYPE_STRING, _nm_utils_convert_op_array_to_string); diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c index 122d12afaa..a5f8ee6f97 100644 --- a/libnm-core/tests/test-general.c +++ b/libnm-core/tests/test-general.c @@ -312,7 +312,7 @@ test_setting_ip4_config_labels (void) NMIP4Address *addr; const char *label; GPtrArray *addrs; - GSList *labels; + char **labels; GError *error = NULL; s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new (); @@ -331,7 +331,7 @@ test_setting_ip4_config_labels (void) g_assert_no_error (error); label = _nm_setting_ip4_config_get_address_label (s_ip4, 0); - g_assert_cmpstr (label, ==, NULL); + g_assert_cmpstr (label, ==, ""); /* addr 2 */ addr = nm_ip4_address_new (); @@ -351,13 +351,13 @@ test_setting_ip4_config_labels (void) nm_ip4_address_set_address (addr, 0x03030303); nm_ip4_address_set_prefix (addr, 24); - _nm_setting_ip4_config_add_address_with_label (s_ip4, addr, NULL); + _nm_setting_ip4_config_add_address_with_label (s_ip4, addr, ""); nm_ip4_address_unref (addr); nm_setting_verify (NM_SETTING (s_ip4), NULL, &error); g_assert_no_error (error); label = _nm_setting_ip4_config_get_address_label (s_ip4, 2); - g_assert_cmpstr (label, ==, NULL); + g_assert_cmpstr (label, ==, ""); /* Remove addr 1 and re-verify remaining addresses */ nm_setting_ip4_config_remove_address (s_ip4, 0); @@ -372,7 +372,7 @@ test_setting_ip4_config_labels (void) addr = nm_setting_ip4_config_get_address (s_ip4, 1); g_assert_cmpint (nm_ip4_address_get_address (addr), ==, 0x03030303); label = _nm_setting_ip4_config_get_address_label (s_ip4, 1); - g_assert_cmpstr (label, ==, NULL); + g_assert_cmpstr (label, ==, ""); /* Test explicit property assignment */ @@ -396,18 +396,18 @@ test_setting_ip4_config_labels (void) addr = nm_setting_ip4_config_get_address (s_ip4, 0); g_assert_cmpint (nm_ip4_address_get_address (addr), ==, 0x02020202); label = _nm_setting_ip4_config_get_address_label (s_ip4, 0); - g_assert_cmpstr (label, ==, NULL); + g_assert_cmpstr (label, ==, ""); addr = nm_setting_ip4_config_get_address (s_ip4, 1); g_assert_cmpint (nm_ip4_address_get_address (addr), ==, 0x03030303); label = _nm_setting_ip4_config_get_address_label (s_ip4, 1); - g_assert_cmpstr (label, ==, NULL); + g_assert_cmpstr (label, ==, ""); /* Setting labels now will leave addresses untouched */ g_object_set (G_OBJECT (s_ip4), "address-labels", labels, NULL); - g_boxed_free (DBUS_TYPE_G_LIST_OF_STRING, labels); + g_strfreev (labels); nm_setting_verify (NM_SETTING (s_ip4), NULL, &error); g_assert_no_error (error); g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 2); @@ -420,38 +420,40 @@ test_setting_ip4_config_labels (void) addr = nm_setting_ip4_config_get_address (s_ip4, 1); g_assert_cmpint (nm_ip4_address_get_address (addr), ==, 0x03030303); label = _nm_setting_ip4_config_get_address_label (s_ip4, 1); - g_assert_cmpstr (label, ==, NULL); + g_assert_cmpstr (label, ==, ""); /* Setting labels to a value that's too short or too long will result in * the setting not verifying. */ - labels = g_slist_append (NULL, "eth0:2"); + labels = g_strsplit ("eth0:2", ",", -1); g_object_set (G_OBJECT (s_ip4), "address-labels", labels, NULL); + g_strfreev (labels); nm_setting_verify (NM_SETTING (s_ip4), NULL, &error); g_assert_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY); g_assert (g_str_has_prefix (error->message, "ipv4.address-labels:")); g_clear_error (&error); - labels = g_slist_append (labels, "eth0:3"); + labels = g_strsplit ("eth0:2,eth0:3", ",", -1); g_object_set (G_OBJECT (s_ip4), "address-labels", labels, NULL); + g_strfreev (labels); nm_setting_verify (NM_SETTING (s_ip4), NULL, &error); g_assert_no_error (error); - labels = g_slist_append (labels, "eth0:4"); + labels = g_strsplit ("eth0:2,eth0:3,eth0:4", ",", -1); g_object_set (G_OBJECT (s_ip4), "address-labels", labels, NULL); + g_strfreev (labels); nm_setting_verify (NM_SETTING (s_ip4), NULL, &error); g_assert_error (error, NM_SETTING_IP4_CONFIG_ERROR, NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY); g_assert (g_str_has_prefix (error->message, "ipv4.address-labels:")); g_clear_error (&error); - g_object_unref (s_ip4); } @@ -1226,7 +1228,7 @@ test_setting_connection_permissions_helpers (void) NMSettingConnection *s_con; gboolean success; char buf[9] = { 0x61, 0x62, 0x63, 0xff, 0xfe, 0xfd, 0x23, 0x01, 0x00 }; - GSList *list = NULL; + char **perms; const char *expected_perm = "user:" TEST_UNAME ":"; s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ()); @@ -1295,14 +1297,14 @@ test_setting_connection_permissions_helpers (void) check_permission (s_con, 0, TEST_UNAME, "setting-connection-permissions-helpers"); /* Check the actual GObject property just to be paranoid */ - g_object_get (G_OBJECT (s_con), NM_SETTING_CONNECTION_PERMISSIONS, &list, NULL); - ASSERT (list != NULL, - "setting-connection-permissions-helpers", "unexpected failure getting permissions list"); - ASSERT (g_slist_length (list) == 1, - "setting-connection-permissions-helpers", "unexpected failure getting number of permissions in list"); - ASSERT (strcmp (list->data, expected_perm) == 0, + g_object_get (G_OBJECT (s_con), NM_SETTING_CONNECTION_PERMISSIONS, &perms, NULL); + ASSERT (perms != NULL, + "setting-connection-permissions-helpers", "unexpected failure getting permissions"); + ASSERT (g_strv_length (perms) == 1, + "setting-connection-permissions-helpers", "unexpected failure getting number of permissions"); + ASSERT (strcmp (perms[0], expected_perm) == 0, "setting-connection-permissions-helpers", "unexpected permission property data"); - g_slist_free_full (list, g_free); + g_strfreev (perms); /* Now remove that permission and ensure we have 0 permissions */ nm_setting_connection_remove_permission (s_con, 0); @@ -1320,7 +1322,7 @@ add_permission_property (NMSettingConnection *s_con, const char *detail) { GString *str; - GSList *list = NULL; + char *perms[2]; str = g_string_sized_new (50); if (ptype) @@ -1339,11 +1341,11 @@ add_permission_property (NMSettingConnection *s_con, if (detail) g_string_append (str, detail); - list = g_slist_append (list, str->str); - g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_PERMISSIONS, list, NULL); + perms[0] = str->str; + perms[1] = NULL; + g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_PERMISSIONS, perms, NULL); g_string_free (str, TRUE); - g_slist_free (list); } static void diff --git a/src/devices/nm-device-ethernet.c b/src/devices/nm-device-ethernet.c index 9ce629e81c..d657c07480 100644 --- a/src/devices/nm-device-ethernet.c +++ b/src/devices/nm-device-ethernet.c @@ -409,7 +409,7 @@ static gboolean match_subchans (NMDeviceEthernet *self, NMSettingWired *s_wired, gboolean *try_mac) { NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self); - const GPtrArray *subchans; + const char * const *subchans; int i; *try_mac = TRUE; @@ -423,8 +423,8 @@ match_subchans (NMDeviceEthernet *self, NMSettingWired *s_wired, gboolean *try_m return FALSE; /* Make sure each subchannel in the connection is a subchannel of this device */ - for (i = 0; i < subchans->len; i++) { - const char *candidate = g_ptr_array_index (subchans, i); + for (i = 0; subchans[i]; i++) { + const char *candidate = subchans[i]; if ( (priv->subchan1 && !strcmp (priv->subchan1, candidate)) || (priv->subchan2 && !strcmp (priv->subchan2, candidate)) diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c index e1395ed31c..beb4b92815 100644 --- a/src/nm-ip4-config.c +++ b/src/nm-ip4-config.c @@ -337,8 +337,7 @@ nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIP4Config *setting, i address.lifetime = NM_PLATFORM_LIFETIME_PERMANENT; address.preferred = NM_PLATFORM_LIFETIME_PERMANENT; address.source = NM_PLATFORM_SOURCE_USER; - if (label) - g_strlcpy (address.label, label, sizeof (address.label)); + g_strlcpy (address.label, label, sizeof (address.label)); nm_ip4_config_add_address (config, &address); } @@ -425,10 +424,7 @@ nm_ip4_config_create_setting (const NMIP4Config *config) if (same_prefix (address->address, gateway, address->plen)) nm_ip4_address_set_gateway (s_addr, gateway); - if (*address->label) - _nm_setting_ip4_config_add_address_with_label (s_ip4, s_addr, address->label); - else - nm_setting_ip4_config_add_address (s_ip4, s_addr); + _nm_setting_ip4_config_add_address_with_label (s_ip4, s_addr, address->label); nm_ip4_address_unref (s_addr); } diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c index d22cdd493a..9e9f56b28d 100644 --- a/src/settings/nm-settings-connection.c +++ b/src/settings/nm-settings-connection.c @@ -1138,7 +1138,7 @@ get_settings_auth_cb (NMSettingsConnection *self, NMSettingConnection *s_con; NMSettingWireless *s_wifi; guint64 timestamp = 0; - GSList *bssid_list; + char **bssids; dupl_con = nm_simple_connection_new_clone (NM_CONNECTION (self)); g_assert (dupl_con); @@ -1159,11 +1159,11 @@ get_settings_auth_cb (NMSettingsConnection *self, * from the same reason as timestamp. Thus we put it here to GetSettings() * return settings too. */ - bssid_list = nm_settings_connection_get_seen_bssids (self); + bssids = nm_settings_connection_get_seen_bssids (self); s_wifi = nm_connection_get_setting_wireless (NM_CONNECTION (dupl_con)); - if (bssid_list && s_wifi) - g_object_set (s_wifi, NM_SETTING_WIRELESS_SEEN_BSSIDS, bssid_list, NULL); - g_slist_free (bssid_list); + if (bssids && bssids[0] && s_wifi) + g_object_set (s_wifi, NM_SETTING_WIRELESS_SEEN_BSSIDS, bssids, NULL); + g_free (bssids); /* Secrets should *never* be returned by the GetSettings method, they * get returned by the GetSecrets method which can be better @@ -1712,12 +1712,25 @@ nm_settings_connection_read_and_fill_timestamp (NMSettingsConnection *connection * Returns: (transfer container) list of seen BSSIDs (in the standard hex-digits-and-colons notation). * The caller is responsible for freeing the list, but not the content. **/ -GSList * +char ** nm_settings_connection_get_seen_bssids (NMSettingsConnection *connection) { + NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (connection); + GHashTableIter iter; + char **bssids, *bssid; + int i; + g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (connection), NULL); - return _nm_utils_hash_values_to_slist (NM_SETTINGS_CONNECTION_GET_PRIVATE (connection)->seen_bssids); + bssids = g_new (char *, g_hash_table_size (priv->seen_bssids) + 1); + + i = 0; + g_hash_table_iter_init (&iter, priv->seen_bssids); + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &bssid)) + bssids[i++] = bssid; + bssids[i] = NULL; + + return bssids; } /** diff --git a/src/settings/nm-settings-connection.h b/src/settings/nm-settings-connection.h index 32a8128550..3ee62465fd 100644 --- a/src/settings/nm-settings-connection.h +++ b/src/settings/nm-settings-connection.h @@ -138,7 +138,7 @@ void nm_settings_connection_update_timestamp (NMSettingsConnection *connection, void nm_settings_connection_read_and_fill_timestamp (NMSettingsConnection *connection); -GSList *nm_settings_connection_get_seen_bssids (NMSettingsConnection *connection); +char **nm_settings_connection_get_seen_bssids (NMSettingsConnection *connection); gboolean nm_settings_connection_has_seen_bssid (NMSettingsConnection *connection, const char *bssid); diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c index 95ea7c2dea..bba4d1da04 100644 --- a/src/settings/plugins/ifcfg-rh/reader.c +++ b/src/settings/plugins/ifcfg-rh/reader.c @@ -2915,8 +2915,7 @@ read_8021x_list_value (shvarFile *ifcfg, const char *prop_name) { char *value; - char **strv, **iter; - GSList *gslist = NULL; + char **strv; g_return_if_fail (ifcfg != NULL); g_return_if_fail (ifcfg_var_name != NULL); @@ -2927,16 +2926,8 @@ read_8021x_list_value (shvarFile *ifcfg, return; strv = g_strsplit_set (value, " \t", 0); - for (iter = strv; iter && *iter; iter++) { - if (*iter[0] == '\0') - continue; - gslist = g_slist_prepend (gslist, *iter); - } - if (gslist) { - gslist = g_slist_reverse (gslist); - g_object_set (setting, prop_name, gslist, NULL); - g_slist_free (gslist); - } + if (strv && strv[0]) + g_object_set (setting, prop_name, strv, NULL); g_strfreev (strv); g_free (value); } @@ -3251,7 +3242,6 @@ make_wireless_setting (shvarFile *ifcfg, { NMSettingWireless *s_wireless; GByteArray *array = NULL; - GSList *macaddr_blacklist = NULL; char *value = NULL; s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ()); @@ -3272,25 +3262,12 @@ make_wireless_setting (shvarFile *ifcfg, value = svGetValue (ifcfg, "HWADDR_BLACKLIST", FALSE); if (value) { - char **list = NULL, **iter; + char **list; list = g_strsplit_set (value, " \t", 0); - for (iter = list; iter && *iter; iter++) { - if (**iter == '\0') - continue; - if (!nm_utils_hwaddr_valid (*iter, ETH_ALEN)) { - PARSE_WARNING ("invalid MAC in HWADDR_BLACKLIST '%s'", *iter); - continue; - } - macaddr_blacklist = g_slist_prepend (macaddr_blacklist, *iter); - } - if (macaddr_blacklist) { - macaddr_blacklist = g_slist_reverse (macaddr_blacklist); - g_object_set (s_wireless, NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, macaddr_blacklist, NULL); - g_slist_free (macaddr_blacklist); - } - g_free (value); + g_object_set (s_wireless, NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, list, NULL); g_strfreev (list); + g_free (value); } value = svGetValue (ifcfg, "ESSID", TRUE); @@ -3558,17 +3535,8 @@ make_wired_setting (shvarFile *ifcfg, if (num_chans < 2 || num_chans > 3) { PARSE_WARNING ("invalid SUBCHANNELS '%s' (%d channels, 2 or 3 expected)", value, g_strv_length (chans)); - } else { - GPtrArray *array = g_ptr_array_sized_new (num_chans); - - g_ptr_array_add (array, chans[0]); - g_ptr_array_add (array, chans[1]); - if (num_chans == 3) - g_ptr_array_add (array, chans[2]); - - g_object_set (s_wired, NM_SETTING_WIRED_S390_SUBCHANNELS, array, NULL); - g_ptr_array_free (array, TRUE); - } + } else + g_object_set (s_wired, NM_SETTING_WIRED_S390_SUBCHANNELS, chans, NULL); g_strfreev (chans); } g_free (value); diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c index d557ed9c7f..570d0c26fc 100644 --- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c +++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c @@ -2554,7 +2554,7 @@ test_read_wired_aliases_good (void) const char *expected_id = "System aliasem0"; int expected_num_addresses = 4, expected_prefix = 24; const char *expected_address[4] = { "192.168.1.5", "192.168.1.6", "192.168.1.9", "192.168.1.99" }; - const char *expected_label[4] = { NULL, "aliasem0:1", "aliasem0:2", "aliasem0:99" }; + const char *expected_label[4] = { "", "aliasem0:1", "aliasem0:2", "aliasem0:99" }; const char *expected_gateway[4] = { "192.168.1.1", "192.168.1.1", "192.168.1.1", "192.168.1.1" }; int i, j; @@ -2699,7 +2699,7 @@ test_read_wired_aliases_bad (const char *base, const char *expected_id) const char *tmp; int expected_num_addresses = 1, expected_prefix = 24; const char *expected_address = "192.168.1.5"; - const char *expected_label = NULL; + const char *expected_label = ""; const char *expected_gateway = "192.168.1.1"; NMIP4Address *ip4_addr; struct in_addr addr; @@ -5850,7 +5850,7 @@ test_read_wired_qeth_static (void) const char *expected_channel0 = "0.0.0600"; const char *expected_channel1 = "0.0.0601"; const char *expected_channel2 = "0.0.0602"; - const GPtrArray *subchannels; + const char * const *subchannels; connection = connection_from_file (TEST_IFCFG_WIRED_QETH_STATIC, NULL, @@ -5914,24 +5914,19 @@ test_read_wired_qeth_static (void) TEST_IFCFG_WIRED_QETH_STATIC, NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_S390_SUBCHANNELS); - ASSERT (subchannels->len == 3, + ASSERT (subchannels[0] && subchannels[1] && subchannels[2] && !subchannels[3], "wired-qeth-static-verify-wired", "failed to verify %s: invalid %s / %s key (not 3 elements)", TEST_IFCFG_WIRED_QETH_STATIC, NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_S390_SUBCHANNELS); - tmp = (const char *) g_ptr_array_index (subchannels, 0); - ASSERT (strcmp (tmp, expected_channel0) == 0, + ASSERT (strcmp (subchannels[0], expected_channel0) == 0, "wired-qeth-static-verify-wired", "failed to verify %s: unexpected subchannel #0", TEST_IFCFG_WIRED_QETH_STATIC); - - tmp = (const char *) g_ptr_array_index (subchannels, 1); - ASSERT (strcmp (tmp, expected_channel1) == 0, + ASSERT (strcmp (subchannels[1], expected_channel1) == 0, "wired-qeth-static-verify-wired", "failed to verify %s: unexpected subchannel #1", TEST_IFCFG_WIRED_QETH_STATIC); - - tmp = (const char *) g_ptr_array_index (subchannels, 2); - ASSERT (strcmp (tmp, expected_channel2) == 0, + ASSERT (strcmp (subchannels[2], expected_channel2) == 0, "wired-qeth-static-verify-wired", "failed to verify %s: unexpected subchannel #2", TEST_IFCFG_WIRED_QETH_STATIC); @@ -6022,7 +6017,7 @@ test_read_wired_ctc_static (void) const char *expected_id = "System test-wired-ctc-static"; const char *expected_channel0 = "0.0.1b00"; const char *expected_channel1 = "0.0.1b01"; - const GPtrArray *subchannels; + const char * const *subchannels; gboolean success; connection = connection_from_file (TEST_IFCFG_WIRED_CTC_STATIC, @@ -6056,10 +6051,10 @@ test_read_wired_ctc_static (void) /* Subchannels */ subchannels = nm_setting_wired_get_s390_subchannels (s_wired); g_assert (subchannels != NULL); - g_assert_cmpint (subchannels->len, ==, 2); + g_assert (subchannels[0] && subchannels[1] && !subchannels[2]); - g_assert_cmpstr (g_ptr_array_index (subchannels, 0), ==, expected_channel0); - g_assert_cmpstr (g_ptr_array_index (subchannels, 1), ==, expected_channel1); + g_assert_cmpstr (subchannels[0], ==, expected_channel0); + g_assert_cmpstr (subchannels[1], ==, expected_channel1); /* Nettype */ g_assert_cmpstr (nm_setting_wired_get_s390_nettype (s_wired), ==, "ctc"); @@ -7736,7 +7731,7 @@ test_write_wired_aliases (void) char *uuid; int num_addresses = 4; guint32 ip[] = { 0x01010101, 0x01010102, 0x01010103, 0x01010104 }; - const char *label[] = { NULL, "alias0:2", NULL, "alias0:3" }; + const char *label[] = { "", "alias0:2", "", "alias0:3" }; const guint32 gw = htonl (0x01010101); const guint32 prefix = 24; NMIP4Address *addr; @@ -10329,7 +10324,7 @@ test_write_wifi_wpa_then_wep_with_perms (void) char *route6file = NULL; gboolean ignore_error = FALSE; GByteArray *ssid; - GSList *perm_list = NULL; + char **perms; const unsigned char ssid_data[] = "SomeSSID"; /* Test that writing out a WPA config then changing that to a WEP @@ -10345,16 +10340,16 @@ test_write_wifi_wpa_then_wep_with_perms (void) nm_connection_add_setting (connection, NM_SETTING (s_con)); uuid = nm_utils_uuid_generate (); - perm_list = g_slist_append (perm_list, "user:superman:"); + perms = g_strsplit ("user:superman:", ",", -1); g_object_set (s_con, NM_SETTING_CONNECTION_ID, "random wifi connection 2", NM_SETTING_CONNECTION_UUID, uuid, NM_SETTING_CONNECTION_AUTOCONNECT, TRUE, - NM_SETTING_CONNECTION_PERMISSIONS, perm_list, + NM_SETTING_CONNECTION_PERMISSIONS, perms, NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME, NULL); g_free (uuid); - g_slist_free (perm_list); + g_strfreev (perms); ASSERT (nm_setting_connection_get_num_permissions (s_con) == 1, "test_write_wifi_wpa_then_wep_with_perms", "unexpected failure adding valid user permisson"); @@ -10679,7 +10674,7 @@ test_write_wired_qeth_dhcp (void) NMSettingIP4Config *s_ip4; NMSettingIP6Config *s_ip6; char *uuid; - GPtrArray *subchans; + char **subchans; gboolean success; GError *error = NULL; char *testfile = NULL; @@ -10708,15 +10703,12 @@ test_write_wired_qeth_dhcp (void) s_wired = (NMSettingWired *) nm_setting_wired_new (); nm_connection_add_setting (connection, NM_SETTING (s_wired)); - subchans = g_ptr_array_sized_new (3); - g_ptr_array_add (subchans, "0.0.600"); - g_ptr_array_add (subchans, "0.0.601"); - g_ptr_array_add (subchans, "0.0.602"); + subchans = g_strsplit ("0.0.600,0.0.601,0.0.602", ",", -1); g_object_set (s_wired, NM_SETTING_WIRED_S390_SUBCHANNELS, subchans, NM_SETTING_WIRED_S390_NETTYPE, "qeth", NULL); - g_ptr_array_free (subchans, TRUE); + g_strfreev (subchans); nm_setting_wired_add_s390_option (s_wired, "portname", "FOOBAR"); nm_setting_wired_add_s390_option (s_wired, "portno", "1"); @@ -10803,7 +10795,7 @@ test_write_wired_ctc_dhcp (void) NMSettingIP4Config *s_ip4; NMSettingIP6Config *s_ip6; char *uuid; - GPtrArray *subchans; + char **subchans; gboolean success; GError *error = NULL; char *testfile = NULL; @@ -10836,14 +10828,12 @@ test_write_wired_ctc_dhcp (void) g_assert (s_wired); nm_connection_add_setting (connection, NM_SETTING (s_wired)); - subchans = g_ptr_array_sized_new (2); - g_ptr_array_add (subchans, "0.0.600"); - g_ptr_array_add (subchans, "0.0.601"); + subchans = g_strsplit ("0.0.600,0.0.601", ",", -1); g_object_set (s_wired, NM_SETTING_WIRED_S390_SUBCHANNELS, subchans, NM_SETTING_WIRED_S390_NETTYPE, "ctc", NULL); - g_ptr_array_free (subchans, TRUE); + g_strfreev (subchans); nm_setting_wired_add_s390_option (s_wired, "ctcprot", "0"); /* IP4 setting */ diff --git a/src/settings/plugins/ifcfg-rh/writer.c b/src/settings/plugins/ifcfg-rh/writer.c index 0ddaca528e..1b037e2a7b 100644 --- a/src/settings/plugins/ifcfg-rh/writer.c +++ b/src/settings/plugins/ifcfg-rh/writer.c @@ -1028,7 +1028,7 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) char *tmp; const char *nettype, *portname, *ctcprot, *s390_key, *s390_val; guint32 mtu, num_opts, i; - const GPtrArray *s390_subchannels; + const char *const *s390_subchannels; GString *str; const GSList *macaddr_blacklist; @@ -1073,16 +1073,14 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) svSetValue (ifcfg, "SUBCHANNELS", NULL, FALSE); s390_subchannels = nm_setting_wired_get_s390_subchannels (s_wired); if (s390_subchannels) { + int len = g_strv_length ((char **)s390_subchannels); + tmp = NULL; - if (s390_subchannels->len == 2) { - tmp = g_strdup_printf ("%s,%s", - (const char *) g_ptr_array_index (s390_subchannels, 0), - (const char *) g_ptr_array_index (s390_subchannels, 1)); - } else if (s390_subchannels->len == 3) { - tmp = g_strdup_printf ("%s,%s,%s", - (const char *) g_ptr_array_index (s390_subchannels, 0), - (const char *) g_ptr_array_index (s390_subchannels, 1), - (const char *) g_ptr_array_index (s390_subchannels, 2)); + if (len == 2) { + tmp = g_strdup_printf ("%s,%s", s390_subchannels[0], s390_subchannels[1]); + } else if (len == 3) { + tmp = g_strdup_printf ("%s,%s,%s", s390_subchannels[0], s390_subchannels[1], + s390_subchannels[2]); } svSetValue (ifcfg, "SUBCHANNELS", tmp, FALSE); g_free (tmp); @@ -1128,11 +1126,11 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) return TRUE; } -static GString * +static char * vlan_priority_maplist_to_stringlist (NMSettingVlan *s_vlan, NMVlanPriorityMap map) { - GSList *strlist = NULL, *iter; - GString *value = NULL; + char **strlist; + char *value; if (map == NM_VLAN_INGRESS_MAP) g_object_get (G_OBJECT (s_vlan), NM_SETTING_VLAN_INGRESS_PRIORITY_MAP, &strlist, NULL); @@ -1141,11 +1139,11 @@ vlan_priority_maplist_to_stringlist (NMSettingVlan *s_vlan, NMVlanPriorityMap ma else return NULL; - value = g_string_new (""); - for (iter = strlist; iter; iter = g_slist_next (iter)) - g_string_append_printf (value, "%s%s", value->len ? "," : "", (const char *) iter->data); - - g_slist_free_full (strlist, g_free); + if (strlist[0]) + value = g_strjoinv (",", strlist); + else + value = NULL; + g_strfreev (strlist); return value; } @@ -1158,7 +1156,6 @@ write_vlan_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wired, NMSettingWired *s_wired; char *tmp; guint32 vlan_flags = 0; - GString *text = NULL; s_con = nm_connection_get_setting_connection (connection); if (!s_con) { @@ -1197,15 +1194,13 @@ write_vlan_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wired, } else if (vlan_flags & NM_VLAN_FLAG_LOOSE_BINDING) svSetValue (ifcfg, "VLAN_FLAGS", "LOOSE_BINDING", FALSE); - text = vlan_priority_maplist_to_stringlist (s_vlan, NM_VLAN_INGRESS_MAP); - svSetValue (ifcfg, "VLAN_INGRESS_PRIORITY_MAP", text ? text->str : NULL, FALSE); - if (text) - g_string_free (text, TRUE); + tmp = vlan_priority_maplist_to_stringlist (s_vlan, NM_VLAN_INGRESS_MAP); + svSetValue (ifcfg, "VLAN_INGRESS_PRIORITY_MAP", tmp, FALSE); + g_free (tmp); - text = vlan_priority_maplist_to_stringlist (s_vlan, NM_VLAN_EGRESS_MAP); - svSetValue (ifcfg, "VLAN_EGRESS_PRIORITY_MAP", text ? text->str : NULL, FALSE); - if (text) - g_string_free (text, TRUE); + tmp = vlan_priority_maplist_to_stringlist (s_vlan, NM_VLAN_EGRESS_MAP); + svSetValue (ifcfg, "VLAN_EGRESS_PRIORITY_MAP", tmp, FALSE); + g_free (tmp); svSetValue (ifcfg, "HWADDR", NULL, FALSE); svSetValue (ifcfg, "MACADDR", NULL, FALSE); @@ -1887,8 +1882,13 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) NMIP4Address *addr; guint32 ip; - if (i > 0 && _nm_setting_ip4_config_get_address_label (s_ip4, i)) - continue; + if (i > 0) { + const char *label; + + label = _nm_setting_ip4_config_get_address_label (s_ip4, i); + if (*label) + continue; + } if (n == 0) { /* Instead of index 0 use un-numbered variables. @@ -2163,8 +2163,6 @@ write_ip4_aliases (NMConnection *connection, char *base_ifcfg_path) shvarFile *ifcfg; label = _nm_setting_ip4_config_get_address_label (s_ip4, i); - if (!label) - continue; if ( strncmp (label, base_name, base_name_len) != 0 || label[base_name_len] != ':') continue; diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c index 5bfcca0b49..46fcbc196c 100644 --- a/src/settings/plugins/keyfile/reader.c +++ b/src/settings/plugins/keyfile/reader.c @@ -1134,20 +1134,12 @@ read_one_setting_value (NMSetting *setting, g_object_set (setting, key, array, NULL); g_byte_array_free (array, TRUE); g_free (tmp); - } else if (type == DBUS_TYPE_G_LIST_OF_STRING) { + } else if (type == G_TYPE_STRV) { gchar **sa; gsize length; - int i; - GSList *list = NULL; sa = nm_keyfile_plugin_kf_get_string_list (info->keyfile, setting_name, key, &length, NULL); - for (i = 0; i < length; i++) - list = g_slist_prepend (list, sa[i]); - - list = g_slist_reverse (list); - g_object_set (setting, key, list, NULL); - - g_slist_free (list); + g_object_set (setting, key, sa, NULL); g_strfreev (sa); } else if (type == DBUS_TYPE_G_MAP_OF_STRING) { read_hash_of_string (info->keyfile, setting, key); diff --git a/src/settings/plugins/keyfile/writer.c b/src/settings/plugins/keyfile/writer.c index 711271b057..915da95875 100644 --- a/src/settings/plugins/keyfile/writer.c +++ b/src/settings/plugins/keyfile/writer.c @@ -894,22 +894,11 @@ write_setting_value (NMSetting *setting, nm_keyfile_plugin_kf_set_integer_list (info->keyfile, setting_name, key, tmp_array, array->len); g_free (tmp_array); } - } else if (type == DBUS_TYPE_G_LIST_OF_STRING) { - GSList *list; - GSList *iter; + } else if (type == G_TYPE_STRV) { + char **array; - list = (GSList *) g_value_get_boxed (value); - if (list) { - char **array; - int i = 0; - - array = g_new (char *, g_slist_length (list)); - for (iter = list; iter; iter = iter->next) - array[i++] = iter->data; - - nm_keyfile_plugin_kf_set_string_list (info->keyfile, setting_name, key, (const gchar **const) array, i); - g_free (array); - } + array = (char **) g_value_get_boxed (value); + nm_keyfile_plugin_kf_set_string_list (info->keyfile, setting_name, key, (const gchar **const) array, g_strv_length (array)); } else if (type == DBUS_TYPE_G_MAP_OF_STRING) { write_hash_of_string (info->keyfile, setting, key, value); } else if (type == DBUS_TYPE_G_UINT_ARRAY) { diff --git a/src/tests/test-general.c b/src/tests/test-general.c index 0a969c89f4..c1970b897c 100644 --- a/src/tests/test-general.c +++ b/src/tests/test-general.c @@ -482,13 +482,9 @@ test_connection_match_wired (void) NMConnection *orig, *copy, *matched; GSList *connections = NULL; NMSettingWired *s_wired; - GPtrArray *subchan_arr = g_ptr_array_sized_new (3); + char *subchan_arr[] = { "0.0.8000", "0.0.8001", "0.0.8002", NULL }; GByteArray *mac; - g_ptr_array_add (subchan_arr, "0.0.8000"); - g_ptr_array_add (subchan_arr, "0.0.8001"); - g_ptr_array_add (subchan_arr, "0.0.8002"); - orig = _match_connection_new (); copy = nm_simple_connection_new_clone (orig); connections = g_slist_append (connections, copy); @@ -515,7 +511,6 @@ test_connection_match_wired (void) g_assert (matched == copy); g_slist_free (connections); - g_ptr_array_free (subchan_arr, TRUE); g_object_unref (orig); g_object_unref (copy); } |