Introduce virTypedParamsClear public API

The function is just a renamed public version of former
virTypedParameterArrayClear.
This commit is contained in:
Jiri Denemark 2013-01-16 00:42:35 +01:00
parent f52e9f1f4d
commit de78bf604c
11 changed files with 70 additions and 86 deletions

View File

@ -987,8 +987,8 @@ remoteDeserializeTypedParameters(remote_typed_param *args_params_val,
cleanup: cleanup:
if (rv < 0) { if (rv < 0) {
virTypedParameterArrayClear(params, i); virTypedParamsFree(params, i);
VIR_FREE(params); params = NULL;
} }
return params; return params;
} }
@ -1037,8 +1037,7 @@ remoteDispatchDomainGetSchedulerParameters(virNetServerPtr server ATTRIBUTE_UNUS
cleanup: cleanup:
if (rv < 0) if (rv < 0)
virNetMessageSaveError(rerr); virNetMessageSaveError(rerr);
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
if (dom) if (dom)
virDomainFree(dom); virDomainFree(dom);
return rv; return rv;
@ -1147,8 +1146,7 @@ remoteDispatchDomainGetSchedulerParametersFlags(virNetServerPtr server ATTRIBUTE
cleanup: cleanup:
if (rv < 0) if (rv < 0)
virNetMessageSaveError(rerr); virNetMessageSaveError(rerr);
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
if (dom) if (dom)
virDomainFree(dom); virDomainFree(dom);
return rv; return rv;
@ -1336,8 +1334,7 @@ success:
cleanup: cleanup:
if (rv < 0) if (rv < 0)
virNetMessageSaveError(rerr); virNetMessageSaveError(rerr);
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
if (dom) if (dom)
virDomainFree(dom); virDomainFree(dom);
return rv; return rv;
@ -1966,8 +1963,7 @@ success:
cleanup: cleanup:
if (rv < 0) if (rv < 0)
virNetMessageSaveError(rerr); virNetMessageSaveError(rerr);
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
if (dom) if (dom)
virDomainFree(dom); virDomainFree(dom);
return rv; return rv;
@ -2031,8 +2027,7 @@ success:
cleanup: cleanup:
if (rv < 0) if (rv < 0)
virNetMessageSaveError(rerr); virNetMessageSaveError(rerr);
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
if (dom) if (dom)
virDomainFree(dom); virDomainFree(dom);
return rv; return rv;
@ -2096,8 +2091,7 @@ success:
cleanup: cleanup:
if (rv < 0) if (rv < 0)
virNetMessageSaveError(rerr); virNetMessageSaveError(rerr);
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
if (dom) if (dom)
virDomainFree(dom); virDomainFree(dom);
return rv; return rv;
@ -2358,8 +2352,7 @@ success:
cleanup: cleanup:
if (rv < 0) if (rv < 0)
virNetMessageSaveError(rerr); virNetMessageSaveError(rerr);
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
if (dom) if (dom)
virDomainFree(dom); virDomainFree(dom);
return rv; return rv;
@ -3862,8 +3855,7 @@ success:
cleanup: cleanup:
if (rv < 0) if (rv < 0)
virNetMessageSaveError(rerr); virNetMessageSaveError(rerr);
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
if (dom) if (dom)
virDomainFree(dom); virDomainFree(dom);
return rv; return rv;
@ -3937,8 +3929,7 @@ success:
cleanup: cleanup:
if (rv < 0) if (rv < 0)
virNetMessageSaveError(rerr); virNetMessageSaveError(rerr);
virTypedParameterArrayClear(params, args->ncpus * args->nparams); virTypedParamsFree(params, args->ncpus * args->nparams);
VIR_FREE(params);
if (dom) if (dom)
virDomainFree(dom); virDomainFree(dom);
return rv; return rv;
@ -4570,8 +4561,7 @@ success:
cleanup: cleanup:
if (rv < 0) if (rv < 0)
virNetMessageSaveError(rerr); virNetMessageSaveError(rerr);
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
return rv; return rv;
} }

View File

@ -607,6 +607,9 @@ virTypedParamsAddFromString(virTypedParameterPtr *params,
int type, int type,
const char *value); const char *value);
void void
virTypedParamsClear (virTypedParameterPtr params,
int nparams);
void
virTypedParamsFree (virTypedParameterPtr params, virTypedParamsFree (virTypedParameterPtr params,
int nparams); int nparams);

View File

