summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2021-06-29 08:10:58 +0200
committerThomas Haller <thaller@redhat.com>2021-07-12 13:34:39 +0200
commitda7c2a6ebeab9ecba88072717e91240cadf9f7cb (patch)
tree014772e1eccff6a1ee5742fd02d70dd907534948
parent0a2711eaad2a97ddd29a7e91908376a0f88573ce (diff)
downloadNetworkManager-da7c2a6ebeab9ecba88072717e91240cadf9f7cb.tar.gz
glib-aux: add uint32 and uint64 types to NMValueType
-rw-r--r--src/libnm-glib-aux/nm-json-aux.h53
-rw-r--r--src/libnm-glib-aux/nm-value-type.h34
2 files changed, 82 insertions, 5 deletions
diff --git a/src/libnm-glib-aux/nm-json-aux.h b/src/libnm-glib-aux/nm-json-aux.h
index b61c1f843a..ba2b35d27c 100644
--- a/src/libnm-glib-aux/nm-json-aux.h
+++ b/src/libnm-glib-aux/nm-json-aux.h
@@ -271,6 +271,49 @@ nm_jansson_json_as_int64(const NMJsonVt *vt, const nm_json_t *elem, gint64 *out_
}
static inline int
+nm_jansson_json_as_uint32(const NMJsonVt *vt, const nm_json_t *elem, guint32 *out_val)
+{
+ nm_json_int_t v;
+
+ if (!elem)
+ return 0;
+
+ if (!nm_json_is_integer(elem))
+ return -EINVAL;
+
+ v = vt->nm_json_integer_value(elem);
+ if (v < 0)
+ return -ERANGE;
+ if (v > (guint64) G_MAXUINT32)
+ return -ERANGE;
+
+ NM_SET_OUT(out_val, v);
+ return 1;
+}
+
+static inline int
+nm_jansson_json_as_uint(const NMJsonVt *vt, const nm_json_t *elem, guint *out_val)
+{
+ nm_json_int_t v;
+
+ if (!elem)
+ return 0;
+
+ if (!nm_json_is_integer(elem))
+ return -EINVAL;
+
+ v = vt->nm_json_integer_value(elem);
+ if (v < 0)
+ return -ERANGE;
+
+ if (v > (guint64) G_MAXUINT)
+ return -ERANGE;
+
+ NM_SET_OUT(out_val, v);
+ return 1;
+}
+
+static inline int
nm_jansson_json_as_uint64(const NMJsonVt *vt, const nm_json_t *elem, guint64 *out_val)
{
nm_json_int_t v;
@@ -333,6 +376,12 @@ nm_value_type_to_json(NMValueType value_type, GString *gstr, gconstpointer p_fie
case NM_VALUE_TYPE_INT64:
nm_json_gstr_append_int64(gstr, *((const gint64 *) p_field));
return;
+ case NM_VALUE_TYPE_UINT32:
+ nm_json_gstr_append_uint64(gstr, *((const guint32 *) p_field));
+ return;
+ case NM_VALUE_TYPE_UINT:
+ nm_json_gstr_append_uint64(gstr, *((const guint *) p_field));
+ return;
case NM_VALUE_TYPE_UINT64:
nm_json_gstr_append_uint64(gstr, *((const guint64 *) p_field));
return;
@@ -361,6 +410,10 @@ nm_value_type_from_json(const NMJsonVt * vt,
return (nm_jansson_json_as_int(vt, elem, out_val) > 0);
case NM_VALUE_TYPE_INT64:
return (nm_jansson_json_as_int64(vt, elem, out_val) > 0);
+ case NM_VALUE_TYPE_UINT32:
+ return (nm_jansson_json_as_uint32(vt, elem, out_val) > 0);
+ case NM_VALUE_TYPE_UINT:
+ return (nm_jansson_json_as_uint(vt, elem, out_val) > 0);
case NM_VALUE_TYPE_UINT64:
return (nm_jansson_json_as_uint64(vt, elem, out_val) > 0);
diff --git a/src/libnm-glib-aux/nm-value-type.h b/src/libnm-glib-aux/nm-value-type.h
index 541797e9bf..4e54ad463c 100644
--- a/src/libnm-glib-aux/nm-value-type.h
+++ b/src/libnm-glib-aux/nm-value-type.h
@@ -13,8 +13,10 @@ typedef enum _nm_packed {
NM_VALUE_TYPE_INT32 = 3,
NM_VALUE_TYPE_INT = 4,
NM_VALUE_TYPE_INT64 = 5,
- NM_VALUE_TYPE_UINT64 = 6,
- NM_VALUE_TYPE_STRING = 7,
+ NM_VALUE_TYPE_UINT32 = 6,
+ NM_VALUE_TYPE_UINT = 7,
+ NM_VALUE_TYPE_UINT64 = 8,
+ NM_VALUE_TYPE_STRING = 9,
} NMValueType;
/*****************************************************************************/
@@ -86,6 +88,12 @@ nm_value_type_cmp(NMValueType value_type, gconstpointer p_a, gconstpointer p_b)
case NM_VALUE_TYPE_INT64:
NM_CMP_DIRECT(*((const gint64 *) p_a), *((const gint64 *) p_b));
return 0;
+ case NM_VALUE_TYPE_UINT32:
+ NM_CMP_DIRECT(*((const guint32 *) p_a), *((const guint32 *) p_b));
+ return 0;
+ case NM_VALUE_TYPE_UINT:
+ NM_CMP_DIRECT(*((const guint *) p_a), *((const guint *) p_b));
+ return 0;
case NM_VALUE_TYPE_UINT64:
NM_CMP_DIRECT(*((const guint64 *) p_a), *((const guint64 *) p_b));
return 0;
@@ -121,6 +129,12 @@ nm_value_type_copy(NMValueType value_type, gpointer dst, gconstpointer src)
case NM_VALUE_TYPE_INT64:
(*((gint64 *) dst) = *((const gint64 *) src));
return;
+ case NM_VALUE_TYPE_UINT32:
+ (*((guint32 *) dst) = *((const guint32 *) src));
+ return;
+ case NM_VALUE_TYPE_UINT:
+ (*((guint *) dst) = *((const guint *) src));
+ return;
case NM_VALUE_TYPE_UINT64:
(*((guint64 *) dst) = *((const guint64 *) src));
return;
@@ -154,6 +168,9 @@ nm_value_type_get_from_variant(NMValueType value_type,
case NM_VALUE_TYPE_INT64:
*((gint64 *) dst) = g_variant_get_int64(variant);
return;
+ case NM_VALUE_TYPE_UINT32:
+ *((guint32 *) dst) = g_variant_get_uint32(variant);
+ return;
case NM_VALUE_TYPE_UINT64:
*((guint64 *) dst) = g_variant_get_uint64(variant);
return;
@@ -168,7 +185,8 @@ nm_value_type_get_from_variant(NMValueType value_type,
return;
case NM_VALUE_TYPE_INT:
- /* "int" also does not have a define variant type, because it's not
+ case NM_VALUE_TYPE_UINT:
+ /* "int" and "uint" also does not have a defined variant type, because it's not
* clear how many bits we would need. */
/* fall-through */
@@ -191,6 +209,8 @@ nm_value_type_to_variant(NMValueType value_type, gconstpointer src)
return g_variant_new_int32(*((const gint32 *) src));
case NM_VALUE_TYPE_INT64:
return g_variant_new_int64(*((const gint64 *) src));
+ case NM_VALUE_TYPE_UINT32:
+ return g_variant_new_uint32(*((const guint32 *) src));
case NM_VALUE_TYPE_UINT64:
return g_variant_new_uint64(*((const guint64 *) src));
case NM_VALUE_TYPE_STRING:
@@ -198,7 +218,8 @@ nm_value_type_to_variant(NMValueType value_type, gconstpointer src)
return v_string ? g_variant_new_string(v_string) : NULL;
case NM_VALUE_TYPE_INT:
- /* "int" also does not have a define variant type, because it's not
+ case NM_VALUE_TYPE_UINT:
+ /* "int" and "uint" also does not have a defined variant type, because it's not
* clear how many bits we would need. */
/* fall-through */
@@ -220,13 +241,16 @@ nm_value_type_get_variant_type(NMValueType value_type)
return G_VARIANT_TYPE_INT32;
case NM_VALUE_TYPE_INT64:
return G_VARIANT_TYPE_INT64;
+ case NM_VALUE_TYPE_UINT32:
+ return G_VARIANT_TYPE_UINT32;
case NM_VALUE_TYPE_UINT64:
return G_VARIANT_TYPE_UINT64;
case NM_VALUE_TYPE_STRING:
return G_VARIANT_TYPE_STRING;
case NM_VALUE_TYPE_INT:
- /* "int" also does not have a define variant type, because it's not
+ case NM_VALUE_TYPE_UINT:
+ /* "int" and "uint" also does not have a defined variant type, because it's not
* clear how many bits we would need. */
/* fall-through */