The new helper adds a unsigned value, stored as _UINT if it fits into
the type and stored as _ULLONG otherwise.
This is useful for the statistics code which is quite tolerant to
changes in type in cases when we'll need more range for the value.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/libvirt_private.syms | 1 +
src/util/virtypedparam.c | 36 ++++++++++++++++++++++++++++++++++++
src/util/virtypedparam.h | 6 ++++++
3 files changed, 43 insertions(+)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index b58be6aa33..4e21851c53 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -3555,6 +3555,7 @@ virTypedParamListAddLLong;
virTypedParamListAddString;
virTypedParamListAddUInt;
virTypedParamListAddULLong;
+virTypedParamListAddUnsigned;
virTypedParamListConcat;
virTypedParamListFetch;
virTypedParamListFree;
diff --git a/src/util/virtypedparam.c b/src/util/virtypedparam.c
index ee9c6d1c45..52eea0fc54 100644
--- a/src/util/virtypedparam.c
+++ b/src/util/virtypedparam.c
@@ -921,6 +921,42 @@ virTypedParamListAddULLong(virTypedParamList *list,
}
+/**
+ * virTypedParamListAddUnsigned:
+ * @list: typed parameter list
+ * @value: value to add (see below on details)
+ * @namefmt: formatting string for constructing the name of the added value
+ * @...: additional parameters to format the name
+ *
+ * Adds a new typed parameter to @list. The name of the parameter is formatted
+ * from @fmt.
+ *
+ * @value is added as VIR_TYPED_PARAM_UINT, unless it doesn't fit into the data
+ * type in which case it's added as VIR_TYPED_PARAM_ULLONG.
+ */
+void
+virTypedParamListAddUnsigned(virTypedParamList *list,
+ unsigned long long value,
+ const char *namefmt,
+ ...)
+{
+ virTypedParameterPtr par = virTypedParamListExtend(list);
+ va_list ap;
+
+ if (value > UINT_MAX) {
+ virTypedParameterAssignValue(par, VIR_TYPED_PARAM_ULLONG, value);
+ } else {
+ unsigned int ival = value;
+
+ virTypedParameterAssignValue(par, VIR_TYPED_PARAM_UINT, ival);
+ }
+
+ va_start(ap, namefmt);
+ virTypedParamSetNameVPrintf(list, par, namefmt, ap);
+ va_end(ap);
+}
+
+
void
virTypedParamListAddString(virTypedParamList *list,
const char *value,
diff --git a/src/util/virtypedparam.h b/src/util/virtypedparam.h
index 7065683297..88f810bf78 100644
--- a/src/util/virtypedparam.h
+++ b/src/util/virtypedparam.h
@@ -187,6 +187,12 @@ virTypedParamListAddULLong(virTypedParamList *list,
...)
G_GNUC_PRINTF(3, 4);
void
+virTypedParamListAddUnsigned(virTypedParamList *list,
+ unsigned long long value,
+ const char *namefmt,
+ ...)
+ G_GNUC_PRINTF(3, 4);
+void
virTypedParamListAddString(virTypedParamList *list,
const char *value,
const char *namefmt,
--
2.39.2