On Tue, May 26, 2015 at 15:01:48 +0200, Michal Privoznik wrote:
From: Pavel Boldin <pboldin(a)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