[libvirt] [PATCH 1/2] util: storage: split function for JSON backing volume parsing in two

Tomáš Golembiovský tgolembi at redhat.com
Mon Feb 13 22:53:42 UTC 2017


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 at 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




More information about the libvir-list mailing list