]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: typedparam: Optionally copy strings passed to virTypedParameterAssignValue
authorPeter Krempa <pkrempa@redhat.com>
Wed, 14 Aug 2019 12:52:46 +0000 (14:52 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 25 Sep 2019 11:02:48 +0000 (13:02 +0200)
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 <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/util/virtypedparam.c

index 756242d96ffc15a5beaca9eb4ee6573a00597f1e..d1b251fae60f5ca94cf0e5809fa8c45e4147daa9 100644 (file)
@@ -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;