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@xxxxxxxxxx> --- src/util/virstoragefile.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index 3d4bda700..3698eeeda 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -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; 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"))) { + char *str = virJSONValueToString(json, false); virReportError(VIR_ERR_INVALID_ARG, _("JSON backing volume defintion " - "'%s' lacks driver name"), json); + "'%s' lacks driver name"), + NULLSTR(str)); + VIR_FREE(str); goto cleanup; } @@ -3091,12 +3090,28 @@ virStorageSourceParseBackingJSON(virStorageSourcePtr src, "driver '%s'"), drvname); cleanup: - virJSONValueFree(root); 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) { -- 2.11.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list