]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virJSONValueObjectInsert: Clear @value on successful insertion
authorPeter Krempa <pkrempa@redhat.com>
Thu, 11 Feb 2021 16:29:29 +0000 (17:29 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Sat, 20 Feb 2021 12:26:36 +0000 (13:26 +0100)
The function takes ownership of @value on success so the proper
semantics will be to clear out the @value pointer. Convert @value to a
double pointer to do this.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/util/virjson.c

index a509943fde21221bb2b1cef89073dd5f4b8d6c99..80ebcb587c7ee28e853b94d81bd986d37b44a7e0 100644 (file)
@@ -577,10 +577,10 @@ virJSONValueNewObject(void)
 static int
 virJSONValueObjectInsert(virJSONValuePtr object,
                          const char *key,
-                         virJSONValuePtr value,
+                         virJSONValuePtr *value,
                          bool prepend)
 {
-    virJSONObjectPair pair = { NULL, value };
+    virJSONObjectPair pair = { NULL, *value };
     int ret = -1;
 
     if (object->type != VIR_JSON_TYPE_OBJECT) {
@@ -604,6 +604,9 @@ virJSONValueObjectInsert(virJSONValuePtr object,
                                  object->data.object.npairs, pair);
     }
 
+    if (ret == 0)
+        *value = NULL;
+
     VIR_FREE(pair.key);
     return ret;
 }
@@ -614,7 +617,7 @@ virJSONValueObjectAppend(virJSONValuePtr object,
                          const char *key,
                          virJSONValuePtr value)
 {
-    return virJSONValueObjectInsert(object, key, value, false);
+    return virJSONValueObjectInsert(object, key, &value, false);
 }
 
 
@@ -627,10 +630,8 @@ virJSONValueObjectInsertString(virJSONValuePtr object,
     virJSONValuePtr jvalue = virJSONValueNewString(value);
     if (!jvalue)
         return -1;
-    if (virJSONValueObjectInsert(object, key, jvalue, prepend) < 0) {
-        virJSONValueFree(jvalue);
+    if (virJSONValueObjectInsert(object, key, &jvalue, prepend) < 0)
         return -1;
-    }
     return 0;
 }