On Tue, May 26, 2015 at 15:01:48 +0200, Michal Privoznik wrote: > From: Pavel Boldin <pboldin@xxxxxxxxxxxx> > > 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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list