Allow the user to call with nparams too small, per API documentation.
* src/libxl/libxl_driver.c
(libxlDomainGetSchedulerParametersFlags): Allow fewer than max.
---
src/libxl/libxl_driver.c | 22 ++++++++++------------
1 files changed, 10 insertions(+), 12 deletions(-)
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index d324632..06dfe0a 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -3631,11 +3631,6 @@ libxlDomainGetSchedulerParametersFlags(virDomainPtr dom,
goto cleanup;
}
- if (*nparams < XEN_SCHED_CREDIT_NPARAM) {
- libxlError(VIR_ERR_INVALID_ARG, "%s", _("Invalid parameter
count"));
- goto cleanup;
- }
-
if (libxl_sched_credit_domain_get(&priv->ctx, dom->id, &sc_info) != 0)
{
libxlError(VIR_ERR_INTERNAL_ERROR,
_("Failed to get scheduler parameters for domain
'%d'"
@@ -3651,15 +3646,18 @@ libxlDomainGetSchedulerParametersFlags(virDomainPtr dom,
goto cleanup;
}
- params[1].value.ui = sc_info.cap;
- params[1].type = VIR_TYPED_PARAM_UINT;
- if (virStrcpyStatic(params[1].field, "cap") == NULL) {
- libxlError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("Field cap too long for destination"));
- goto cleanup;
+ if (*nparams > 1) {
+ params[1].value.ui = sc_info.cap;
+ params[1].type = VIR_TYPED_PARAM_UINT;
+ if (virStrcpyStatic(params[1].field, "cap") == NULL) {
+ libxlError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("Field cap too long for
destination"));
+ goto cleanup;
+ }
}
- *nparams = XEN_SCHED_CREDIT_NPARAM;
+ if (*nparams > XEN_SCHED_CREDIT_NPARAM)
+ *nparams = XEN_SCHED_CREDIT_NPARAM;
ret = 0;
cleanup:
--
1.7.4.4