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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---
 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

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux