From: Peter Krempa Date: Wed, 14 Aug 2019 12:52:46 +0000 (+0200) Subject: util: typedparam: Optionally copy strings passed to virTypedParameterAssignValue X-Git-Tag: v5.8.0-rc1~76 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6b39203fac30e2e4e0b943e932676439430cdf21;p=thirdparty%2Flibvirt.git util: typedparam: Optionally copy strings passed to virTypedParameterAssignValue Some code paths already pass in pointers to strings which should be added directly as the value of the typed parameter. To allow more universal use of virTypedParameterAssignValue add a flag which allows to copy the value in place. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/util/virtypedparam.c b/src/util/virtypedparam.c index 756242d96f..d1b251fae6 100644 --- a/src/util/virtypedparam.c +++ b/src/util/virtypedparam.c @@ -209,7 +209,8 @@ virTypedParameterToString(virTypedParameterPtr param) static int virTypedParameterAssignValueVArgs(virTypedParameterPtr param, int type, - va_list ap) + va_list ap, + bool copystr) { param->type = type; switch (type) { @@ -232,7 +233,13 @@ virTypedParameterAssignValueVArgs(virTypedParameterPtr param, param->value.b = !!va_arg(ap, int); break; case VIR_TYPED_PARAM_STRING: - param->value.s = va_arg(ap, char *); + if (copystr) { + if (VIR_STRDUP(param->value.s, va_arg(ap, char *)) < 0) + return -1; + } else { + param->value.s = va_arg(ap, char *); + } + if (!param->value.s && VIR_STRDUP(param->value.s, "") < 0) return -1; break; @@ -265,7 +272,7 @@ virTypedParameterAssign(virTypedParameterPtr param, const char *name, } va_start(ap, type); - ret = virTypedParameterAssignValueVArgs(param, type, ap); + ret = virTypedParameterAssignValueVArgs(param, type, ap, false); va_end(ap); return ret;