@ -537,6 +537,7 @@ skip_function = (
"virTypedParamsAddString", "virTypedParamsAddString",
"virTypedParamsAddUInt", "virTypedParamsAddUInt",
"virTypedParamsAddULLong", "virTypedParamsAddULLong",
"virTypedParamsClear",
"virTypedParamsFree", "virTypedParamsFree",
"virTypedParamsGet", "virTypedParamsGet",
"virTypedParamsGetBoolean", "virTypedParamsGetBoolean",

View File

@ -367,8 +367,7 @@ libvirt_virDomainBlockStatsFlags(PyObject *self ATTRIBUTE_UNUSED,
ret = getPyVirTypedParameter(params, nparams); ret = getPyVirTypedParameter(params, nparams);
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
return ret; return ret;
} }
@ -456,7 +455,7 @@ libvirt_virDomainGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args)
start_cpu += queried_ncpus; start_cpu += queried_ncpus;
ncpus -= queried_ncpus; ncpus -= queried_ncpus;
virTypedParameterArrayClear(params, sumparams); virTypedParamsClear(params, sumparams);
} }
} else { } else {
LIBVIRT_BEGIN_ALLOW_THREADS; LIBVIRT_BEGIN_ALLOW_THREADS;
@ -498,13 +497,11 @@ libvirt_virDomainGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args)
Py_DECREF(total); Py_DECREF(total);
} }
virTypedParameterArrayClear(params, sumparams); virTypedParamsFree(params, sumparams);
VIR_FREE(params);
return ret; return ret;
error: error:
virTypedParameterArrayClear(params, sumparams); virTypedParamsFree(params, sumparams);
VIR_FREE(params);
Py_DECREF(ret); Py_DECREF(ret);
return error; return error;
} }
@ -668,8 +665,7 @@ libvirt_virDomainGetSchedulerParameters(PyObject *self ATTRIBUTE_UNUSED,
ret = getPyVirTypedParameter(params, nparams); ret = getPyVirTypedParameter(params, nparams);
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
return ret; return ret;
} }
@ -717,8 +713,7 @@ libvirt_virDomainGetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED,
ret = getPyVirTypedParameter(params, nparams); ret = getPyVirTypedParameter(params, nparams);
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
return ret; return ret;
} }
@ -791,8 +786,7 @@ libvirt_virDomainSetSchedulerParameters(PyObject *self ATTRIBUTE_UNUSED,
ret = VIR_PY_INT_SUCCESS; ret = VIR_PY_INT_SUCCESS;
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
VIR_FREE(new_params); VIR_FREE(new_params);
return ret; return ret;
} }
@ -868,8 +862,7 @@ libvirt_virDomainSetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED,
ret = VIR_PY_INT_SUCCESS; ret = VIR_PY_INT_SUCCESS;
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
VIR_FREE(new_params); VIR_FREE(new_params);
return ret; return ret;
} }
@ -943,8 +936,7 @@ libvirt_virDomainSetBlkioParameters(PyObject *self ATTRIBUTE_UNUSED,
ret = VIR_PY_INT_SUCCESS; ret = VIR_PY_INT_SUCCESS;
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
VIR_FREE(new_params); VIR_FREE(new_params);
return ret; return ret;
} }
@ -991,8 +983,7 @@ libvirt_virDomainGetBlkioParameters(PyObject *self ATTRIBUTE_UNUSED,
ret = getPyVirTypedParameter(params, nparams); ret = getPyVirTypedParameter(params, nparams);
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
return ret; return ret;
} }
@ -1065,8 +1056,7 @@ libvirt_virDomainSetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED,
ret = VIR_PY_INT_SUCCESS; ret = VIR_PY_INT_SUCCESS;
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
VIR_FREE(new_params); VIR_FREE(new_params);
return ret; return ret;
} }
@ -1113,8 +1103,7 @@ libvirt_virDomainGetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED,
ret = getPyVirTypedParameter(params, nparams); ret = getPyVirTypedParameter(params, nparams);
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
return ret; return ret;
} }
@ -1187,8 +1176,7 @@ libvirt_virDomainSetNumaParameters(PyObject *self ATTRIBUTE_UNUSED,
ret = VIR_PY_INT_SUCCESS; ret = VIR_PY_INT_SUCCESS;
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
VIR_FREE(new_params); VIR_FREE(new_params);
return ret; return ret;
} }
@ -1235,8 +1223,7 @@ libvirt_virDomainGetNumaParameters(PyObject *self ATTRIBUTE_UNUSED,
ret = getPyVirTypedParameter(params, nparams); ret = getPyVirTypedParameter(params, nparams);
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
return ret; return ret;
} }
@ -1310,8 +1297,7 @@ libvirt_virDomainSetInterfaceParameters(PyObject *self ATTRIBUTE_UNUSED,
ret = VIR_PY_INT_SUCCESS; ret = VIR_PY_INT_SUCCESS;
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
VIR_FREE(new_params); VIR_FREE(new_params);
return ret; return ret;
} }
@ -1359,8 +1345,7 @@ libvirt_virDomainGetInterfaceParameters(PyObject *self ATTRIBUTE_UNUSED,
ret = getPyVirTypedParameter(params, nparams); ret = getPyVirTypedParameter(params, nparams);
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
return ret; return ret;
} }
@ -4305,8 +4290,7 @@ libvirt_virDomainSetBlockIoTune(PyObject *self ATTRIBUTE_UNUSED,
ret = VIR_PY_INT_SUCCESS; ret = VIR_PY_INT_SUCCESS;
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
VIR_FREE(new_params); VIR_FREE(new_params);
return ret; return ret;
} }
@ -4354,8 +4338,7 @@ libvirt_virDomainGetBlockIoTune(PyObject *self ATTRIBUTE_UNUSED,
ret = getPyVirTypedParameter(params, nparams); ret = getPyVirTypedParameter(params, nparams);
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
return ret; return ret;
} }
@ -6466,8 +6449,7 @@ libvirt_virNodeSetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED,
ret = VIR_PY_INT_SUCCESS; ret = VIR_PY_INT_SUCCESS;
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
VIR_FREE(new_params); VIR_FREE(new_params);
return ret; return ret;
} }
@ -6514,8 +6496,7 @@ libvirt_virNodeGetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED,
ret = getPyVirTypedParameter(params, nparams); ret = getPyVirTypedParameter(params, nparams);
cleanup: cleanup:
virTypedParameterArrayClear(params, nparams); virTypedParamsFree(params, nparams);
VIR_FREE(params);
return ret; return ret;
} }

