]> xenbits.xensource.com Git - libvirt.git/commitdiff
util: storage: split function for JSON backing volume parsing in two
authorTomáš Golembiovský <tgolembi@redhat.com>
Mon, 13 Feb 2017 22:53:42 +0000 (23:53 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 22 Feb 2017 09:39:39 +0000 (10:39 +0100)
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>
src/util/virstoragefile.c

index 3d4bda7002f3d267ea07e528a1e13d4dd23b772e..715c0429d7f84ea8539b15adc829c8939968f968 100644 (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)
 {