From: Tomáš Golembiovský Date: Mon, 13 Feb 2017 22:53:42 +0000 (+0100) Subject: util: storage: split function for JSON backing volume parsing in two X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=cb4adb43d6bf6944cbea8a128e134545d101d29c;p=libvirt.git 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ý --- diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index 3d4bda7002..715c0429d7 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; + 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) {