summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-04-04 13:26:18 +0200
committerThomas Haller <thaller@redhat.com>2019-04-10 15:05:57 +0200
commit34e60bf2282e700347aef5b2b00c5fa3121d0d40 (patch)
treefb9f61f71bd11e9b0cfe1daf80377a9a62d0512c
parentc9ca7d06374e109e40e80c5e67dc98e21d4ff89f (diff)
downloadNetworkManager-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.c92
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 {