diff options
author | Thomas Haller <thaller@redhat.com> | 2020-05-14 16:43:32 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2020-05-14 17:21:12 +0200 |
commit | ef9fe850966a628b42344e70f6738cbb1eda767a (patch) | |
tree | 7f1de80d442f552f30d35f5aa5bd114872a3919c | |
parent | 61d6f1abc2244d0a83553e4e947bc3a680133857 (diff) | |
download | NetworkManager-ef9fe850966a628b42344e70f6738cbb1eda767a.tar.gz |
shared: move _nm_utils_format_variant_attributes*() API to "shared/nm-glib-aux"
This has no dependency on libnm, libnm-core, or src. Move it to the
general purpose toolbox.
-rw-r--r-- | libnm-core/nm-utils-private.h | 5 | ||||
-rw-r--r-- | libnm-core/nm-utils.c | 88 | ||||
-rw-r--r-- | shared/nm-glib-aux/nm-shared-utils.c | 94 | ||||
-rw-r--r-- | shared/nm-glib-aux/nm-shared-utils.h | 12 |
4 files changed, 109 insertions, 90 deletions
diff --git a/libnm-core/nm-utils-private.h b/libnm-core/nm-utils-private.h index f3e9d3f1cb..dd3785be0f 100644 --- a/libnm-core/nm-utils-private.h +++ b/libnm-core/nm-utils-private.h @@ -67,11 +67,6 @@ char * _nm_utils_hwaddr_canonical_or_invalid (const char *mac, gssize lengt gboolean _nm_utils_hwaddr_link_local_valid (const char *mac); -void _nm_utils_format_variant_attributes_full (GString *str, - const NMUtilsNamedValue *values, - guint num_values, - char attr_separator, - char key_value_separator); gboolean _nm_sriov_vf_parse_vlans (NMSriovVF *vf, const char *str, GError **error); gboolean _nm_utils_bridge_vlan_verify_list (GPtrArray *vlans, diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c index 59798c1d9b..2b1c1098ae 100644 --- a/libnm-core/nm-utils.c +++ b/libnm-core/nm-utils.c @@ -5449,23 +5449,6 @@ nm_utils_is_json_object (const char *str, GError **error) } static char * -attribute_escape (const char *src, char c1, char c2) -{ - char *ret, *dest; - - dest = ret = g_malloc (strlen (src) * 2 + 1); - - while (*src) { - if (*src == c1 || *src == c2 || *src == '\\') - *dest++ = '\\'; - *dest++ = *src++; - } - *dest++ = '\0'; - - return ret; -} - -static char * attribute_unescape (const char *start, const char *end) { char *ret, *dest; @@ -5699,55 +5682,6 @@ next: return g_steal_pointer (&ht); } -void -_nm_utils_format_variant_attributes_full (GString *str, - const NMUtilsNamedValue *values, - guint num_values, - char attr_separator, - char key_value_separator) -{ - const char *name, *value; - GVariant *variant; - char *escaped; - char buf[64]; - char sep = 0; - guint i; - - for (i = 0; i < num_values; i++) { - name = values[i].name; - variant = (GVariant *) values[i].value_ptr; - value = NULL; - - if (g_variant_is_of_type (variant, G_VARIANT_TYPE_UINT32)) - value = nm_sprintf_buf (buf, "%u", g_variant_get_uint32 (variant)); - else if (g_variant_is_of_type (variant, G_VARIANT_TYPE_BYTE)) - value = nm_sprintf_buf (buf, "%hhu", g_variant_get_byte (variant)); - else if (g_variant_is_of_type (variant, G_VARIANT_TYPE_BOOLEAN)) - value = g_variant_get_boolean (variant) ? "true" : "false"; - else if (g_variant_is_of_type (variant, G_VARIANT_TYPE_STRING)) - value = g_variant_get_string (variant, NULL); - else if (g_variant_is_of_type (variant, G_VARIANT_TYPE_BYTESTRING)) - value = g_variant_get_bytestring (variant); - else - continue; - - if (sep) - g_string_append_c (str, sep); - - escaped = attribute_escape (name, attr_separator, key_value_separator); - g_string_append (str, escaped); - g_free (escaped); - - g_string_append_c (str, key_value_separator); - - escaped = attribute_escape (value, attr_separator, key_value_separator); - g_string_append (str, escaped); - g_free (escaped); - - sep = attr_separator; - } -} - /* * nm_utils_format_variant_attributes: * @attributes: (element-type utf8 GVariant): a #GHashTable mapping attribute names to #GVariant values @@ -5766,25 +5700,9 @@ nm_utils_format_variant_attributes (GHashTable *attributes, char attr_separator, char key_value_separator) { - GString *str = NULL; - gs_free NMUtilsNamedValue *values = NULL; - guint len; - - g_return_val_if_fail (attr_separator, NULL); - g_return_val_if_fail (key_value_separator, NULL); - - if (!attributes || !g_hash_table_size (attributes)) - return NULL; - - values = nm_utils_named_values_from_str_dict (attributes, &len); - - str = g_string_new (""); - _nm_utils_format_variant_attributes_full (str, - values, - len, - attr_separator, - key_value_separator); - return g_string_free (str, FALSE); + return _nm_utils_format_variant_attributes (attributes, + attr_separator, + key_value_separator); } /*****************************************************************************/ diff --git a/shared/nm-glib-aux/nm-shared-utils.c b/shared/nm-glib-aux/nm-shared-utils.c index 39e75a89fe..5b8f96b151 100644 --- a/shared/nm-glib-aux/nm-shared-utils.c +++ b/shared/nm-glib-aux/nm-shared-utils.c @@ -4872,3 +4872,97 @@ nm_indirect_g_free (gpointer arg) nm_clear_g_free (p); } + +/*****************************************************************************/ + +static char * +attribute_escape (const char *src, char c1, char c2) +{ + char *ret, *dest; + + dest = ret = g_malloc (strlen (src) * 2 + 1); + + while (*src) { + if (*src == c1 || *src == c2 || *src == '\\') + *dest++ = '\\'; + *dest++ = *src++; + } + *dest++ = '\0'; + + return ret; +} + +void +_nm_utils_format_variant_attributes_full (GString *str, + const NMUtilsNamedValue *values, + guint num_values, + char attr_separator, + char key_value_separator) +{ + const char *name, *value; + GVariant *variant; + char *escaped; + char buf[64]; + char sep = 0; + guint i; + + for (i = 0; i < num_values; i++) { + name = values[i].name; + variant = (GVariant *) values[i].value_ptr; + value = NULL; + + if (g_variant_is_of_type (variant, G_VARIANT_TYPE_UINT32)) + value = nm_sprintf_buf (buf, "%u", g_variant_get_uint32 (variant)); + else if (g_variant_is_of_type (variant, G_VARIANT_TYPE_BYTE)) + value = nm_sprintf_buf (buf, "%hhu", g_variant_get_byte (variant)); + else if (g_variant_is_of_type (variant, G_VARIANT_TYPE_BOOLEAN)) + value = g_variant_get_boolean (variant) ? "true" : "false"; + else if (g_variant_is_of_type (variant, G_VARIANT_TYPE_STRING)) + value = g_variant_get_string (variant, NULL); + else if (g_variant_is_of_type (variant, G_VARIANT_TYPE_BYTESTRING)) + value = g_variant_get_bytestring (variant); + else + continue; + + if (sep) + g_string_append_c (str, sep); + + escaped = attribute_escape (name, attr_separator, key_value_separator); + g_string_append (str, escaped); + g_free (escaped); + + g_string_append_c (str, key_value_separator); + + escaped = attribute_escape (value, attr_separator, key_value_separator); + g_string_append (str, escaped); + g_free (escaped); + + sep = attr_separator; + } +} + +char * +_nm_utils_format_variant_attributes (GHashTable *attributes, + char attr_separator, + char key_value_separator) +{ + GString *str = NULL; + gs_free NMUtilsNamedValue *values = NULL; + guint len; + + g_return_val_if_fail (attr_separator, NULL); + g_return_val_if_fail (key_value_separator, NULL); + + if (!attributes || !g_hash_table_size (attributes)) + return NULL; + + values = nm_utils_named_values_from_str_dict (attributes, &len); + + str = g_string_new (""); + _nm_utils_format_variant_attributes_full (str, + values, + len, + attr_separator, + key_value_separator); + return g_string_free (str, FALSE); +} diff --git a/shared/nm-glib-aux/nm-shared-utils.h b/shared/nm-glib-aux/nm-shared-utils.h index cdf6729076..7bc9e00214 100644 --- a/shared/nm-glib-aux/nm-shared-utils.h +++ b/shared/nm-glib-aux/nm-shared-utils.h @@ -2007,4 +2007,16 @@ nm_strvarray_set_strv (GArray **array, const char *const*strv) nm_strvarray_add (*array, strv[0]); } +/*****************************************************************************/ + +void _nm_utils_format_variant_attributes_full (GString *str, + const NMUtilsNamedValue *values, + guint num_values, + char attr_separator, + char key_value_separator); + +char *_nm_utils_format_variant_attributes (GHashTable *attributes, + char attr_separator, + char key_value_separator); + #endif /* __NM_SHARED_UTILS_H__ */ |