mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-28 11:31:16 +00:00
Introduce virTypedParamsReplaceString internal API
This commit is contained in:
parent
637a7c865a
commit
8a7f1166e1
@ -1944,6 +1944,7 @@ virTPMCreateCancelPath;
|
|||||||
virTypedParameterAssign;
|
virTypedParameterAssign;
|
||||||
virTypedParameterAssignFromStr;
|
virTypedParameterAssignFromStr;
|
||||||
virTypedParamsCheck;
|
virTypedParamsCheck;
|
||||||
|
virTypedParamsReplaceString;
|
||||||
virTypedParamsValidate;
|
virTypedParamsValidate;
|
||||||
|
|
||||||
|
|
||||||
|
@ -285,6 +285,71 @@ cleanup:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virTypedParamsReplaceString:
|
||||||
|
* @params: pointer to the array of typed parameters
|
||||||
|
* @nparams: number of parameters in the @params array
|
||||||
|
* @name: name of the parameter to set
|
||||||
|
* @value: the value to store into the parameter
|
||||||
|
*
|
||||||
|
* Sets new value @value to parameter called @name with char * type. If the
|
||||||
|
* parameter does not exist yet in @params, it is automatically created and
|
||||||
|
* @naprams is incremented by one. Otherwise current value of the parameter
|
||||||
|
* is freed on success. The function creates its own copy of @value string,
|
||||||
|
* which needs to be freed using virTypedParamsFree or virTypedParamsClear.
|
||||||
|
*
|
||||||
|
* Returns 0 on success, -1 on error.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
virTypedParamsReplaceString(virTypedParameterPtr *params,
|
||||||
|
int *nparams,
|
||||||
|
const char *name,
|
||||||
|
const char *value)
|
||||||
|
{
|
||||||
|
char *str = NULL;
|
||||||
|
char *old = NULL;
|
||||||
|
size_t n = *nparams;
|
||||||
|
virTypedParameterPtr param;
|
||||||
|
|
||||||
|
virResetLastError();
|
||||||
|
|
||||||
|
param = virTypedParamsGet(*params, n, name);
|
||||||
|
if (param) {
|
||||||
|
if (param->type != VIR_TYPED_PARAM_STRING) {
|
||||||
|
virReportError(VIR_ERR_INVALID_ARG,
|
||||||
|
_("Parameter '%s' is not a string"),
|
||||||
|
param->field);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
old = param->value.s;
|
||||||
|
} else {
|
||||||
|
if (VIR_EXPAND_N(*params, n, 1) < 0) {
|
||||||
|
virReportOOMError();
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
param = *params + n - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (VIR_STRDUP(str, value) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if (virTypedParameterAssign(param, name,
|
||||||
|
VIR_TYPED_PARAM_STRING, str) < 0) {
|
||||||
|
param->value.s = old;
|
||||||
|
VIR_FREE(str);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
VIR_FREE(old);
|
||||||
|
|
||||||
|
*nparams = n;
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
error:
|
||||||
|
virDispatchError(NULL);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* The following APIs are public and their signature may never change. */
|
/* The following APIs are public and their signature may never change. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -44,4 +44,9 @@ int virTypedParameterAssignFromStr(virTypedParameterPtr param,
|
|||||||
const char *val)
|
const char *val)
|
||||||
ATTRIBUTE_RETURN_CHECK;
|
ATTRIBUTE_RETURN_CHECK;
|
||||||
|
|
||||||
|
int virTypedParamsReplaceString(virTypedParameterPtr *params,
|
||||||
|
int *nparams,
|
||||||
|
const char *name,
|
||||||
|
const char *value);
|
||||||
|
|
||||||
#endif /* __VIR_TYPED_PARAM_H */
|
#endif /* __VIR_TYPED_PARAM_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user