}
-#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
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;
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;
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;
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;
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;
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;
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;
"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,