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(a)redhat.com>
---
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