util: json: Introduce virJSONValueObjectReplaceValue

The new helper replaces the 'value' part of the key-value tuple in an
object. The advantage of this new helper is that it preserves the
ordering of the key in the object when compared to a combination of
stealing the old key and adding a new value. This will be needed for a
new test/helper for validating and modifying qemu capabilities data.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2021-12-20 15:55:26 +01:00
parent 5a781738d1
commit a2c758398e
3 changed files with 27 additions and 0 deletions

View File

@ -2567,6 +2567,7 @@ virJSONValueObjectHasKey;
virJSONValueObjectKeysNumber; virJSONValueObjectKeysNumber;
virJSONValueObjectPrependString; virJSONValueObjectPrependString;
virJSONValueObjectRemoveKey; virJSONValueObjectRemoveKey;
virJSONValueObjectReplaceValue;
virJSONValueObjectStealArray; virJSONValueObjectStealArray;
virJSONValueObjectStealObject; virJSONValueObjectStealObject;
virJSONValueToBuffer; virJSONValueToBuffer;

View File

@ -1149,6 +1149,26 @@ virJSONValueObjectGetString(virJSONValue *object,
} }
void
virJSONValueObjectReplaceValue(virJSONValue *object,
const char *key,
virJSONValue **newval)
{
size_t i;
if (object->type != VIR_JSON_TYPE_OBJECT ||
!*newval)
return;
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(newval);
}
}
}
/** /**
* virJSONValueObjectGetStringOrNumber: * virJSONValueObjectGetStringOrNumber:
* @object: JSON value object * @object: JSON value object

View File

@ -248,6 +248,12 @@ virJSONValueObjectRemoveKey(virJSONValue *object,
virJSONValue **value) virJSONValue **value)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
void
virJSONValueObjectReplaceValue(virJSONValue *object,
const char *key,
virJSONValue **newval)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
int int
virJSONValueArrayAppendString(virJSONValue *object, virJSONValueArrayAppendString(virJSONValue *object,
const char *value); const char *value);