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.
This commit is contained in:
@@ -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);
|
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_sriov_vf_parse_vlans (NMSriovVF *vf, const char *str, GError **error);
|
||||||
|
|
||||||
gboolean _nm_utils_bridge_vlan_verify_list (GPtrArray *vlans,
|
gboolean _nm_utils_bridge_vlan_verify_list (GPtrArray *vlans,
|
||||||
|
@@ -5448,23 +5448,6 @@ nm_utils_is_json_object (const char *str, GError **error)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
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 *
|
static char *
|
||||||
attribute_unescape (const char *start, const char *end)
|
attribute_unescape (const char *start, const char *end)
|
||||||
{
|
{
|
||||||
@@ -5699,55 +5682,6 @@ next:
|
|||||||
return g_steal_pointer (&ht);
|
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:
|
* nm_utils_format_variant_attributes:
|
||||||
* @attributes: (element-type utf8 GVariant): a #GHashTable mapping attribute names to #GVariant values
|
* @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 attr_separator,
|
||||||
char key_value_separator)
|
char key_value_separator)
|
||||||
{
|
{
|
||||||
GString *str = NULL;
|
return _nm_utils_format_variant_attributes (attributes,
|
||||||
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,
|
attr_separator,
|
||||||
key_value_separator);
|
key_value_separator);
|
||||||
return g_string_free (str, FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@@ -4872,3 +4872,97 @@ nm_indirect_g_free (gpointer arg)
|
|||||||
|
|
||||||
nm_clear_g_free (p);
|
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);
|
||||||
|
}
|
||||||
|
@@ -2007,4 +2007,16 @@ nm_strvarray_set_strv (GArray **array, const char *const*strv)
|
|||||||
nm_strvarray_add (*array, strv[0]);
|
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__ */
|
#endif /* __NM_SHARED_UTILS_H__ */
|
||||||
|
Reference in New Issue
Block a user