]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: domain: Extract parsing of 'commit' blockjob data into a function
authorPeter Krempa <pkrempa@redhat.com>
Tue, 25 Feb 2020 06:22:05 +0000 (07:22 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 16 Mar 2020 16:33:08 +0000 (17:33 +0100)
I'll be adding more fields to care about so splitting the code out will
be better long-term.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Mores <pmores@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
src/qemu/qemu_domain.c

index 8f22f0e43285b699302241801ec2a45386a1f0d7..e4aa25c34344041b314c89b78771f663e9f9b105 100644 (file)
@@ -3230,6 +3230,40 @@ qemuDomainObjPrivateXMLParseBlockjobNodename(qemuBlockJobDataPtr job,
 }
 
 
+static int
+qemuDomainObjPrivateXMLParseBlockjobDataCommit(qemuBlockJobDataPtr job,
+                                               xmlXPathContextPtr ctxt)
+{
+    if (job->type == QEMU_BLOCKJOB_TYPE_COMMIT) {
+        qemuDomainObjPrivateXMLParseBlockjobNodename(job,
+                                                     "string(./topparent/@node)",
+                                                     &job->data.commit.topparent,
+                                                     ctxt);
+
+        if (!job->data.commit.topparent)
+            return -1;
+    }
+
+    qemuDomainObjPrivateXMLParseBlockjobNodename(job,
+                                                 "string(./top/@node)",
+                                                 &job->data.commit.top,
+                                                 ctxt);
+    qemuDomainObjPrivateXMLParseBlockjobNodename(job,
+                                                 "string(./base/@node)",
+                                                 &job->data.commit.base,
+                                                 ctxt);
+
+    if (virXPathNode("./deleteCommittedImages", ctxt))
+        job->data.commit.deleteCommittedImages = true;
+
+    if (!job->data.commit.top ||
+        !job->data.commit.base)
+        return -1;
+
+    return 0;
+}
+
+
 static void
 qemuDomainObjPrivateXMLParseBlockjobDataSpecific(qemuBlockJobDataPtr job,
                                                  xmlXPathContextPtr ctxt,
@@ -3249,29 +3283,10 @@ qemuDomainObjPrivateXMLParseBlockjobDataSpecific(qemuBlockJobDataPtr job,
             break;
 
         case QEMU_BLOCKJOB_TYPE_COMMIT:
-            qemuDomainObjPrivateXMLParseBlockjobNodename(job,
-                                                         "string(./topparent/@node)",
-                                                         &job->data.commit.topparent,
-                                                         ctxt);
-
-            if (!job->data.commit.topparent)
-                goto broken;
-
-            G_GNUC_FALLTHROUGH;
         case QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT:
-            qemuDomainObjPrivateXMLParseBlockjobNodename(job,
-                                                         "string(./top/@node)",
-                                                         &job->data.commit.top,
-                                                         ctxt);
-            qemuDomainObjPrivateXMLParseBlockjobNodename(job,
-                                                         "string(./base/@node)",
-                                                         &job->data.commit.base,
-                                                         ctxt);
-            if (virXPathNode("./deleteCommittedImages", ctxt))
-                job->data.commit.deleteCommittedImages = true;
-            if (!job->data.commit.top ||
-                !job->data.commit.base)
+            if (qemuDomainObjPrivateXMLParseBlockjobDataCommit(job, ctxt) < 0)
                 goto broken;
+
             break;
 
         case QEMU_BLOCKJOB_TYPE_CREATE: