diff --git a/docs/Makefile.am b/docs/Makefile.am index 8b8074c3c0..10476902a9 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -318,7 +318,7 @@ $(APIBUILD_STAMP): $(srcdir)/apibuild.py \ $(top_srcdir)/src/libvirt-admin.c \ $(top_srcdir)/src/util/virerror.c \ $(top_srcdir)/src/util/virevent.c \ - $(top_srcdir)/src/util/virtypedparam.c + $(top_srcdir)/src/util/virtypedparam-public.c $(AM_V_GEN)srcdir=$(srcdir) builddir=$(builddir) \ $(RUNUTF8) $(PYTHON) $(APIBUILD) touch $@ diff --git a/docs/apibuild.py b/docs/apibuild.py index dbdc1c95af..92886e1276 100755 --- a/docs/apibuild.py +++ b/docs/apibuild.py @@ -52,7 +52,7 @@ included_files = { "libvirt-stream.c": "Stream interfaces for the libvirt library", "virerror.c": "implements error handling and reporting code for libvirt", "virevent.c": "event loop for monitoring file handles", - "virtypedparam.c": "virTypedParameters APIs", + "virtypedparam-public.c": "virTypedParameters APIs", } qemu_included_files = { diff --git a/src/util/Makefile.inc.am b/src/util/Makefile.inc.am index adb5e6d727..482b657a90 100644 --- a/src/util/Makefile.inc.am +++ b/src/util/Makefile.inc.am @@ -207,6 +207,7 @@ UTIL_SOURCES = \ util/virtime.h \ util/virtpm.c \ util/virtpm.h \ + util/virtypedparam-public.c \ util/virtypedparam.c \ util/virtypedparam.h \ util/virusb.c \ diff --git a/src/util/virtypedparam-public.c b/src/util/virtypedparam-public.c new file mode 100644 index 0000000000..585e851f38 --- /dev/null +++ b/src/util/virtypedparam-public.c @@ -0,0 +1,795 @@ +/* + * virtypedparam-public.c: utility functions for dealing with virTypedParameters + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + * + */ +#include +#include "virtypedparam.h" + +#include "viralloc.h" +#include "virerror.h" +#include "virstring.h" + +#define VIR_FROM_THIS VIR_FROM_NONE + +/* The following APIs are public and their signature may never change. */ + +/** + * virTypedParamsGet: + * @params: array of typed parameters + * @nparams: number of parameters in the @params array + * @name: name of the parameter to find + * + * Finds typed parameter called @name. + * + * Returns pointer to the parameter or NULL if it does not exist in @params. + * This function does not raise an error, even when returning NULL. + */ +virTypedParameterPtr +virTypedParamsGet(virTypedParameterPtr params, + int nparams, + const char *name) +{ + size_t i; + + /* No need to reset errors, since this function doesn't report any. */ + + if (!params || !name) + return NULL; + + for (i = 0; i < nparams; i++) { + if (STREQ(params[i].field, name)) + return params + i; + } + + return NULL; +} + + +#define VIR_TYPED_PARAM_CHECK_TYPE(check_type) \ + do { if (param->type != check_type) { \ + virReportError(VIR_ERR_INVALID_ARG, \ + _("Invalid type '%s' requested for parameter '%s', " \ + "actual type is '%s'"), \ + virTypedParameterTypeToString(check_type), \ + name, \ + virTypedParameterTypeToString(param->type)); \ + virDispatchError(NULL); \ + return -1; \ + } } while (0) + + +/** + * virTypedParamsGetInt: + * @params: array of typed parameters + * @nparams: number of parameters in the @params array + * @name: name of the parameter to find + * @value: where to store the parameter's value + * + * Finds typed parameter called @name and store its int value in @value. The + * function fails with VIR_ERR_INVALID_ARG error if the parameter does not + * have the expected type. By passing NULL as @value, the function may be + * used to check presence and type of the parameter. + * + * Returns 1 on success, 0 when the parameter does not exist in @params, or + * -1 on error. + */ +int +virTypedParamsGetInt(virTypedParameterPtr params, + int nparams, + const char *name, + int *value) +{ + virTypedParameterPtr param; + + virResetLastError(); + + if (!(param = virTypedParamsGet(params, nparams, name))) + return 0; + + VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_INT); + if (value) + *value = param->value.i; + + return 1; +} + + +/** + * virTypedParamsGetUInt: + * @params: array of typed parameters + * @nparams: number of parameters in the @params array + * @name: name of the parameter to find + * @value: where to store the parameter's value + * + * Finds typed parameter called @name and store its unsigned int value in + * @value. The function fails with VIR_ERR_INVALID_ARG error if the parameter + * does not have the expected type. By passing NULL as @value, the function + * may be used to check presence and type of the parameter. + * + * Returns 1 on success, 0 when the parameter does not exist in @params, or + * -1 on error. + */ +int +virTypedParamsGetUInt(virTypedParameterPtr params, + int nparams, + const char *name, + unsigned int *value) +{ + virTypedParameterPtr param; + + virResetLastError(); + + if (!(param = virTypedParamsGet(params, nparams, name))) + return 0; + + VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_UINT); + if (value) + *value = param->value.ui; + + return 1; +} + + +/** + * virTypedParamsGetLLong: + * @params: array of typed parameters + * @nparams: number of parameters in the @params array + * @name: name of the parameter to find + * @value: where to store the parameter's value + * + * Finds typed parameter called @name and store its long long int value in + * @value. The function fails with VIR_ERR_INVALID_ARG error if the parameter + * does not have the expected type. By passing NULL as @value, the function + * may be used to check presence and type of the parameter. + * + * Returns 1 on success, 0 when the parameter does not exist in @params, or + * -1 on error. + */ +int +virTypedParamsGetLLong(virTypedParameterPtr params, + int nparams, + const char *name, + long long *value) +{ + virTypedParameterPtr param; + + virResetLastError(); + + if (!(param = virTypedParamsGet(params, nparams, name))) + return 0; + + VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_LLONG); + if (value) + *value = param->value.l; + + return 1; +} + + +/** + * virTypedParamsGetULLong: + * @params: array of typed parameters + * @nparams: number of parameters in the @params array + * @name: name of the parameter to find + * @value: where to store the parameter's value + * + * Finds typed parameter called @name and store its unsigned long long int + * value in @value. The function fails with VIR_ERR_INVALID_ARG error if the + * parameter does not have the expected type. By passing NULL as @value, the + * function may be used to check presence and type of the parameter. + * + * Returns 1 on success, 0 when the parameter does not exist in @params, or + * -1 on error. + */ +int +virTypedParamsGetULLong(virTypedParameterPtr params, + int nparams, + const char *name, + unsigned long long *value) +{ + virTypedParameterPtr param; + + virResetLastError(); + + if (!(param = virTypedParamsGet(params, nparams, name))) + return 0; + + VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_ULLONG); + if (value) + *value = param->value.ul; + + return 1; +} + + +/** + * virTypedParamsGetDouble: + * @params: array of typed parameters + * @nparams: number of parameters in the @params array + * @name: name of the parameter to find + * @value: where to store the parameter's value + * + * Finds typed parameter called @name and store its double value in @value. + * The function fails with VIR_ERR_INVALID_ARG error if the parameter does not + * have the expected type. By passing NULL as @value, the function may be used + * to check presence and type of the parameter. + * + * Returns 1 on success, 0 when the parameter does not exist in @params, or + * -1 on error. + */ +int +virTypedParamsGetDouble(virTypedParameterPtr params, + int nparams, + const char *name, + double *value) +{ + virTypedParameterPtr param; + + virResetLastError(); + + if (!(param = virTypedParamsGet(params, nparams, name))) + return 0; + + VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_DOUBLE); + if (value) + *value = param->value.d; + + return 1; +} + + +/** + * virTypedParamsGetBoolean: + * @params: array of typed parameters + * @nparams: number of parameters in the @params array + * @name: name of the parameter to find + * @value: where to store the parameter's value + * + * Finds typed parameter called @name and store its boolean value in @value. + * The function fails with VIR_ERR_INVALID_ARG error if the parameter does not + * have the expected type. By passing NULL as @value, the function may be used + * to check presence and type of the parameter. + * + * Returns 1 on success, 0 when the parameter does not exist in @params, or + * -1 on error. + */ +int +virTypedParamsGetBoolean(virTypedParameterPtr params, + int nparams, + const char *name, + int *value) +{ + virTypedParameterPtr param; + + virResetLastError(); + + if (!(param = virTypedParamsGet(params, nparams, name))) + return 0; + + VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_BOOLEAN); + if (value) + *value = !!param->value.b; + + return 1; +} + + +/** + * virTypedParamsGetString: + * @params: array of typed parameters + * @nparams: number of parameters in the @params array + * @name: name of the parameter to find + * @value: where to store the parameter's value + * + * Finds typed parameter called @name and store its char * value in @value. + * The function does not create a copy of the string and the caller must not + * free the string @value points to. The function fails with + * VIR_ERR_INVALID_ARG error if the parameter does not have the expected type. + * By passing NULL as @value, the function may be used to check presence and + * type of the parameter. + * + * Returns 1 on success, 0 when the parameter does not exist in @params, or + * -1 on error. + */ +int +virTypedParamsGetString(virTypedParameterPtr params, + int nparams, + const char *name, + const char **value) +{ + virTypedParameterPtr param; + + virResetLastError(); + + if (!(param = virTypedParamsGet(params, nparams, name))) + return 0; + + VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_STRING); + if (value) + *value = param->value.s; + + return 1; +} + + +/** + * virTypedParamsAddInt: + * @params: pointer to the array of typed parameters + * @nparams: number of parameters in the @params array + * @maxparams: maximum number of parameters that can be stored in @params + * array without allocating more memory + * @name: name of the parameter to find + * @value: the value to store into the new parameter + * + * Adds new parameter called @name with int type and sets its value to @value. + * If @params array points to NULL 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 updates @maxparams. On success, @nparams + * is incremented by one. The function fails with VIR_ERR_INVALID_ARG error + * if the parameter already exists in @params. + * + * Returns 0 on success, -1 on error. + */ +int +virTypedParamsAddInt(virTypedParameterPtr *params, + int *nparams, + int *maxparams, + const char *name, + int value) +{ + size_t max = *maxparams; + size_t n = *nparams; + + virResetLastError(); + + if (VIR_RESIZE_N(*params, max, n, 1) < 0) + goto error; + *maxparams = max; + + if (virTypedParameterAssign(*params + n, name, + VIR_TYPED_PARAM_INT, value) < 0) + goto error; + + *nparams += 1; + return 0; + + error: + virDispatchError(NULL); + return -1; +} + + +/** + * virTypedParamsAddUInt: + * @params: pointer to the array of typed parameters + * @nparams: number of parameters in the @params array + * @maxparams: maximum number of parameters that can be stored in @params + * array without allocating more memory + * @name: name of the parameter to find + * @value: the value to store into the new parameter + * + * Adds new parameter called @name with unsigned int type and sets its value + * to @value. If @params array points to NULL 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 updates @maxparams. On success, + * @nparams is incremented by one. The function fails with VIR_ERR_INVALID_ARG + * error if the parameter already exists in @params. + * + * Returns 0 on success, -1 on error. + */ +int +virTypedParamsAddUInt(virTypedParameterPtr *params, + int *nparams, + int *maxparams, + const char *name, + unsigned int value) +{ + size_t max = *maxparams; + size_t n = *nparams; + + virResetLastError(); + + if (VIR_RESIZE_N(*params, max, n, 1) < 0) + goto error; + *maxparams = max; + + if (virTypedParameterAssign(*params + n, name, + VIR_TYPED_PARAM_UINT, value) < 0) + goto error; + + *nparams += 1; + return 0; + + error: + virDispatchError(NULL); + return -1; +} + + +/** + * virTypedParamsAddLLong: + * @params: pointer to the array of typed parameters + * @nparams: number of parameters in the @params array + * @maxparams: maximum number of parameters that can be stored in @params + * array without allocating more memory + * @name: name of the parameter to find + * @value: the value to store into the new parameter + * + * Adds new parameter called @name with long long int type and sets its value + * to @value. If @params array points to NULL 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 updates @maxparams. On success, + * @nparams is incremented by one. The function fails with VIR_ERR_INVALID_ARG + * error if the parameter already exists in @params. + * + * Returns 0 on success, -1 on error. + */ +int +virTypedParamsAddLLong(virTypedParameterPtr *params, + int *nparams, + int *maxparams, + const char *name, + long long value) +{ + size_t max = *maxparams; + size_t n = *nparams; + + virResetLastError(); + + if (VIR_RESIZE_N(*params, max, n, 1) < 0) + goto error; + *maxparams = max; + + if (virTypedParameterAssign(*params + n, name, + VIR_TYPED_PARAM_LLONG, value) < 0) + goto error; + + *nparams += 1; + return 0; + + error: + virDispatchError(NULL); + return -1; +} + + +/** + * virTypedParamsAddULLong: + * @params: pointer to the array of typed parameters + * @nparams: number of parameters in the @params array + * @maxparams: maximum number of parameters that can be stored in @params + * array without allocating more memory + * @name: name of the parameter to find + * @value: the value to store into the new parameter + * + * Adds new parameter called @name with unsigned long long type and sets its + * value to @value. If @params array points to NULL 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 updates @maxparams. On success, + * @nparams is incremented by one. The function fails with VIR_ERR_INVALID_ARG + * error if the parameter already exists in @params. + * + * Returns 0 on success, -1 on error. + */ +int +virTypedParamsAddULLong(virTypedParameterPtr *params, + int *nparams, + int *maxparams, + const char *name, + unsigned long long value) +{ + size_t max = *maxparams; + size_t n = *nparams; + + virResetLastError(); + + if (VIR_RESIZE_N(*params, max, n, 1) < 0) + goto error; + *maxparams = max; + + if (virTypedParameterAssign(*params + n, name, + VIR_TYPED_PARAM_ULLONG, value) < 0) + goto error; + + *nparams += 1; + return 0; + + error: + virDispatchError(NULL); + return -1; +} + + +/** + * virTypedParamsAddDouble: + * @params: pointer to the array of typed parameters + * @nparams: number of parameters in the @params array + * @maxparams: maximum number of parameters that can be stored in @params + * array without allocating more memory + * @name: name of the parameter to find + * @value: the value to store into the new parameter + * + * Adds new parameter called @name with double type and sets its value to + * @value. If @params array points to NULL 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 updates @maxparams. On success, + * @nparams is incremented by one. The function fails with VIR_ERR_INVALID_ARG + * error if the parameter already exists in @params. + * + * Returns 0 on success, -1 on error. + */ +int +virTypedParamsAddDouble(virTypedParameterPtr *params, + int *nparams, + int *maxparams, + const char *name, + double value) +{ + size_t max = *maxparams; + size_t n = *nparams; + + virResetLastError(); + + if (VIR_RESIZE_N(*params, max, n, 1) < 0) + goto error; + *maxparams = max; + + if (virTypedParameterAssign(*params + n, name, + VIR_TYPED_PARAM_DOUBLE, value) < 0) + goto error; + + *nparams += 1; + return 0; + + error: + virDispatchError(NULL); + return -1; +} + + +/** + * virTypedParamsAddBoolean: + * @params: pointer to the array of typed parameters + * @nparams: number of parameters in the @params array + * @maxparams: maximum number of parameters that can be stored in @params + * array without allocating more memory + * @name: name of the parameter to find + * @value: the value to store into the new parameter + * + * Adds new parameter called @name with boolean type and sets its value to + * @value. If @params array points to NULL 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 updates @maxparams. On success, + * @nparams is incremented by one. The function fails with VIR_ERR_INVALID_ARG + * error if the parameter already exists in @params. + * + * Returns 0 on success, -1 on error. + */ +int +virTypedParamsAddBoolean(virTypedParameterPtr *params, + int *nparams, + int *maxparams, + const char *name, + int value) +{ + size_t max = *maxparams; + size_t n = *nparams; + + virResetLastError(); + + if (VIR_RESIZE_N(*params, max, n, 1) < 0) + goto error; + *maxparams = max; + + if (virTypedParameterAssign(*params + n, name, + VIR_TYPED_PARAM_BOOLEAN, value) < 0) + goto error; + + *nparams += 1; + return 0; + + error: + virDispatchError(NULL); + return -1; +} + + +/** + * virTypedParamsAddString: + * @params: pointer to the array of typed parameters + * @nparams: number of parameters in the @params array + * @maxparams: maximum number of parameters that can be stored in @params + * array without allocating more memory + * @name: name of the parameter to find + * @value: the value to store into the new parameter + * + * 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 + * be freed using virTypedParamsFree or virTypedParamsClear. If @params array + * points to NULL 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 updates @maxparams. On success, @nparams is incremented + * by one. The function fails with VIR_ERR_INVALID_ARG error if the parameter + * already exists in @params. + * + * Returns 0 on success, -1 on error. + */ +int +virTypedParamsAddString(virTypedParameterPtr *params, + int *nparams, + int *maxparams, + const char *name, + const char *value) +{ + char *str = NULL; + size_t max = *maxparams; + size_t n = *nparams; + + virResetLastError(); + + if (VIR_RESIZE_N(*params, max, n, 1) < 0) + goto error; + *maxparams = max; + + if (VIR_STRDUP(str, value) < 0) + goto error; + + if (virTypedParameterAssign(*params + n, name, + VIR_TYPED_PARAM_STRING, str) < 0) { + VIR_FREE(str); + goto error; + } + + *nparams += 1; + return 0; + + error: + virDispatchError(NULL); + return -1; +} + +/** + * virTypedParamsAddStringList: + * @params: array of typed parameters + * @nparams: number of parameters in the @params array + * @maxparams: maximum number of parameters that can be stored in @params + * array without allocating more memory + * @name: name of the parameter to store values to + * @values: the values to store into the new parameters + * + * Packs NULL-terminated list of strings @values into @params under the + * key @name. + * + * Returns 0 on success, -1 on error. + */ +int +virTypedParamsAddStringList(virTypedParameterPtr *params, + int *nparams, + int *maxparams, + const char *name, + const char **values) +{ + size_t i; + int rv = -1; + + if (!values) + return 0; + + for (i = 0; values[i]; i++) { + if ((rv = virTypedParamsAddString(params, nparams, maxparams, + name, values[i])) < 0) + break; + } + + return rv; +} + + +/** + * virTypedParamsAddFromString: + * @params: pointer to the array of typed parameters + * @nparams: number of parameters in the @params array + * @maxparams: maximum number of parameters that can be stored in @params + * array without allocating more memory + * @name: name of the parameter to find + * @type: type of the parameter + * @value: the value to store into the new parameter encoded as a string + * + * 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 + * creates its own copy of the @value string, which needs to be freed using + * virTypedParamsFree or virTypedParamsClear. If @params array points to NULL + * 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 + * updates @maxparams. On success, @nparams is incremented by one. The + * function fails with VIR_ERR_INVALID_ARG error if the parameter already + * exists in @params. + * + * Returns 0 on success, -1 on error. + */ +int +virTypedParamsAddFromString(virTypedParameterPtr *params, + int *nparams, + int *maxparams, + const char *name, + int type, + const char *value) +{ + size_t max = *maxparams; + size_t n = *nparams; + + virResetLastError(); + + if (VIR_RESIZE_N(*params, max, n, 1) < 0) + goto error; + *maxparams = max; + + if (virTypedParameterAssignFromStr(*params + n, name, type, value) < 0) + goto error; + + *nparams += 1; + return 0; + + error: + virDispatchError(NULL); + return -1; +} + + +/** + * 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) +{ + size_t 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: + * @params: the array of typed parameters + * @nparams: number of parameters in the @params array + * + * Frees all memory used by string parameters and the memory occupied by + * @params. + * + * Returns nothing. + */ +void +virTypedParamsFree(virTypedParameterPtr params, + int nparams) +{ + virTypedParamsClear(params, nparams); + VIR_FREE(params); +} diff --git a/src/util/virtypedparam.c b/src/util/virtypedparam.c index 779714d146..7abf0257ce 100644 --- a/src/util/virtypedparam.c +++ b/src/util/virtypedparam.c @@ -43,12 +43,6 @@ VIR_ENUM_IMPL(virTypedParameter, "string", ); -/* When editing this file, ensure that public exported functions - * (those in libvirt_public.syms) either trigger no errors, or else - * reset error on entrance and call virDispatchError() on exit; while - * internal utility functions (those in libvirt_private.syms) may - * report errors that the caller will dispatch. */ - static int virTypedParamsSortName(const void *left, const void *right) { @@ -452,40 +446,6 @@ virTypedParamsCopy(virTypedParameterPtr *dst, } -/* The following APIs are public and their signature may never change. */ - -/** - * virTypedParamsGet: - * @params: array of typed parameters - * @nparams: number of parameters in the @params array - * @name: name of the parameter to find - * - * Finds typed parameter called @name. - * - * Returns pointer to the parameter or NULL if it does not exist in @params. - * This function does not raise an error, even when returning NULL. - */ -virTypedParameterPtr -virTypedParamsGet(virTypedParameterPtr params, - int nparams, - const char *name) -{ - size_t i; - - /* No need to reset errors, since this function doesn't report any. */ - - if (!params || !name) - return NULL; - - for (i = 0; i < nparams; i++) { - if (STREQ(params[i].field, name)) - return params + i; - } - - return NULL; -} - - /** * virTypedParamsFilter: * @params: array of typed parameters @@ -528,273 +488,6 @@ virTypedParamsFilter(virTypedParameterPtr params, } -#define VIR_TYPED_PARAM_CHECK_TYPE(check_type) \ - do { if (param->type != check_type) { \ - virReportError(VIR_ERR_INVALID_ARG, \ - _("Invalid type '%s' requested for parameter '%s', " \ - "actual type is '%s'"), \ - virTypedParameterTypeToString(check_type), \ - name, \ - virTypedParameterTypeToString(param->type)); \ - virDispatchError(NULL); \ - return -1; \ - } } while (0) - - -/** - * virTypedParamsGetInt: - * @params: array of typed parameters - * @nparams: number of parameters in the @params array - * @name: name of the parameter to find - * @value: where to store the parameter's value - * - * Finds typed parameter called @name and store its int value in @value. The - * function fails with VIR_ERR_INVALID_ARG error if the parameter does not - * have the expected type. By passing NULL as @value, the function may be - * used to check presence and type of the parameter. - * - * Returns 1 on success, 0 when the parameter does not exist in @params, or - * -1 on error. - */ -int -virTypedParamsGetInt(virTypedParameterPtr params, - int nparams, - const char *name, - int *value) -{ - virTypedParameterPtr param; - - virResetLastError(); - - if (!(param = virTypedParamsGet(params, nparams, name))) - return 0; - - VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_INT); - if (value) - *value = param->value.i; - - return 1; -} - - -/** - * virTypedParamsGetUInt: - * @params: array of typed parameters - * @nparams: number of parameters in the @params array - * @name: name of the parameter to find - * @value: where to store the parameter's value - * - * Finds typed parameter called @name and store its unsigned int value in - * @value. The function fails with VIR_ERR_INVALID_ARG error if the parameter - * does not have the expected type. By passing NULL as @value, the function - * may be used to check presence and type of the parameter. - * - * Returns 1 on success, 0 when the parameter does not exist in @params, or - * -1 on error. - */ -int -virTypedParamsGetUInt(virTypedParameterPtr params, - int nparams, - const char *name, - unsigned int *value) -{ - virTypedParameterPtr param; - - virResetLastError(); - - if (!(param = virTypedParamsGet(params, nparams, name))) - return 0; - - VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_UINT); - if (value) - *value = param->value.ui; - - return 1; -} - - -/** - * virTypedParamsGetLLong: - * @params: array of typed parameters - * @nparams: number of parameters in the @params array - * @name: name of the parameter to find - * @value: where to store the parameter's value - * - * Finds typed parameter called @name and store its long long int value in - * @value. The function fails with VIR_ERR_INVALID_ARG error if the parameter - * does not have the expected type. By passing NULL as @value, the function - * may be used to check presence and type of the parameter. - * - * Returns 1 on success, 0 when the parameter does not exist in @params, or - * -1 on error. - */ -int -virTypedParamsGetLLong(virTypedParameterPtr params, - int nparams, - const char *name, - long long *value) -{ - virTypedParameterPtr param; - - virResetLastError(); - - if (!(param = virTypedParamsGet(params, nparams, name))) - return 0; - - VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_LLONG); - if (value) - *value = param->value.l; - - return 1; -} - - -/** - * virTypedParamsGetULLong: - * @params: array of typed parameters - * @nparams: number of parameters in the @params array - * @name: name of the parameter to find - * @value: where to store the parameter's value - * - * Finds typed parameter called @name and store its unsigned long long int - * value in @value. The function fails with VIR_ERR_INVALID_ARG error if the - * parameter does not have the expected type. By passing NULL as @value, the - * function may be used to check presence and type of the parameter. - * - * Returns 1 on success, 0 when the parameter does not exist in @params, or - * -1 on error. - */ -int -virTypedParamsGetULLong(virTypedParameterPtr params, - int nparams, - const char *name, - unsigned long long *value) -{ - virTypedParameterPtr param; - - virResetLastError(); - - if (!(param = virTypedParamsGet(params, nparams, name))) - return 0; - - VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_ULLONG); - if (value) - *value = param->value.ul; - - return 1; -} - - -/** - * virTypedParamsGetDouble: - * @params: array of typed parameters - * @nparams: number of parameters in the @params array - * @name: name of the parameter to find - * @value: where to store the parameter's value - * - * Finds typed parameter called @name and store its double value in @value. - * The function fails with VIR_ERR_INVALID_ARG error if the parameter does not - * have the expected type. By passing NULL as @value, the function may be used - * to check presence and type of the parameter. - * - * Returns 1 on success, 0 when the parameter does not exist in @params, or - * -1 on error. - */ -int -virTypedParamsGetDouble(virTypedParameterPtr params, - int nparams, - const char *name, - double *value) -{ - virTypedParameterPtr param; - - virResetLastError(); - - if (!(param = virTypedParamsGet(params, nparams, name))) - return 0; - - VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_DOUBLE); - if (value) - *value = param->value.d; - - return 1; -} - - -/** - * virTypedParamsGetBoolean: - * @params: array of typed parameters - * @nparams: number of parameters in the @params array - * @name: name of the parameter to find - * @value: where to store the parameter's value - * - * Finds typed parameter called @name and store its boolean value in @value. - * The function fails with VIR_ERR_INVALID_ARG error if the parameter does not - * have the expected type. By passing NULL as @value, the function may be used - * to check presence and type of the parameter. - * - * Returns 1 on success, 0 when the parameter does not exist in @params, or - * -1 on error. - */ -int -virTypedParamsGetBoolean(virTypedParameterPtr params, - int nparams, - const char *name, - int *value) -{ - virTypedParameterPtr param; - - virResetLastError(); - - if (!(param = virTypedParamsGet(params, nparams, name))) - return 0; - - VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_BOOLEAN); - if (value) - *value = !!param->value.b; - - return 1; -} - - -/** - * virTypedParamsGetString: - * @params: array of typed parameters - * @nparams: number of parameters in the @params array - * @name: name of the parameter to find - * @value: where to store the parameter's value - * - * Finds typed parameter called @name and store its char * value in @value. - * The function does not create a copy of the string and the caller must not - * free the string @value points to. The function fails with - * VIR_ERR_INVALID_ARG error if the parameter does not have the expected type. - * By passing NULL as @value, the function may be used to check presence and - * type of the parameter. - * - * Returns 1 on success, 0 when the parameter does not exist in @params, or - * -1 on error. - */ -int -virTypedParamsGetString(virTypedParameterPtr params, - int nparams, - const char *name, - const char **value) -{ - virTypedParameterPtr param; - - virResetLastError(); - - if (!(param = virTypedParamsGet(params, nparams, name))) - return 0; - - VIR_TYPED_PARAM_CHECK_TYPE(VIR_TYPED_PARAM_STRING); - if (value) - *value = param->value.s; - - return 1; -} - - /** * virTypedParamsGetStringList: * @params: array of typed parameters @@ -852,474 +545,6 @@ virTypedParamsGetStringList(virTypedParameterPtr params, } -/** - * virTypedParamsAddInt: - * @params: pointer to the array of typed parameters - * @nparams: number of parameters in the @params array - * @maxparams: maximum number of parameters that can be stored in @params - * array without allocating more memory - * @name: name of the parameter to find - * @value: the value to store into the new parameter - * - * Adds new parameter called @name with int type and sets its value to @value. - * If @params array points to NULL 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 updates @maxparams. On success, @nparams - * is incremented by one. The function fails with VIR_ERR_INVALID_ARG error - * if the parameter already exists in @params. - * - * Returns 0 on success, -1 on error. - */ -int -virTypedParamsAddInt(virTypedParameterPtr *params, - int *nparams, - int *maxparams, - const char *name, - int value) -{ - size_t max = *maxparams; - size_t n = *nparams; - - virResetLastError(); - - if (VIR_RESIZE_N(*params, max, n, 1) < 0) - goto error; - *maxparams = max; - - if (virTypedParameterAssign(*params + n, name, - VIR_TYPED_PARAM_INT, value) < 0) - goto error; - - *nparams += 1; - return 0; - - error: - virDispatchError(NULL); - return -1; -} - - -/** - * virTypedParamsAddUInt: - * @params: pointer to the array of typed parameters - * @nparams: number of parameters in the @params array - * @maxparams: maximum number of parameters that can be stored in @params - * array without allocating more memory - * @name: name of the parameter to find - * @value: the value to store into the new parameter - * - * Adds new parameter called @name with unsigned int type and sets its value - * to @value. If @params array points to NULL 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 updates @maxparams. On success, - * @nparams is incremented by one. The function fails with VIR_ERR_INVALID_ARG - * error if the parameter already exists in @params. - * - * Returns 0 on success, -1 on error. - */ -int -virTypedParamsAddUInt(virTypedParameterPtr *params, - int *nparams, - int *maxparams, - const char *name, - unsigned int value) -{ - size_t max = *maxparams; - size_t n = *nparams; - - virResetLastError(); - - if (VIR_RESIZE_N(*params, max, n, 1) < 0) - goto error; - *maxparams = max; - - if (virTypedParameterAssign(*params + n, name, - VIR_TYPED_PARAM_UINT, value) < 0) - goto error; - - *nparams += 1; - return 0; - - error: - virDispatchError(NULL); - return -1; -} - - -/** - * virTypedParamsAddLLong: - * @params: pointer to the array of typed parameters - * @nparams: number of parameters in the @params array - * @maxparams: maximum number of parameters that can be stored in @params - * array without allocating more memory - * @name: name of the parameter to find - * @value: the value to store into the new parameter - * - * Adds new parameter called @name with long long int type and sets its value - * to @value. If @params array points to NULL 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 updates @maxparams. On success, - * @nparams is incremented by one. The function fails with VIR_ERR_INVALID_ARG - * error if the parameter already exists in @params. - * - * Returns 0 on success, -1 on error. - */ -int -virTypedParamsAddLLong(virTypedParameterPtr *params, - int *nparams, - int *maxparams, - const char *name, - long long value) -{ - size_t max = *maxparams; - size_t n = *nparams; - - virResetLastError(); - - if (VIR_RESIZE_N(*params, max, n, 1) < 0) - goto error; - *maxparams = max; - - if (virTypedParameterAssign(*params + n, name, - VIR_TYPED_PARAM_LLONG, value) < 0) - goto error; - - *nparams += 1; - return 0; - - error: - virDispatchError(NULL); - return -1; -} - - -/** - * virTypedParamsAddULLong: - * @params: pointer to the array of typed parameters - * @nparams: number of parameters in the @params array - * @maxparams: maximum number of parameters that can be stored in @params - * array without allocating more memory - * @name: name of the parameter to find - * @value: the value to store into the new parameter - * - * Adds new parameter called @name with unsigned long long type and sets its - * value to @value. If @params array points to NULL 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 updates @maxparams. On success, - * @nparams is incremented by one. The function fails with VIR_ERR_INVALID_ARG - * error if the parameter already exists in @params. - * - * Returns 0 on success, -1 on error. - */ -int -virTypedParamsAddULLong(virTypedParameterPtr *params, - int *nparams, - int *maxparams, - const char *name, - unsigned long long value) -{ - size_t max = *maxparams; - size_t n = *nparams; - - virResetLastError(); - - if (VIR_RESIZE_N(*params, max, n, 1) < 0) - goto error; - *maxparams = max; - - if (virTypedParameterAssign(*params + n, name, - VIR_TYPED_PARAM_ULLONG, value) < 0) - goto error; - - *nparams += 1; - return 0; - - error: - virDispatchError(NULL); - return -1; -} - - -/** - * virTypedParamsAddDouble: - * @params: pointer to the array of typed parameters - * @nparams: number of parameters in the @params array - * @maxparams: maximum number of parameters that can be stored in @params - * array without allocating more memory - * @name: name of the parameter to find - * @value: the value to store into the new parameter - * - * Adds new parameter called @name with double type and sets its value to - * @value. If @params array points to NULL 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 updates @maxparams. On success, - * @nparams is incremented by one. The function fails with VIR_ERR_INVALID_ARG - * error if the parameter already exists in @params. - * - * Returns 0 on success, -1 on error. - */ -int -virTypedParamsAddDouble(virTypedParameterPtr *params, - int *nparams, - int *maxparams, - const char *name, - double value) -{ - size_t max = *maxparams; - size_t n = *nparams; - - virResetLastError(); - - if (VIR_RESIZE_N(*params, max, n, 1) < 0) - goto error; - *maxparams = max; - - if (virTypedParameterAssign(*params + n, name, - VIR_TYPED_PARAM_DOUBLE, value) < 0) - goto error; - - *nparams += 1; - return 0; - - error: - virDispatchError(NULL); - return -1; -} - - -/** - * virTypedParamsAddBoolean: - * @params: pointer to the array of typed parameters - * @nparams: number of parameters in the @params array - * @maxparams: maximum number of parameters that can be stored in @params - * array without allocating more memory - * @name: name of the parameter to find - * @value: the value to store into the new parameter - * - * Adds new parameter called @name with boolean type and sets its value to - * @value. If @params array points to NULL 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 updates @maxparams. On success, - * @nparams is incremented by one. The function fails with VIR_ERR_INVALID_ARG - * error if the parameter already exists in @params. - * - * Returns 0 on success, -1 on error. - */ -int -virTypedParamsAddBoolean(virTypedParameterPtr *params, - int *nparams, - int *maxparams, - const char *name, - int value) -{ - size_t max = *maxparams; - size_t n = *nparams; - - virResetLastError(); - - if (VIR_RESIZE_N(*params, max, n, 1) < 0) - goto error; - *maxparams = max; - - if (virTypedParameterAssign(*params + n, name, - VIR_TYPED_PARAM_BOOLEAN, value) < 0) - goto error; - - *nparams += 1; - return 0; - - error: - virDispatchError(NULL); - return -1; -} - - -/** - * virTypedParamsAddString: - * @params: pointer to the array of typed parameters - * @nparams: number of parameters in the @params array - * @maxparams: maximum number of parameters that can be stored in @params - * array without allocating more memory - * @name: name of the parameter to find - * @value: the value to store into the new parameter - * - * 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 - * be freed using virTypedParamsFree or virTypedParamsClear. If @params array - * points to NULL 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 updates @maxparams. On success, @nparams is incremented - * by one. The function fails with VIR_ERR_INVALID_ARG error if the parameter - * already exists in @params. - * - * Returns 0 on success, -1 on error. - */ -int -virTypedParamsAddString(virTypedParameterPtr *params, - int *nparams, - int *maxparams, - const char *name, - const char *value) -{ - char *str = NULL; - size_t max = *maxparams; - size_t n = *nparams; - - virResetLastError(); - - if (VIR_RESIZE_N(*params, max, n, 1) < 0) - goto error; - *maxparams = max; - - if (VIR_STRDUP(str, value) < 0) - goto error; - - if (virTypedParameterAssign(*params + n, name, - VIR_TYPED_PARAM_STRING, str) < 0) { - VIR_FREE(str); - goto error; - } - - *nparams += 1; - return 0; - - error: - virDispatchError(NULL); - return -1; -} - -/** - * virTypedParamsAddStringList: - * @params: array of typed parameters - * @nparams: number of parameters in the @params array - * @maxparams: maximum number of parameters that can be stored in @params - * array without allocating more memory - * @name: name of the parameter to store values to - * @values: the values to store into the new parameters - * - * Packs NULL-terminated list of strings @values into @params under the - * key @name. - * - * Returns 0 on success, -1 on error. - */ -int -virTypedParamsAddStringList(virTypedParameterPtr *params, - int *nparams, - int *maxparams, - const char *name, - const char **values) -{ - size_t i; - int rv = -1; - - if (!values) - return 0; - - for (i = 0; values[i]; i++) { - if ((rv = virTypedParamsAddString(params, nparams, maxparams, - name, values[i])) < 0) - break; - } - - return rv; -} - - -/** - * virTypedParamsAddFromString: - * @params: pointer to the array of typed parameters - * @nparams: number of parameters in the @params array - * @maxparams: maximum number of parameters that can be stored in @params - * array without allocating more memory - * @name: name of the parameter to find - * @type: type of the parameter - * @value: the value to store into the new parameter encoded as a string - * - * 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 - * creates its own copy of the @value string, which needs to be freed using - * virTypedParamsFree or virTypedParamsClear. If @params array points to NULL - * 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 - * updates @maxparams. On success, @nparams is incremented by one. The - * function fails with VIR_ERR_INVALID_ARG error if the parameter already - * exists in @params. - * - * Returns 0 on success, -1 on error. - */ -int -virTypedParamsAddFromString(virTypedParameterPtr *params, - int *nparams, - int *maxparams, - const char *name, - int type, - const char *value) -{ - size_t max = *maxparams; - size_t n = *nparams; - - virResetLastError(); - - if (VIR_RESIZE_N(*params, max, n, 1) < 0) - goto error; - *maxparams = max; - - if (virTypedParameterAssignFromStr(*params + n, name, type, value) < 0) - goto error; - - *nparams += 1; - return 0; - - error: - virDispatchError(NULL); - return -1; -} - - -/** - * 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) -{ - size_t 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: - * @params: the array of typed parameters - * @nparams: number of parameters in the @params array - * - * Frees all memory used by string parameters and the memory occupied by - * @params. - * - * Returns nothing. - */ -void -virTypedParamsFree(virTypedParameterPtr params, - int nparams) -{ - virTypedParamsClear(params, nparams); - VIR_FREE(params); -} - /** * virTypedParamsRemoteFree: * @remote_params_val: array of typed parameters as specified by