]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: json: Introduce 'virJSONValueObjectReplaceKey'
authorPeter Krempa <pkrempa@redhat.com>
Wed, 13 May 2026 14:32:26 +0000 (16:32 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 25 May 2026 11:28:57 +0000 (13:28 +0200)
Add a helper which replaces the value part of a JSON object key. This
will be helpful in tests where we'll want to rewrite some outputs (e.g.
fds) to stabilize output files.

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

index e1cb98d64bf9c733ca64bb1385606e274d288387..2391f01bc7a2b51bba8e5e3f0a8aff807bffff03 100644 (file)
@@ -2774,6 +2774,7 @@ virJSONValueObjectHasKey;
 virJSONValueObjectKeysNumber;
 virJSONValueObjectPrependString;
 virJSONValueObjectRemoveKey;
+virJSONValueObjectReplaceKey;
 virJSONValueObjectStealArray;
 virJSONValueObjectStealObject;
 virJSONValueToBuffer;
index b7513261545fb5a3dd06c601d1c877e6af512ac4..403b86101da55a9591f40dd4568f5d6f9d983f38 100644 (file)
@@ -905,6 +905,30 @@ virJSONValueObjectRemoveKey(virJSONValue *object,
 }
 
 
+/* Replace value for key-value pair @key.
+ * Returns 1 on success, 0 if no key was found, and -1 on error.  */
+int
+virJSONValueObjectReplaceKey(virJSONValue *object,
+                             const char *key,
+                             virJSONValue **newvalue)
+{
+    size_t i;
+
+    if (object->type != VIR_JSON_TYPE_OBJECT)
+        return -1;
+
+    for (i = 0; i < object->data.object.npairs; i++) {
+        if (STREQ(object->data.object.pairs[i].key, key)) {
+            virJSONValueFree(object->data.object.pairs[i].value);
+            object->data.object.pairs[i].value = g_steal_pointer(newvalue);
+            return 1;
+        }
+    }
+
+    return 0;
+}
+
+
 virJSONValue *
 virJSONValueObjectGetValue(virJSONValue *object,
                            unsigned int n)
index d8481e58909692ebaf174ec91b3361a1d4da3dce..a184dd104fd2e5e65fe5c2e37df213277327c12f 100644 (file)
@@ -241,6 +241,12 @@ virJSONValueObjectRemoveKey(virJSONValue *object,
                             virJSONValue **value)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
 
+int
+virJSONValueObjectReplaceKey(virJSONValue *object,
+                             const char *key,
+                             virJSONValue **value)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
+
 int
 virJSONValueArrayAppendString(virJSONValue *object,
                               const char *value);