diff options
author | Thomas Haller <thaller@redhat.com> | 2019-04-04 13:26:18 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2019-04-10 15:05:57 +0200 |
commit | 34e60bf2282e700347aef5b2b00c5fa3121d0d40 (patch) | |
tree | fb9f61f71bd11e9b0cfe1daf80377a9a62d0512c | |
parent | c9ca7d06374e109e40e80c5e67dc98e21d4ff89f (diff) | |
download | NetworkManager-34e60bf2282e700347aef5b2b00c5fa3121d0d40.tar.gz |
cli: cleanup split_required_fields_for_con_show()
- return early and use cleanup attribute for freeing memory
- use nm_utils_strsplit_set_with_empty() instead of g_strsplit_set().
-rw-r--r-- | clients/cli/connections.c | 92 |
1 files changed, 43 insertions, 49 deletions
diff --git a/clients/cli/connections.c b/clients/cli/connections.c index 97c46923ae..d3193ccb3c 100644 --- a/clients/cli/connections.c +++ b/clients/cli/connections.c @@ -1528,15 +1528,12 @@ split_required_fields_for_con_show (const char *input, char **active_flds, GError **error) { - char **fields, **iter; - char *dot; - GString *str1, *str2; - gboolean found; + gs_free const char **fields = NULL; + const char *const*iter; + nm_auto_free_gstring GString *str1 = NULL; + nm_auto_free_gstring GString *str2 = NULL; gboolean group_profile = FALSE; gboolean group_active = FALSE; - gboolean success = TRUE; - gboolean is_all, is_common; - int i; if (!input) { *profile_flds = NULL; @@ -1547,25 +1544,30 @@ split_required_fields_for_con_show (const char *input, str1 = g_string_new (NULL); str2 = g_string_new (NULL); - /* Split supplied fields string */ - fields = g_strsplit_set (input, ",", -1); + fields = nm_utils_strsplit_set_with_empty (input, ","); for (iter = fields; iter && *iter; iter++) { - g_strstrip (*iter); - dot = strchr (*iter, '.'); + char *s_mutable = (char *) (*iter); + char *dot; + gboolean is_all; + gboolean is_common; + gboolean found; + int i; + + g_strstrip (s_mutable); + dot = strchr (s_mutable, '.'); if (dot) *dot = '\0'; - is_all = !dot && strcasecmp (*iter, "all") == 0; - is_common = !dot && strcasecmp (*iter, "common") == 0; + is_all = !dot && strcasecmp (s_mutable, "all") == 0; + is_common = !dot && strcasecmp (s_mutable, "common") == 0; found = FALSE; - for (i = 0; i < _NM_META_SETTING_TYPE_NUM; i++) { if ( is_all || is_common - || !strcasecmp (*iter, nm_meta_setting_infos[i].setting_name)) { + || !strcasecmp (s_mutable, nm_meta_setting_infos[i].setting_name)) { if (dot) *dot = '.'; - g_string_append (str1, *iter); + g_string_append (str1, s_mutable); g_string_append_c (str1, ','); found = TRUE; break; @@ -1573,12 +1575,13 @@ split_required_fields_for_con_show (const char *input, } if (found) continue; + for (i = 0; nmc_fields_con_active_details_groups[i]; i++) { if ( is_all || is_common - || !strcasecmp (*iter, nmc_fields_con_active_details_groups[i]->name)) { + || !strcasecmp (s_mutable, nmc_fields_con_active_details_groups[i]->name)) { if (dot) *dot = '.'; - g_string_append (str2, *iter); + g_string_append (str2, s_mutable); g_string_append_c (str2, ','); found = TRUE; break; @@ -1587,55 +1590,46 @@ split_required_fields_for_con_show (const char *input, if (!found) { if (dot) *dot = '.'; - if (!strcasecmp (*iter, CON_SHOW_DETAIL_GROUP_PROFILE)) + if (!strcasecmp (s_mutable, CON_SHOW_DETAIL_GROUP_PROFILE)) group_profile = TRUE; - else if (!strcasecmp (*iter, CON_SHOW_DETAIL_GROUP_ACTIVE)) + else if (!strcasecmp (s_mutable, CON_SHOW_DETAIL_GROUP_ACTIVE)) group_active = TRUE; else { - char *allowed1 = nm_meta_abstract_infos_get_names_str ((const NMMetaAbstractInfo *const*) nm_meta_setting_infos_editor_p (), NULL); - char *allowed2 = nm_meta_abstract_infos_get_names_str ((const NMMetaAbstractInfo *const*) nmc_fields_con_active_details_groups, NULL); + gs_free char *allowed1 = nm_meta_abstract_infos_get_names_str ((const NMMetaAbstractInfo *const*) nm_meta_setting_infos_editor_p (), NULL); + gs_free char *allowed2 = nm_meta_abstract_infos_get_names_str ((const NMMetaAbstractInfo *const*) nmc_fields_con_active_details_groups, NULL); + g_set_error (error, NMCLI_ERROR, 0, _("invalid field '%s'; allowed fields: %s and %s, or %s,%s"), - *iter, allowed1, allowed2, CON_SHOW_DETAIL_GROUP_PROFILE, CON_SHOW_DETAIL_GROUP_ACTIVE); - g_free (allowed1); - g_free (allowed2); - success = FALSE; - break; + s_mutable, allowed1, allowed2, CON_SHOW_DETAIL_GROUP_PROFILE, CON_SHOW_DETAIL_GROUP_ACTIVE); + return FALSE; } } } - if (fields) - g_strfreev (fields); /* Handle pseudo groups: profile, active */ - if (success && group_profile) { + if (group_profile) { if (str1->len > 0) { g_set_error (error, NMCLI_ERROR, 0, _("'%s' has to be alone"), CON_SHOW_DETAIL_GROUP_PROFILE); - success = FALSE; - } else - g_string_assign (str1, "all,"); + return FALSE; + } + g_string_assign (str1, "all,"); } - if (success && group_active) { + if (group_active) { if (str2->len > 0) { g_set_error (error, NMCLI_ERROR, 0, _("'%s' has to be alone"), CON_SHOW_DETAIL_GROUP_ACTIVE); - success = FALSE; - } else - g_string_assign (str2, "all,"); + return FALSE; + } + g_string_assign (str2, "all,"); } - if (success) { - if (str1->len > 0) - g_string_truncate (str1, str1->len - 1); - if (str2->len > 0) - g_string_truncate (str2, str2->len - 1); - *profile_flds = g_string_free (str1, str1->len == 0); - *active_flds = g_string_free (str2, str2->len == 0); - } else { - g_string_free (str1, TRUE); - g_string_free (str2, TRUE); - } - return success; + if (str1->len > 0) + g_string_truncate (str1, str1->len - 1); + if (str2->len > 0) + g_string_truncate (str2, str2->len - 1); + *profile_flds = g_string_free (g_steal_pointer (&str1), str1->len == 0); + *active_flds = g_string_free (g_steal_pointer (&str2), str2->len == 0); + return TRUE; } typedef enum { |