libnm-core: support variant attributes of type int32 and uint64

This commit is contained in:
Beniamino Galvani
2020-05-25 16:07:11 +02:00
parent 0ca1c7d182
commit f695dd8de3
2 changed files with 22 additions and 0 deletions

View File

@@ -5654,6 +5654,24 @@ nm_utils_parse_variant_attributes (const char *string,
return NULL; return NULL;
} }
variant = g_variant_new_uint32 (num); variant = g_variant_new_uint32 (num);
} else if (g_variant_type_equal ((*s)->type, G_VARIANT_TYPE_INT32)) {
gint64 num = _nm_utils_ascii_str_to_int64 (value, 10, G_MININT32, G_MAXINT32, G_MAXINT64);
if (num == G_MAXINT64) {
g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
_("invalid int32 value '%s' for attribute '%s'"), value, (*s)->name);
return NULL;
}
variant = g_variant_new_int32 (num);
} else if (g_variant_type_equal ((*s)->type, G_VARIANT_TYPE_UINT64)) {
guint64 num = _nm_utils_ascii_str_to_uint64 (value, 10, 0, G_MAXUINT64, G_MAXUINT64);
if (num == G_MAXUINT64 && errno != 0) {
g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
_("invalid uint64 value '%s' for attribute '%s'"), value, (*s)->name);
return NULL;
}
variant = g_variant_new_uint64 (num);
} else if (g_variant_type_equal ((*s)->type, G_VARIANT_TYPE_BYTE)) { } else if (g_variant_type_equal ((*s)->type, G_VARIANT_TYPE_BYTE)) {
gint64 num = _nm_utils_ascii_str_to_int64 (value, 10, 0, G_MAXUINT8, -1); gint64 num = _nm_utils_ascii_str_to_int64 (value, 10, 0, G_MAXUINT8, -1);

View File

@@ -4913,6 +4913,10 @@ _nm_utils_format_variant_attributes_full (GString *str,
if (g_variant_is_of_type (variant, G_VARIANT_TYPE_UINT32)) if (g_variant_is_of_type (variant, G_VARIANT_TYPE_UINT32))
value = nm_sprintf_buf (buf, "%u", g_variant_get_uint32 (variant)); value = nm_sprintf_buf (buf, "%u", g_variant_get_uint32 (variant));
else if (g_variant_is_of_type (variant, G_VARIANT_TYPE_INT32))
value = nm_sprintf_buf (buf, "%d", (int) g_variant_get_int32 (variant));
else if (g_variant_is_of_type (variant, G_VARIANT_TYPE_UINT64))
value = nm_sprintf_buf (buf, "%"G_GUINT64_FORMAT, g_variant_get_uint64 (variant));
else if (g_variant_is_of_type (variant, G_VARIANT_TYPE_BYTE)) else if (g_variant_is_of_type (variant, G_VARIANT_TYPE_BYTE))
value = nm_sprintf_buf (buf, "%hhu", g_variant_get_byte (variant)); value = nm_sprintf_buf (buf, "%hhu", g_variant_get_byte (variant));
else if (g_variant_is_of_type (variant, G_VARIANT_TYPE_BOOLEAN)) else if (g_variant_is_of_type (variant, G_VARIANT_TYPE_BOOLEAN))