]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: virtypedparam: Introduce virTypedParamsGetUnsigned
authorPeter Krempa <pkrempa@redhat.com>
Tue, 18 Apr 2023 11:43:56 +0000 (13:43 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 2 May 2023 12:32:46 +0000 (14:32 +0200)
Add an internal helper for fetching a typed parameter which can be
either of the '_UINT' or '_ULONG' type and store it in a unsigned long
long variable.

Since this is an internal helper it offers less protections against
invalid use compared to those we expose as public API.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/libvirt_private.syms
src/util/virtypedparam.c
src/util/virtypedparam.h

index 4e21851c532d7beed92b14c3eefc4ff221f29d3e..62c296bf5fa1245d81f553aafa5cb0d0282579b2 100644 (file)
@@ -3567,6 +3567,7 @@ virTypedParamsCopy;
 virTypedParamsDeserialize;
 virTypedParamsFilter;
 virTypedParamsGetStringList;
+virTypedParamsGetUnsigned;
 virTypedParamsRemoteFree;
 virTypedParamsReplaceString;
 virTypedParamsSerialize;
index 4490746631bcf9063f75968bf4eaf07176e05bb4..ee1b095bf9a919b0f6a214a32c719bce4a58e1ac 100644 (file)
@@ -456,6 +456,57 @@ virTypedParamsGetStringList(virTypedParameterPtr params,
 }
 
 
+/**
+ * virTypedParamsGetUnsigned:
+ * @params: array of typed parameters
+ * @nparams: number of parameters in the @params array
+ * @name: name of the parameter to find
+ * @value: where to store the parameter's value
+ *
+ * Finds typed parameter called @name and store its 'unsigned long long' or
+ * 'unsigned int' value in @value.
+ *
+ * This is an internal variand which expects that the typed parameters were
+ * already validated by calling virTypedParamsValidate and the appropriate
+ * parameter has the expected type.
+ *
+ * Returns 1 on success, 0 when the parameter does not exist in @params, or
+ * -1 on invalid usage.
+ */
+int
+virTypedParamsGetUnsigned(virTypedParameterPtr params,
+                          int nparams,
+                          const char *name,
+                          unsigned long long *value)
+{
+    virTypedParameterPtr param;
+
+    if (!(param = virTypedParamsGet(params, nparams, name)))
+        return 0;
+
+    switch ((virTypedParameterType) param->type) {
+    case VIR_TYPED_PARAM_UINT:
+        *value = param->value.ui;
+        break;
+
+    case VIR_TYPED_PARAM_ULLONG:
+        *value = param->value.ul;
+        break;
+
+    case VIR_TYPED_PARAM_INT:
+    case VIR_TYPED_PARAM_LLONG:
+    case VIR_TYPED_PARAM_DOUBLE:
+    case VIR_TYPED_PARAM_BOOLEAN:
+    case VIR_TYPED_PARAM_STRING:
+    case VIR_TYPED_PARAM_LAST:
+    default:
+        return -1;
+    }
+
+    return 1;
+}
+
+
 /**
  * virTypedParamsRemoteFree:
  * @remote_params_val: array of typed parameters as specified by
index 88f810bf78807d1cb8a42a200f66c0ba94dbff7d..c2f58e994cfdc859dd6e995525f7ba02cdacb180 100644 (file)
@@ -79,6 +79,11 @@ virTypedParamsFilter(virTypedParameterPtr params,
                      virTypedParameterPtr **ret)
     G_GNUC_WARN_UNUSED_RESULT;
 
+int
+virTypedParamsGetUnsigned(virTypedParameterPtr params,
+                          int nparams,
+                          const char *name,
+                          unsigned long long *value);
 
 int
 virTypedParameterAssign(virTypedParameterPtr param,