diff options
author | Thomas Haller <thaller@redhat.com> | 2021-06-29 08:10:58 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2021-07-12 13:34:39 +0200 |
commit | da7c2a6ebeab9ecba88072717e91240cadf9f7cb (patch) | |
tree | 014772e1eccff6a1ee5742fd02d70dd907534948 | |
parent | 0a2711eaad2a97ddd29a7e91908376a0f88573ce (diff) | |
download | NetworkManager-da7c2a6ebeab9ecba88072717e91240cadf9f7cb.tar.gz |
glib-aux: add uint32 and uint64 types to NMValueType
-rw-r--r-- | src/libnm-glib-aux/nm-json-aux.h | 53 | ||||
-rw-r--r-- | src/libnm-glib-aux/nm-value-type.h | 34 |
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 */ |