From: Peter Krempa <[email protected]> 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 <[email protected]> --- src/libvirt_private.syms | 1 + src/util/virjson.c | 24 ++++++++++++++++++++++++ src/util/virjson.h | 6 ++++++ 3 files changed, 31 insertions(+) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 50fe3a9218..4816dff6dd 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2772,6 +2772,7 @@ virJSONValueObjectHasKey; virJSONValueObjectKeysNumber; virJSONValueObjectPrependString; virJSONValueObjectRemoveKey; +virJSONValueObjectReplaceKey; virJSONValueObjectStealArray; virJSONValueObjectStealObject; virJSONValueToBuffer; diff --git a/src/util/virjson.c b/src/util/virjson.c index b751326154..403b86101d 100644 --- a/src/util/virjson.c +++ b/src/util/virjson.c @@ -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) diff --git a/src/util/virjson.h b/src/util/virjson.h index d8481e5890..a184dd104f 100644 --- a/src/util/virjson.h +++ b/src/util/virjson.h @@ -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); -- 2.54.0
