summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2020-05-14 16:43:32 +0200
committerThomas Haller <thaller@redhat.com>2020-05-14 17:21:12 +0200
commitef9fe850966a628b42344e70f6738cbb1eda767a (patch)
tree7f1de80d442f552f30d35f5aa5bd114872a3919c
parent61d6f1abc2244d0a83553e4e947bc3a680133857 (diff)
downloadNetworkManager-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.h5
-rw-r--r--libnm-core/nm-utils.c88
-rw-r--r--shared/nm-glib-aux/nm-shared-utils.c94
-rw-r--r--shared/nm-glib-aux/nm-shared-utils.h12
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__ */