mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
util: json: Don't remove the 'file' subobject when deflattening
Currently the function would deflatten the object by dropping the 'file' prefix from the attributes. This does not really scale well or adhere to the documentation. Until we refactor the worker to properly deflatten everything we at least simulate it by adding the "file" wrapper object back.
This commit is contained in:
parent
de75de7c97
commit
f43b7d60d8
@ -2012,17 +2012,24 @@ virJSONValueObjectDeflattenWorker(const char *key,
|
||||
virJSONValuePtr
|
||||
virJSONValueObjectDeflatten(virJSONValuePtr json)
|
||||
{
|
||||
virJSONValuePtr ret;
|
||||
virJSONValuePtr deflattened;
|
||||
virJSONValuePtr ret = NULL;
|
||||
|
||||
if (!(ret = virJSONValueNewObject()))
|
||||
if (!(deflattened = virJSONValueNewObject()))
|
||||
return NULL;
|
||||
|
||||
if (virJSONValueObjectForeachKeyValue(json,
|
||||
virJSONValueObjectDeflattenWorker,
|
||||
ret) < 0) {
|
||||
virJSONValueFree(ret);
|
||||
return NULL;
|
||||
}
|
||||
deflattened) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (virJSONValueObjectCreate(&ret, "a:file", deflattened, NULL) < 0)
|
||||
goto cleanup;
|
||||
|
||||
deflattened = NULL;
|
||||
|
||||
cleanup:
|
||||
virJSONValueFree(deflattened);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -3260,7 +3260,13 @@ virStorageSourceParseBackingJSONInternal(virStorageSourcePtr src,
|
||||
if (!(fixedroot = virJSONValueObjectDeflatten(json)))
|
||||
goto cleanup;
|
||||
|
||||
file = fixedroot;
|
||||
if (!(file = virJSONValueObjectGetObject(fixedroot, "file"))) {
|
||||
str = virJSONValueToString(json, false);
|
||||
virReportError(VIR_ERR_INVALID_ARG,
|
||||
_("JSON backing volume defintion '%s' lacks 'file' object"),
|
||||
NULLSTR(str));
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(drvname = virJSONValueObjectGetString(file, "driver"))) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user