
On Tue, May 26, 2015 at 15:01:48 +0200, Michal Privoznik wrote:
From: Pavel Boldin <pboldin@mirantis.com>
Add multikey API:
* virTypedParamsFilter that returns all the parameters with specified name. * virTypedParamsPickStrings that returns a list with all the values for specified name and string type. ... diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms index 716dd2f..845a0b8 100644 --- a/src/libvirt_public.syms +++ b/src/libvirt_public.syms @@ -713,6 +713,8 @@ LIBVIRT_1.2.15 { LIBVIRT_1.2.16 { global: virDomainSetUserPassword; + virTypedParamsFilter; + virTypedParamsPickStrings; } LIBVIRT_1.2.15;
# .... define new API here using predicted next version number .... diff --git a/src/util/virtypedparam.c b/src/util/virtypedparam.c index e91ca99..d88d4a7 100644 --- a/src/util/virtypedparam.c +++ b/src/util/virtypedparam.c @@ -481,6 +481,57 @@ virTypedParamsGet(virTypedParameterPtr params, }
+/** + * virTypedParamsFilter: + * @params: array of typed parameters + * @nparams: number of parameters in the @params array + * @name: name of the parameter to find + * @ret: pointer to the returned array + * + * + * Filters @params retaining only the parameters named @name in the + * resulting array @ret. Caller should free the @ret array but not + * the items since they are pointing to the @params elements. + * + * Returns amount of elements in @ret on success, -1 on error. + */ +int +virTypedParamsFilter(virTypedParameterPtr params, + int nparams, + const char *name, + virTypedParameterPtr **ret)
I don't think we should make this API public. We can use it as an internal helper for implementing the other public API(s) but I don't see how this API could be any helpful to libvirt users. ...
/** + * virTypedParamsPickStrings: + * @params: array of typed parameters + * @nparams: number of parameters in the @params array + * @name: name of the parameter to find + * @values: array of returned values + * @picked: pointer to the amount of picked strings. + * + * Finds all parameters with desired @name within @params and + * store their values into @values. The @values array is self + * allocated and its length is stored into @picked. When no + * longer needed, caller should free the returned array, but not + * the items since they are taken from @params array. + * + * Returns 0 on success, -1 otherwise. + */ +int +virTypedParamsPickStrings(virTypedParameterPtr params, + int nparams, + const char *name, + const char ***values, + size_t *picked)
I don't really like the API name. We have several virTypedParamsGet* APIs including virTypedParamsGetString and I think we should be consistent when creating this new API and call it virTypedParamsGetAllStrings or something similar. We could also directly return the number of strings stored in @values, but having the extra @picked parameter works too. Although, I'd suggest renaming it. Jirka