提交 803d19a6 编写于 作者: P Peter Krempa

util: typedparam: Separate code to assign value to typed parameter

The code will be reused in other function.
Signed-off-by: NPeter Krempa <pkrempa@redhat.com>
Reviewed-by: NJán Tomko <jtomko@redhat.com>
上级 d6fca62e
...@@ -205,24 +205,12 @@ virTypedParameterToString(virTypedParameterPtr param) ...@@ -205,24 +205,12 @@ virTypedParameterToString(virTypedParameterPtr param)
return value; return value;
} }
/* 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.
* Return 0 on success, -1 after an error message on failure. */
int
virTypedParameterAssign(virTypedParameterPtr param, const char *name,
int type, ...)
{
va_list ap;
int ret = -1;
va_start(ap, type);
if (virStrcpyStatic(param->field, name) < 0) { static int
virReportError(VIR_ERR_INTERNAL_ERROR, _("Field name '%s' too long"), virTypedParameterAssignValueVArgs(virTypedParameterPtr param,
name); int type,
goto cleanup; va_list ap)
} {
param->type = type; param->type = type;
switch (type) { switch (type) {
case VIR_TYPED_PARAM_INT: case VIR_TYPED_PARAM_INT:
...@@ -246,17 +234,40 @@ virTypedParameterAssign(virTypedParameterPtr param, const char *name, ...@@ -246,17 +234,40 @@ virTypedParameterAssign(virTypedParameterPtr param, const char *name,
case VIR_TYPED_PARAM_STRING: case VIR_TYPED_PARAM_STRING:
param->value.s = va_arg(ap, char *); param->value.s = va_arg(ap, char *);
if (!param->value.s && VIR_STRDUP(param->value.s, "") < 0) if (!param->value.s && VIR_STRDUP(param->value.s, "") < 0)
goto cleanup; return -1;
break; break;
default: default:
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("unexpected type %d for field %s"), type, name); _("unexpected type %d for field %s"), type,
goto cleanup; NULLSTR(param->field));
return -1;
} }
ret = 0; return 0;
cleanup: }
/* 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.
* Return 0 on success, -1 after an error message on failure. */
int
virTypedParameterAssign(virTypedParameterPtr param, const char *name,
int type, ...)
{
va_list ap;
int ret = -1;
if (virStrcpyStatic(param->field, name) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, _("Field name '%s' too long"),
name);
return -1;
}
va_start(ap, type);
ret = virTypedParameterAssignValueVArgs(param, type, ap);
va_end(ap); va_end(ap);
return ret; return ret;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册