View File

@ -1876,7 +1876,6 @@ virTimeStringThenRaw;
# virtypedparam.h # virtypedparam.h
virTypedParameterArrayClear;
virTypedParameterArrayValidate; virTypedParameterArrayValidate;
virTypedParameterAssign; virTypedParameterAssign;
virTypedParameterAssignFromStr; virTypedParameterAssignFromStr;

View File

@ -591,6 +591,7 @@ LIBVIRT_1.0.2 {
virTypedParamsAddString; virTypedParamsAddString;
virTypedParamsAddUInt; virTypedParamsAddUInt;
virTypedParamsAddULLong; virTypedParamsAddULLong;
virTypedParamsClear;
virTypedParamsFree; virTypedParamsFree;
virTypedParamsGet; virTypedParamsGet;
virTypedParamsGetBoolean; virTypedParamsGetBoolean;

View File

@ -1612,7 +1612,7 @@ remoteDeserializeTypedParameters(remote_typed_param *ret_params_val,
cleanup: cleanup:
if (rv < 0) if (rv < 0)
virTypedParameterArrayClear(params, i); virTypedParamsClear(params, i);
return rv; return rv;
} }
@ -2754,7 +2754,7 @@ static int remoteDomainGetCPUStats(virDomainPtr domain,
rv = ret.nparams; rv = ret.nparams;
cleanup: cleanup:
if (rv < 0) if (rv < 0)
virTypedParameterArrayClear(params, nparams * ncpus); virTypedParamsClear(params, nparams * ncpus);
xdr_free((xdrproc_t) xdr_remote_domain_get_cpu_stats_ret, xdr_free((xdrproc_t) xdr_remote_domain_get_cpu_stats_ret,
(char *) &ret); (char *) &ret);

View File

@ -490,8 +490,7 @@ elsif ($opt_b) {
" $2,\n" . " $2,\n" .
" &n$1)) == NULL)\n" . " &n$1)) == NULL)\n" .
" goto cleanup;\n"); " goto cleanup;\n");
push(@free_list, " virTypedParameterArrayClear($1, n$1);"); push(@free_list, " virTypedParamsFree($1, n$1);");
push(@free_list, " VIR_FREE($1);");
} elsif ($args_member =~ m/<\S+>;/ or $args_member =~ m/\[\S+\];/) { } elsif ($args_member =~ m/<\S+>;/ or $args_member =~ m/\[\S+\];/) {
# just make all other array types fail # just make all other array types fail
die "unhandled type for argument value: $args_member"; die "unhandled type for argument value: $args_member";

View File

@ -41,20 +41,6 @@ VIR_ENUM_IMPL(virTypedParameter, VIR_TYPED_PARAM_LAST,
"boolean", "boolean",
"string") "string")
void
virTypedParameterArrayClear(virTypedParameterPtr params, int nparams)
{
int i;
if (!params)
return;
for (i = 0; i < nparams; i++) {
if (params[i].type == VIR_TYPED_PARAM_STRING)
VIR_FREE(params[i].value.s);
}
}
/* Validate that PARAMS contains only recognized parameter names with /* Validate that PARAMS contains only recognized parameter names with
* correct types, and with no duplicates. Pass in as many name/type * correct types, and with no duplicates. Pass in as many name/type
* pairs as appropriate, and pass NULL to end the list of accepted * pairs as appropriate, and pass NULL to end the list of accepted
@ -897,7 +883,7 @@ error:
* *
* Adds new parameter called @name with char * type and sets its value to * Adds new parameter called @name with char * type and sets its value to
* @value. The function creates its own copy of @value string, which needs to * @value. The function creates its own copy of @value string, which needs to
* be freed using virTypedParamsFree. If @params array * be freed using virTypedParamsFree or virTypedParamsClear. If @params array
* points to NULL or to a space that is not large enough to accommodate the * points to NULL or to a space that is not large enough to accommodate the
* new parameter (@maxparams < @nparams + 1), the function allocates more * new parameter (@maxparams < @nparams + 1), the function allocates more
* space for it and updates @maxparams. On success, @nparams is incremented * space for it and updates @maxparams. On success, @nparams is incremented
@ -959,7 +945,7 @@ error:
* Adds new parameter called @name with the requested @type and parses its * Adds new parameter called @name with the requested @type and parses its
* value from the @value string. If the requested type is string, the function * value from the @value string. If the requested type is string, the function
* creates its own copy of the @value string, which needs to be freed using * creates its own copy of the @value string, which needs to be freed using
* virTypedParamsFree. If @params array points to NULL * virTypedParamsFree or virTypedParamsClear. If @params array points to NULL
* or to a space that is not large enough to accommodate the new parameter * or to a space that is not large enough to accommodate the new parameter
* (@maxparams < @nparams + 1), the function allocates more space for it and * (@maxparams < @nparams + 1), the function allocates more space for it and
* updates @maxparams. On success, @nparams is incremented by one. The * updates @maxparams. On success, @nparams is incremented by one. The
@ -1000,6 +986,32 @@ error:
} }
/**
* virTypedParamsClear:
* @params: the array of typed parameters
* @nparams: number of parameters in the @params array
*
* Frees all memory used by string parameters. The memory occupied by @params
* is not freed; use virTypedParamsFree if you want it to be freed too.
*
* Returns nothing.
*/
void
virTypedParamsClear(virTypedParameterPtr params,
int nparams)
{
int i;
if (!params)
return;
for (i = 0; i < nparams; i++) {
if (params[i].type == VIR_TYPED_PARAM_STRING)
VIR_FREE(params[i].value.s);
}
}
/** /**
* virTypedParamsFree: * virTypedParamsFree:
* @params: the array of typed parameters * @params: the array of typed parameters
@ -1015,6 +1027,6 @@ virTypedParamsFree(virTypedParameterPtr params,
int nparams) int nparams)
{ {
virResetLastError(); virResetLastError();
virTypedParameterArrayClear(params, nparams); virTypedParamsClear(params, nparams);
VIR_FREE(params); VIR_FREE(params);
} }

View File

@ -25,8 +25,6 @@
# include "internal.h" # include "internal.h"
void virTypedParameterArrayClear(virTypedParameterPtr params, int nparams);
int virTypedParameterArrayValidate(virTypedParameterPtr params, int nparams, int virTypedParameterArrayValidate(virTypedParameterPtr params, int nparams,
/* const char *name, int type ... */ ...) /* const char *name, int type ... */ ...)
ATTRIBUTE_SENTINEL ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_SENTINEL ATTRIBUTE_RETURN_CHECK;

View File

@ -6182,7 +6182,7 @@ cmdCPUStats(vshControl *ctl, const vshCmd *cmd)
} }
cpu += ncpus; cpu += ncpus;
show_count -= ncpus; show_count -= ncpus;
virTypedParameterArrayClear(params, nparams * ncpus); virTypedParamsClear(params, nparams * ncpus);
} }
VIR_FREE(params); VIR_FREE(params);