]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: typedparam: Convert VIR_TYPED_PARAM_CHECK_TYPE into a function
authorPeter Krempa <pkrempa@redhat.com>
Wed, 22 Apr 2026 09:54:35 +0000 (11:54 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 14 May 2026 10:13:09 +0000 (12:13 +0200)
Create 'virTypedParamValidateType' which will use the same logic
encapsulated in a function. Use the error message wording from
'virTypedParamsValidate' as it contains less fluff.

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

index 3486623a9c3190122ef45e5e00ac4e0d21a4b4aa..8a953ed20f7eda6b14b2d5e1d8e72a31d717f081 100644 (file)
@@ -147,18 +147,6 @@ virTypedParamsGet(virTypedParameterPtr params,
 }
 
 
-#define VIR_TYPED_PARAM_CHECK_TYPE(check_type) \
-    do { if (param->type != check_type) { \
-        virReportError(VIR_ERR_INVALID_ARG, \
-                       _("Invalid type '%1$s' requested for parameter '%2$s', actual type is '%3$s'"), \
-                       virTypedParameterTypeToString(check_type), \
-                       name, \
-                       virTypedParameterTypeToString(param->type)); \
-        virDispatchError(NULL); \
-        return -1; \
-    } } while (0)
-
-
 /**
  * virTypedParamsGetInt:
  * @params: array of typed parameters
@@ -189,7 +177,11 @@ virTypedParamsGetInt(virTypedParameterPtr params,
     if (!(param = virTypedParamsGet(params, nparams, name)))
         return 0;
 
-    VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_INT);
+    if (virTypedParamValidateType(param, VIR_TYPED_PARAM_INT) < 0) {
+        virDispatchError(NULL);
+        return -1;
+    }
+
     if (value)
         *value = param->value.i;
 
@@ -227,7 +219,11 @@ virTypedParamsGetUInt(virTypedParameterPtr params,
     if (!(param = virTypedParamsGet(params, nparams, name)))
         return 0;
 
-    VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_UINT);
+    if (virTypedParamValidateType(param, VIR_TYPED_PARAM_UINT) < 0) {
+        virDispatchError(NULL);
+        return -1;
+    }
+
     if (value)
         *value = param->value.ui;
 
@@ -265,7 +261,11 @@ virTypedParamsGetLLong(virTypedParameterPtr params,
     if (!(param = virTypedParamsGet(params, nparams, name)))
         return 0;
 
-    VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_LLONG);
+    if (virTypedParamValidateType(param, VIR_TYPED_PARAM_LLONG) < 0) {
+        virDispatchError(NULL);
+        return -1;
+    }
+
     if (value)
         *value = param->value.l;
 
@@ -303,7 +303,11 @@ virTypedParamsGetULLong(virTypedParameterPtr params,
     if (!(param = virTypedParamsGet(params, nparams, name)))
         return 0;
 
-    VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_ULLONG);
+    if (virTypedParamValidateType(param, VIR_TYPED_PARAM_ULLONG) < 0) {
+        virDispatchError(NULL);
+        return -1;
+    }
+
     if (value)
         *value = param->value.ul;
 
@@ -341,7 +345,11 @@ virTypedParamsGetDouble(virTypedParameterPtr params,
     if (!(param = virTypedParamsGet(params, nparams, name)))
         return 0;
 
-    VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_DOUBLE);
+    if (virTypedParamValidateType(param, VIR_TYPED_PARAM_DOUBLE) < 0) {
+        virDispatchError(NULL);
+        return -1;
+    }
+
     if (value)
         *value = param->value.d;
 
@@ -379,7 +387,11 @@ virTypedParamsGetBoolean(virTypedParameterPtr params,
     if (!(param = virTypedParamsGet(params, nparams, name)))
         return 0;
 
-    VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_BOOLEAN);
+    if (virTypedParamValidateType(param, VIR_TYPED_PARAM_BOOLEAN) < 0) {
+        virDispatchError(NULL);
+        return -1;
+    }
+
     if (value)
         *value = !!param->value.b;
 
@@ -419,7 +431,11 @@ virTypedParamsGetString(virTypedParameterPtr params,
     if (!(param = virTypedParamsGet(params, nparams, name)))
         return 0;
 
-    VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_STRING);
+    if (virTypedParamValidateType(param, VIR_TYPED_PARAM_STRING) < 0) {
+        virDispatchError(NULL);
+        return -1;
+    }
+
     if (value)
         *value = param->value.s;
 
index f25530a735192a2d861e9f22fbf3048bd5a7d98e..0b40c14f902257edd7091efea82bb2c565edada8 100644 (file)
@@ -42,6 +42,33 @@ VIR_ENUM_IMPL(virTypedParameter,
               "string",
 );
 
+
+/**
+ * virTypedParamValidateType:
+ * @param: typed parameter to validate
+ * @expected_type: type to look for
+ *
+ * Validates that @param is a parameter of @expected type.
+ *
+ * Returns 0 on success; -1 on error and reports an error.
+ */
+int
+virTypedParamValidateType(virTypedParameterPtr param,
+                          unsigned int expected_type)
+{
+    if (param->type != expected_type) {
+        virReportError(VIR_ERR_INVALID_ARG,
+                       _("invalid type '%1$s' for parameter '%2$s', expected '%3$s'"),
+                       virTypedParameterTypeToString(expected_type),
+                       param->field,
+                       virTypedParameterTypeToString(param->type));
+        return -1;
+    }
+
+    return 0;
+}
+
+
 static int
 virTypedParamsSortName(const void *left,
                        const void *right,
index 774744244a046ae61b2f070a7c8c9236cc7f155c..c1fc28c6123835b68500a23719e8fce4a27f8d81 100644 (file)
@@ -63,6 +63,10 @@ struct _virTypedParameterRemote {
     virTypedParameterRemoteValue value;
 };
 
+int
+virTypedParamValidateType(virTypedParameterPtr param,
+                          unsigned int expected_type)
+    G_GNUC_WARN_UNUSED_RESULT;
 
 int
 virTypedParamsValidate(virTypedParameterPtr params,