From 637a7c865adb2e72902d15280b7c89033f9cd4f6 Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Mon, 6 May 2013 12:04:06 +0200 Subject: [PATCH] Introduce virTypedParamsCheck internal API This API is useful for checking whether only a specific subset of supported typed parameters were passed. --- docs/apibuild.py | 1 + src/libvirt_private.syms | 1 + src/util/virtypedparam.c | 26 ++++++++++++++++++++++++++ src/util/virtypedparam.h | 5 +++++ 4 files changed, 33 insertions(+) diff --git a/docs/apibuild.py b/docs/apibuild.py index 686a23496c..c816197dc9 100755 --- a/docs/apibuild.py +++ b/docs/apibuild.py @@ -67,6 +67,7 @@ ignored_functions = { "virTypedParamsValidate": "internal function in virtypedparam.c", "virTypedParameterAssign": "internal function in virtypedparam.c", "virTypedParameterAssignFromStr": "internal function in virtypedparam.c", + "virTypedParamsCheck": "internal function in virtypedparam.c", } ignored_macros = { diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 912a177427..af32b3e36f 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1943,6 +1943,7 @@ virTPMCreateCancelPath; # util/virtypedparam.h virTypedParameterAssign; virTypedParameterAssignFromStr; +virTypedParamsCheck; virTypedParamsValidate; diff --git a/src/util/virtypedparam.c b/src/util/virtypedparam.c index eef9e305ca..825148b00c 100644 --- a/src/util/virtypedparam.c +++ b/src/util/virtypedparam.c @@ -109,6 +109,32 @@ cleanup: } +/* Check if params contains only specified parameter names. Return true if + * only specified names are present in params, false if params contains any + * unspecified parameter name. */ +bool +virTypedParamsCheck(virTypedParameterPtr params, + int nparams, + const char **names, + int nnames) +{ + int i, j; + + for (i = 0; i < nparams; i++) { + bool found = false; + for (j = 0; j < nnames; j++) { + if (STREQ(params[i].field, names[j])) { + found = true; + break; + } + } + if (!found) + return false; + } + + return true; +} + /* Assign name, type, and the appropriately typed arg to param; in the * case of a string, the caller is assumed to have malloc'd a string, * or can pass NULL to have this function malloc an empty string. diff --git a/src/util/virtypedparam.h b/src/util/virtypedparam.h index 8f6bd1b837..b0f852202b 100644 --- a/src/util/virtypedparam.h +++ b/src/util/virtypedparam.h @@ -29,6 +29,11 @@ int virTypedParamsValidate(virTypedParameterPtr params, int nparams, /* const char *name, int type ... */ ...) ATTRIBUTE_SENTINEL ATTRIBUTE_RETURN_CHECK; +bool virTypedParamsCheck(virTypedParameterPtr params, + int nparams, + const char **names, + int nnames); + int virTypedParameterAssign(virTypedParameterPtr param, const char *name, int type, /* TYPE arg */ ...) ATTRIBUTE_RETURN_CHECK;