util: storage: Always deflatten JSON pseudo-protocol objects

Now that the JSON deflattener is working sanely we can always attempt
the deflattening so that we can then parse the tree as expected.
This commit is contained in:
Peter Krempa 2017-07-11 14:23:08 +02:00
parent 428d175206
commit 6d7cdec63d

View File

@ -3249,24 +3249,22 @@ static int
virStorageSourceParseBackingJSONInternal(virStorageSourcePtr src,
virJSONValuePtr json)
{
virJSONValuePtr fixedroot = NULL;
virJSONValuePtr deflattened = NULL;
virJSONValuePtr file;
const char *drvname;
char *str = NULL;
size_t i;
int ret = -1;
if (!(file = virJSONValueObjectGetObject(json, "file"))) {
if (!(fixedroot = virJSONValueObjectDeflatten(json)))
goto cleanup;
if (!(deflattened = virJSONValueObjectDeflatten(json)))
goto cleanup;
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 (!(file = virJSONValueObjectGetObject(deflattened, "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"))) {
@ -3290,7 +3288,7 @@ virStorageSourceParseBackingJSONInternal(virStorageSourcePtr src,
cleanup:
VIR_FREE(str);
virJSONValueFree(fixedroot);
virJSONValueFree(deflattened);
return ret;
}