util: storage: split function for JSON backing volume parsing in two

Split virStorageSourceParseBackingJSON into two functions so that the
core can be reused by other functions. The new function called
virStorageSourceParseBackingJSONInternal accepts virJSONValuePtr.

Signed-off-by: Tomáš Golembiovský <tgolembi@redhat.com>
This commit is contained in:
Tomáš Golembiovský 2017-02-13 23:53:42 +01:00 committed by Peter Krempa
parent b26401fab3
commit cb4adb43d6

View File

@ -3053,29 +3053,28 @@ virStorageSourceParseBackingJSONDeflatten(virJSONValuePtr json)
static int
virStorageSourceParseBackingJSON(virStorageSourcePtr src,
const char *json)
virStorageSourceParseBackingJSONInternal(virStorageSourcePtr src,
virJSONValuePtr json)
{
virJSONValuePtr root = NULL;
virJSONValuePtr fixedroot = NULL;
virJSONValuePtr file;
const char *drvname;
char *str = NULL;
size_t i;
int ret = -1;
if (!(root = virJSONValueFromString(json)))
return -1;
if (!(file = virJSONValueObjectGetObject(root, "file"))) {
if (!(fixedroot = virStorageSourceParseBackingJSONDeflatten(root)))
if (!(file = virJSONValueObjectGetObject(json, "file"))) {
if (!(fixedroot = virStorageSourceParseBackingJSONDeflatten(json)))
goto cleanup;
file = fixedroot;
}
if (!(drvname = virJSONValueObjectGetString(file, "driver"))) {
virReportError(VIR_ERR_INVALID_ARG, _("JSON backing volume defintion "
"'%s' lacks driver name"), json);
str = virJSONValueToString(json, false);
virReportError(VIR_ERR_INVALID_ARG,
_("JSON backing volume defintion '%s' lacks driver name"),
NULLSTR(str));
goto cleanup;
}
@ -3091,12 +3090,29 @@ virStorageSourceParseBackingJSON(virStorageSourcePtr src,
"driver '%s'"), drvname);
cleanup:
virJSONValueFree(root);
VIR_FREE(str);
virJSONValueFree(fixedroot);
return ret;
}
static int
virStorageSourceParseBackingJSON(virStorageSourcePtr src,
const char *json)
{
virJSONValuePtr root = NULL;
int ret = -1;
if (!(root = virJSONValueFromString(json)))
return -1;
ret = virStorageSourceParseBackingJSONInternal(src, root);
virJSONValueFree(root);
return ret;
}
virStorageSourcePtr
virStorageSourceNewFromBackingAbsolute(const char *path)
{