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;
}
"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)
{