From 2bc29453bdaa7e07e8b0965f68fcea663fffaddf Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 18 Mar 2019 13:14:33 +0100 Subject: [PATCH] cli: avoid unnecessary string clones for stripping whitespace for property values --- clients/common/nm-meta-setting-desc.c | 76 +++++++++++++-------------- shared/nm-utils/nm-shared-utils.c | 2 + 2 files changed, 40 insertions(+), 38 deletions(-) diff --git a/clients/common/nm-meta-setting-desc.c b/clients/common/nm-meta-setting-desc.c index 5293268ca..d595e70e4 100644 --- a/clients/common/nm-meta-setting-desc.c +++ b/clients/common/nm-meta-setting-desc.c @@ -124,7 +124,8 @@ _parse_ip_route (int family, gint64 metric = -1; guint i; gs_free const char **routev = NULL; - gs_free char *str_clean = NULL; + gs_free char *str_clean_free = NULL; + const char *str_clean; gs_free char *dest_clone = NULL; const char *dest; const char *plen; @@ -136,7 +137,7 @@ _parse_ip_route (int family, nm_assert (str); nm_assert (!error || !*error); - str_clean = g_strstrip (g_strdup (str)); + str_clean = nm_strstrip_avoid_copy (str, &str_clean_free); routev = nm_utils_strsplit_set (str_clean, " \t", FALSE); if (!routev) { g_set_error (error, 1, 0, @@ -299,7 +300,8 @@ _parse_team_link_watcher (const char *str, GError **error) { gs_free const char **watcherv = NULL; - gs_free char *str_clean = NULL; + gs_free char *str_clean_free = NULL; + const char *str_clean; guint i; gs_free const char *name = NULL; int val1 = 0, val2 = 0, val3 = 3, val4 = -1; @@ -310,7 +312,7 @@ _parse_team_link_watcher (const char *str, nm_assert (str); nm_assert (!error || !*error); - str_clean = g_strstrip (g_strdup (str)); + str_clean = nm_strstrip_avoid_copy (str, &str_clean_free); watcherv = nm_utils_strsplit_set (str_clean, " \t", FALSE); if (!watcherv) { g_set_error (error, 1, 0, "'%s' is not valid", str); @@ -1064,14 +1066,10 @@ _set_fcn_gobject_int (ARGS_SET_FCN) if (property_info->property_typ_data) { if ( value && (value_infos = property_info->property_typ_data->subtype.gobject_int.value_infos)) { - gs_free char *vv_stripped = NULL; - const char *vv = nm_str_skip_leading_spaces (value); - - if (vv[0] && g_ascii_isspace (vv[strlen (vv) - 1])) { - vv_stripped = g_strstrip (g_strdup (vv)); - vv = vv_stripped; - } + gs_free char *vv_free = NULL; + const char *vv; + vv = nm_strstrip_avoid_copy (value, &vv_free); for (; value_infos->nick; value_infos++) { if (nm_streq (value_infos->nick, vv)) { v = value_infos->value; @@ -1636,9 +1634,12 @@ vpn_data_item (const char *key, const char *value, gpointer user_data) \ strv = nm_utils_strsplit_set (value, ",", FALSE); \ for (iter = strv; iter && *iter; iter++) { \ - gs_free char *left_clone = g_strstrip (g_strdup (*iter)); \ - char *left = left_clone; \ - char *right = strchr (left, '='); \ + char *left; \ + char *right; \ + \ + left = g_strstrip ((char *) *iter); \ + right = strchr (left, '='); \ + \ if (!right) { \ g_set_error (error, 1, 0, _("'%s' is not valid; use