From c40f6c46ec25a0649970cd886c44efdacc292fe1 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 5 Apr 2017 15:48:53 +0200 Subject: [PATCH] cli: add accessors for NMMetaAbstractInfo --- clients/cli/utils.c | 36 +++++++--------------- clients/common/nm-meta-setting-access.c | 40 +++++++++++++++++++++++++ clients/common/nm-meta-setting-access.h | 8 +++++ 3 files changed, 59 insertions(+), 25 deletions(-) diff --git a/clients/cli/utils.c b/clients/cli/utils.c index 02df764494..f67df6a3fd 100644 --- a/clients/cli/utils.c +++ b/clients/cli/utils.c @@ -30,6 +30,7 @@ #include #include "nm-client-utils.h" +#include "nm-meta-setting-access.h" #include "common.h" #include "settings.h" @@ -709,19 +710,6 @@ nmc_free_output_field_values (NmcOutputField fields_array[]) } } -static const char * -_abstract_info_get_name (const NMMetaAbstractInfo *abstract_info) -{ - const char *n; - - nm_assert (abstract_info); - nm_assert (abstract_info->meta_type); - nm_assert (abstract_info->meta_type->get_name); - n = abstract_info->meta_type->get_name (abstract_info); - nm_assert (n && n[0]); - return n; -} - typedef struct { guint idx; gsize offset_plus_1; @@ -780,7 +768,7 @@ nmc_output_selection_create (const NMMetaAbstractInfo *const* fields_array, for (i = 0; fields_array[i]; i++) { const NMMetaAbstractInfo *fi = fields_array[i]; - if (g_ascii_strcasecmp (i_name, _abstract_info_get_name (fi)) != 0) + if (g_ascii_strcasecmp (i_name, nm_meta_abstract_info_get_name (fi)) != 0) continue; if (!right) @@ -800,7 +788,7 @@ nmc_output_selection_create (const NMMetaAbstractInfo *const* fields_array, const NmcMetaGenericInfo *fi_g = (const NmcMetaGenericInfo *) fi; for (j = 0; fi_g->nested && fi_g->nested[j]; j++) { - if (g_ascii_strcasecmp (right, _abstract_info_get_name ((const NMMetaAbstractInfo *) fi_g->nested[j])) == 0) { + if (g_ascii_strcasecmp (right, nm_meta_abstract_info_get_name ((const NMMetaAbstractInfo *) fi_g->nested[j])) == 0) { found = TRUE; break; } @@ -936,17 +924,15 @@ nmc_get_allowed_fields_nested (const NMMetaAbstractInfo *abstract_info) { GString *allowed_fields = g_string_sized_new (256); int i; - const char *name = _abstract_info_get_name (abstract_info); + const char *name = nm_meta_abstract_info_get_name (abstract_info); gs_free gpointer nested_to_free = NULL; const NMMetaAbstractInfo *const*nested = NULL; - if (abstract_info->meta_type->get_nested) - nested = abstract_info->meta_type->get_nested (abstract_info, NULL, &nested_to_free); - - if (nested && nested[0]) { + nested = nm_meta_abstract_info_get_nested (abstract_info, NULL, &nested_to_free); + if (nested) { for (i = 0; nested && nested[i]; i++) { g_string_append_printf (allowed_fields, "%s.%s,", - name, _abstract_info_get_name (nested[i])); + name, nm_meta_abstract_info_get_name (nested[i])); } } else g_string_append_printf (allowed_fields, "%s,", name); @@ -963,7 +949,7 @@ nmc_get_allowed_fields (const NMMetaAbstractInfo *const*fields_array) guint i; for (i = 0; fields_array[i]; i++) - g_string_append_printf (allowed_fields, "%s,", _abstract_info_get_name (fields_array[i])); + g_string_append_printf (allowed_fields, "%s,", nm_meta_abstract_info_get_name (fields_array[i])); if (allowed_fields->len) g_string_truncate (allowed_fields, allowed_fields->len - 1); @@ -1036,7 +1022,7 @@ get_value_to_print (NmcColorOption color_option, nm_assert (out_to_free && !*out_to_free); if (field_name) - value = _(_abstract_info_get_name (field->info)); + value = _(nm_meta_abstract_info_get_name (field->info)); else { value = field->value ? (is_array @@ -1149,7 +1135,7 @@ print_required_fields (const NmcConfig *nmc_config, tmp = g_strdup_printf ("%s%s%s[%d]:", section_prefix ? (const char*) field_values[0].value : "", section_prefix ? "." : "", - _(_abstract_info_get_name (field_values[idx].info)), + _(nm_meta_abstract_info_get_name (field_values[idx].info)), j); width1 = strlen (tmp); width2 = nmc_string_screen_width (tmp, NULL); @@ -1169,7 +1155,7 @@ print_required_fields (const NmcConfig *nmc_config, tmp = g_strdup_printf ("%s%s%s:", section_prefix ? hdr_name : "", section_prefix ? "." : "", - _(_abstract_info_get_name (field_values[idx].info))); + _(nm_meta_abstract_info_get_name (field_values[idx].info))); width1 = strlen (tmp); width2 = nmc_string_screen_width (tmp, NULL); g_print ("%-*s%s\n", terse ? 0 : ML_VALUE_INDENT+width1-width2, tmp, print_val); diff --git a/clients/common/nm-meta-setting-access.c b/clients/common/nm-meta-setting-access.c index 262a222081..5f538bf87a 100644 --- a/clients/common/nm-meta-setting-access.c +++ b/clients/common/nm-meta-setting-access.c @@ -179,3 +179,43 @@ nm_meta_setting_infos_editor_p (void) return cache; } +/*****************************************************************************/ + +const char * +nm_meta_abstract_info_get_name (const NMMetaAbstractInfo *abstract_info) +{ + const char *n; + + nm_assert (abstract_info); + nm_assert (abstract_info->meta_type); + nm_assert (abstract_info->meta_type->get_name); + n = abstract_info->meta_type->get_name (abstract_info); + nm_assert (n && n[0]); + return n; +} + +const NMMetaAbstractInfo *const* +nm_meta_abstract_info_get_nested (const NMMetaAbstractInfo *abstract_info, + guint *out_len, + gpointer *nested_to_free) +{ + const NMMetaAbstractInfo *const*nested; + guint l = 0; + gs_free gpointer f = NULL; + + nm_assert (abstract_info); + nm_assert (abstract_info->meta_type); + nm_assert (nested_to_free && !*nested_to_free); + + if (abstract_info->meta_type->get_nested) { + nested = abstract_info->meta_type->get_nested (abstract_info, &l, &f); + nm_assert ((nested ? g_strv_length ((char **) nested) : 0) == l); + if (nested && nested[0]) { + NM_SET_OUT (out_len, l); + *nested_to_free = g_steal_pointer (&f); + return nested; + } + } + NM_SET_OUT (out_len, 0); + return NULL; +} diff --git a/clients/common/nm-meta-setting-access.h b/clients/common/nm-meta-setting-access.h index 88264ac0d2..553f41136f 100644 --- a/clients/common/nm-meta-setting-access.h +++ b/clients/common/nm-meta-setting-access.h @@ -44,4 +44,12 @@ const NMMetaSettingInfoEditor *const*nm_meta_setting_infos_editor_p (void); /*****************************************************************************/ +const char *nm_meta_abstract_info_get_name (const NMMetaAbstractInfo *abstract_info); + +const NMMetaAbstractInfo *const*nm_meta_abstract_info_get_nested (const NMMetaAbstractInfo *abstract_info, + guint *out_len, + gpointer *nested_to_free); + +/*****************************************************************************/ + #endif /* _NM_META_SETTING_ACCESS_H__ */