libnm: add @deep_copy argument to _nm_utils_strv_to_slist() and _nm_utils_slist_to_strv()

(cherry picked from commit ed632207cd)
This commit is contained in:
Thomas Haller 2015-07-01 14:08:51 +02:00
parent 1dec33e2af
commit 0cbcf21e80
6 changed files with 34 additions and 24 deletions

View file

@ -128,8 +128,8 @@ char ** _nm_utils_strsplit_set (const char *str,
const char *delimiters,
int max_tokens);
GSList * _nm_utils_strv_to_slist (char **strv);
char ** _nm_utils_slist_to_strv (GSList *slist);
GSList * _nm_utils_strv_to_slist (char **strv, gboolean deep_copy);
char ** _nm_utils_slist_to_strv (GSList *slist, gboolean deep_copy);
GPtrArray * _nm_utils_strv_to_ptrarray (char **strv);
char ** _nm_utils_ptrarray_to_strv (GPtrArray *ptrarray);

View file

@ -2888,7 +2888,7 @@ set_property (GObject *object, guint prop_id,
switch (prop_id) {
case PROP_EAP:
g_slist_free_full (priv->eap, g_free);
priv->eap = _nm_utils_strv_to_slist (g_value_get_boxed (value));
priv->eap = _nm_utils_strv_to_slist (g_value_get_boxed (value), TRUE);
break;
case PROP_IDENTITY:
g_free (priv->identity);
@ -2922,7 +2922,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 = _nm_utils_strv_to_slist (g_value_get_boxed (value));
priv->altsubject_matches = _nm_utils_strv_to_slist (g_value_get_boxed (value), TRUE);
break;
case PROP_CLIENT_CERT:
if (priv->client_cert)
@ -2974,7 +2974,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 = _nm_utils_strv_to_slist (g_value_get_boxed (value));
priv->phase2_altsubject_matches = _nm_utils_strv_to_slist (g_value_get_boxed (value), TRUE);
break;
case PROP_PHASE2_CLIENT_CERT:
if (priv->phase2_client_cert)
@ -3060,7 +3060,7 @@ get_property (GObject *object, guint prop_id,
switch (prop_id) {
case PROP_EAP:
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->eap));
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->eap, TRUE));
break;
case PROP_IDENTITY:
g_value_set_string (value, priv->identity);
@ -3081,7 +3081,7 @@ get_property (GObject *object, guint prop_id,
g_value_set_string (value, priv->subject_match);
break;
case PROP_ALTSUBJECT_MATCHES:
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->altsubject_matches));
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->altsubject_matches, TRUE));
break;
case PROP_CLIENT_CERT:
g_value_set_boxed (value, priv->client_cert);
@ -3111,7 +3111,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_take_boxed (value, _nm_utils_slist_to_strv (priv->phase2_altsubject_matches));
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->phase2_altsubject_matches, TRUE));
break;
case PROP_PHASE2_CLIENT_CERT:
g_value_set_boxed (value, priv->phase2_client_cert);

View file

@ -1149,7 +1149,7 @@ set_property (GObject *object, guint prop_id,
break;
case PROP_SECONDARIES:
g_slist_free_full (priv->secondaries, g_free);
priv->secondaries = _nm_utils_strv_to_slist (g_value_get_boxed (value));
priv->secondaries = _nm_utils_strv_to_slist (g_value_get_boxed (value), TRUE);
break;
case PROP_GATEWAY_PING_TIMEOUT:
priv->gateway_ping_timeout = g_value_get_uint (value);
@ -1222,7 +1222,7 @@ get_property (GObject *object, guint prop_id,
g_value_set_enum (value, nm_setting_connection_get_autoconnect_slaves (setting));
break;
case PROP_SECONDARIES:
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->secondaries));
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->secondaries, TRUE));
break;
case PROP_GATEWAY_PING_TIMEOUT:
g_value_set_uint (value, priv->gateway_ping_timeout);

View file

@ -1132,15 +1132,15 @@ set_property (GObject *object, guint prop_id,
break;
case PROP_PROTO:
g_slist_free_full (priv->proto, g_free);
priv->proto = _nm_utils_strv_to_slist (g_value_get_boxed (value));
priv->proto = _nm_utils_strv_to_slist (g_value_get_boxed (value), TRUE);
break;
case PROP_PAIRWISE:
g_slist_free_full (priv->pairwise, g_free);
priv->pairwise = _nm_utils_strv_to_slist (g_value_get_boxed (value));
priv->pairwise = _nm_utils_strv_to_slist (g_value_get_boxed (value), TRUE);
break;
case PROP_GROUP:
g_slist_free_full (priv->group, g_free);
priv->group = _nm_utils_strv_to_slist (g_value_get_boxed (value));
priv->group = _nm_utils_strv_to_slist (g_value_get_boxed (value), TRUE);
break;
case PROP_LEAP_USERNAME:
g_free (priv->leap_username);
@ -1206,13 +1206,13 @@ get_property (GObject *object, guint prop_id,
g_value_set_string (value, priv->auth_alg);
break;
case PROP_PROTO:
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->proto));
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->proto, TRUE));
break;
case PROP_PAIRWISE:
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->pairwise));
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->pairwise, TRUE));
break;
case PROP_GROUP:
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->group));
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->group, TRUE));
break;
case PROP_LEAP_USERNAME:
g_value_set_string (value, priv->leap_username);

View file

@ -911,7 +911,7 @@ set_property (GObject *object, guint prop_id,
break;
case PROP_SEEN_BSSIDS:
g_slist_free_full (priv->seen_bssids, g_free);
priv->seen_bssids = _nm_utils_strv_to_slist (g_value_get_boxed (value));
priv->seen_bssids = _nm_utils_strv_to_slist (g_value_get_boxed (value), TRUE);
break;
case PROP_HIDDEN:
priv->hidden = g_value_get_boolean (value);
@ -964,7 +964,7 @@ get_property (GObject *object, guint prop_id,
g_value_set_uint (value, nm_setting_wireless_get_mtu (setting));
break;
case PROP_SEEN_BSSIDS:
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->seen_bssids));
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->seen_bssids, TRUE));
break;
case PROP_HIDDEN:
g_value_set_boolean (value, nm_setting_wireless_get_hidden (setting));

View file

@ -755,21 +755,26 @@ _nm_utils_bytes_from_dbus (GVariant *dbus_value,
}
GSList *
_nm_utils_strv_to_slist (char **strv)
_nm_utils_strv_to_slist (char **strv, gboolean deep_copy)
{
int i;
GSList *list = NULL;
if (strv) {
for (i = 0; strv[i]; i++)
list = g_slist_prepend (list, g_strdup (strv[i]));
if (deep_copy) {
for (i = 0; strv[i]; i++)
list = g_slist_prepend (list, g_strdup (strv[i]));
} else {
for (i = 0; strv[i]; i++)
list = g_slist_prepend (list, strv[i]);
}
}
return g_slist_reverse (list);
}
char **
_nm_utils_slist_to_strv (GSList *slist)
_nm_utils_slist_to_strv (GSList *slist, gboolean deep_copy)
{
GSList *iter;
char **strv;
@ -778,8 +783,13 @@ _nm_utils_slist_to_strv (GSList *slist)
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);
if (deep_copy) {
for (i = 0, iter = slist; iter; iter = iter->next, i++)
strv[i] = g_strdup (iter->data);
} else {
for (i = 0, iter = slist; iter; iter = iter->next, i++)
strv[i] = iter->data;
}
strv[i] = NULL;
return strv;