[libvirt] [PATCH 07/22] util: typedparam: Optionally copy strings passed to virTypedParameterAssignValue

Peter Krempa pkrempa at redhat.com
Thu Sep 19 17:13:10 UTC 2019


Some code paths pass in already 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 at redhat.com>
---
 src/util/virtypedparam.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/util/virtypedparam.c b/src/util/virtypedparam.c
index 9f86166707..720b88dd10 100644
--- a/src/util/virtypedparam.c
+++ b/src/util/virtypedparam.c
@@ -209,7 +209,8 @@ virTypedParameterToString(virTypedParameterPtr param)
 static int
 virTypedParameterAssignValueAP(virTypedParameterPtr param,
                                int type,
-                               va_list ap)
+                               va_list ap,
+                               bool copystr)
 {
     param->type = type;
     switch (type) {
@@ -232,7 +233,13 @@ virTypedParameterAssignValueAP(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 = virTypedParameterAssignValueAP(param, type, ap);
+    ret = virTypedParameterAssignValueAP(param, type, ap, false);
     va_end(ap);

     return ret;
-- 
2.21.0




More information about the libvir-list mailing list