mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-01 18:50:12 +01:00
glib-aux: add int64/uint64 types to NMValueType
This commit is contained in:
parent
6107a94085
commit
9a2c47fc34
2 changed files with 86 additions and 2 deletions
|
|
@ -33,6 +33,12 @@ nm_json_gstr_append_int64(GString *gstr, gint64 v)
|
|||
g_string_append_printf(gstr, "%" G_GINT64_FORMAT, v);
|
||||
}
|
||||
|
||||
static inline void
|
||||
nm_json_gstr_append_uint64(GString *gstr, guint64 v)
|
||||
{
|
||||
g_string_append_printf(gstr, "%" G_GUINT64_FORMAT, v);
|
||||
}
|
||||
|
||||
void nm_json_gstr_append_obj_name(GString *gstr, const char *key, char start_container);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
@ -239,6 +245,44 @@ nm_jansson_json_as_int(const NMJsonVt *vt, const nm_json_t *elem, int *out_val)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static inline int
|
||||
nm_jansson_json_as_int64(const NMJsonVt *vt, const nm_json_t *elem, gint64 *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 < G_MININT64 || v > G_MAXINT64)
|
||||
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;
|
||||
|
||||
if (!elem)
|
||||
return 0;
|
||||
|
||||
if (!nm_json_is_integer(elem))
|
||||
return -EINVAL;
|
||||
|
||||
v = vt->nm_json_integer_value(elem);
|
||||
if (v < 0 || v > G_MAXUINT64)
|
||||
return -ERANGE;
|
||||
|
||||
NM_SET_OUT(out_val, v);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline int
|
||||
nm_jansson_json_as_string(const NMJsonVt *vt, const nm_json_t *elem, const char **out_val)
|
||||
{
|
||||
|
|
@ -272,6 +316,12 @@ nm_value_type_to_json(NMValueType value_type, GString *gstr, gconstpointer p_fie
|
|||
case NM_VALUE_TYPE_INT:
|
||||
nm_json_gstr_append_int64(gstr, *((const int *) p_field));
|
||||
return;
|
||||
case NM_VALUE_TYPE_INT64:
|
||||
nm_json_gstr_append_int64(gstr, *((const gint64 *) p_field));
|
||||
return;
|
||||
case NM_VALUE_TYPE_UINT64:
|
||||
nm_json_gstr_append_uint64(gstr, *((const guint64 *) p_field));
|
||||
return;
|
||||
case NM_VALUE_TYPE_STRING:
|
||||
nm_json_gstr_append_string(gstr, *((const char *const *) p_field));
|
||||
return;
|
||||
|
|
@ -294,6 +344,10 @@ nm_value_type_from_json(const NMJsonVt * vt,
|
|||
return (nm_jansson_json_as_int32(vt, elem, out_val) > 0);
|
||||
case NM_VALUE_TYPE_INT:
|
||||
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_UINT64:
|
||||
return (nm_jansson_json_as_uint64(vt, elem, out_val) > 0);
|
||||
|
||||
/* warning: this overwrites/leaks the previous value. You better have *out_val
|
||||
* point to uninitialized memory or NULL. */
|
||||
|
|
|
|||
|
|
@ -6,12 +6,14 @@
|
|||
#ifndef __NM_VALUE_TYPE_H__
|
||||
#define __NM_VALUE_TYPE_H__
|
||||
|
||||
typedef enum {
|
||||
typedef enum _nm_packed {
|
||||
NM_VALUE_TYPE_UNSPEC = 1,
|
||||
NM_VALUE_TYPE_BOOL = 2,
|
||||
NM_VALUE_TYPE_INT32 = 3,
|
||||
NM_VALUE_TYPE_INT = 4,
|
||||
NM_VALUE_TYPE_STRING = 5,
|
||||
NM_VALUE_TYPE_INT64 = 5,
|
||||
NM_VALUE_TYPE_UINT64 = 6,
|
||||
NM_VALUE_TYPE_STRING = 7,
|
||||
} NMValueType;
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
@ -21,6 +23,8 @@ typedef enum {
|
|||
typedef union {
|
||||
bool v_bool;
|
||||
gint32 v_int32;
|
||||
gint64 v_int64;
|
||||
guint64 v_uint64;
|
||||
int v_int;
|
||||
const char *v_string;
|
||||
|
||||
|
|
@ -78,6 +82,12 @@ nm_value_type_cmp(NMValueType value_type, gconstpointer p_a, gconstpointer p_b)
|
|||
case NM_VALUE_TYPE_INT:
|
||||
NM_CMP_DIRECT(*((const int *) p_a), *((const int *) p_b));
|
||||
return 0;
|
||||
case NM_VALUE_TYPE_INT64:
|
||||
NM_CMP_DIRECT(*((const gint64 *) p_a), *((const gint64 *) p_b));
|
||||
return 0;
|
||||
case NM_VALUE_TYPE_UINT64:
|
||||
NM_CMP_DIRECT(*((const guint64 *) p_a), *((const guint64 *) p_b));
|
||||
return 0;
|
||||
case NM_VALUE_TYPE_STRING:
|
||||
return nm_strcmp0(*((const char *const *) p_a), *((const char *const *) p_b));
|
||||
case NM_VALUE_TYPE_UNSPEC:
|
||||
|
|
@ -106,6 +116,12 @@ nm_value_type_copy(NMValueType value_type, gpointer dst, gconstpointer src)
|
|||
case NM_VALUE_TYPE_INT:
|
||||
(*((int *) dst) = *((const int *) src));
|
||||
return;
|
||||
case NM_VALUE_TYPE_INT64:
|
||||
(*((gint64 *) dst) = *((const gint64 *) src));
|
||||
return;
|
||||
case NM_VALUE_TYPE_UINT64:
|
||||
(*((guint64 *) dst) = *((const guint64 *) src));
|
||||
return;
|
||||
case NM_VALUE_TYPE_STRING:
|
||||
/* self assignment safe! */
|
||||
if (*((char **) dst) != *((const char *const *) src)) {
|
||||
|
|
@ -132,6 +148,12 @@ nm_value_type_get_from_variant(NMValueType value_type,
|
|||
case NM_VALUE_TYPE_INT32:
|
||||
*((gint32 *) dst) = g_variant_get_int32(variant);
|
||||
return;
|
||||
case NM_VALUE_TYPE_INT64:
|
||||
*((gint64 *) dst) = g_variant_get_int64(variant);
|
||||
return;
|
||||
case NM_VALUE_TYPE_UINT64:
|
||||
*((guint64 *) dst) = g_variant_get_uint64(variant);
|
||||
return;
|
||||
case NM_VALUE_TYPE_STRING:
|
||||
if (clone) {
|
||||
g_free(*((char **) dst));
|
||||
|
|
@ -163,6 +185,10 @@ nm_value_type_to_variant(NMValueType value_type, gconstpointer src)
|
|||
return g_variant_new_boolean(*((const bool *) src));
|
||||
case NM_VALUE_TYPE_INT32:
|
||||
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_UINT64:
|
||||
return g_variant_new_uint64(*((const guint64 *) src));
|
||||
case NM_VALUE_TYPE_STRING:
|
||||
v_string = *((const char *const *) src);
|
||||
return v_string ? g_variant_new_string(v_string) : NULL;
|
||||
|
|
@ -187,6 +213,10 @@ nm_value_type_get_variant_type(NMValueType value_type)
|
|||
return G_VARIANT_TYPE_BOOLEAN;
|
||||
case NM_VALUE_TYPE_INT32:
|
||||
return G_VARIANT_TYPE_INT32;
|
||||
case NM_VALUE_TYPE_INT64:
|
||||
return G_VARIANT_TYPE_INT64;
|
||||
case NM_VALUE_TYPE_UINT64:
|
||||
return G_VARIANT_TYPE_UINT64;
|
||||
case NM_VALUE_TYPE_STRING:
|
||||
return G_VARIANT_TYPE_STRING;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue