[PATCH v3 16/25] util: typedparam: Introduce virTypedParamListAddUnsigned

Peter Krempa pkrempa at redhat.com
Wed Apr 19 12:04:33 UTC 2023


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 at 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



More information about the libvir-list mailing list