[PATCH 22/25] conf: domain: Convert virDomainDiskDef's 'snapshot' to unsigned int

Peter Krempa pkrempa at redhat.com
Fri Apr 16 15:34:40 UTC 2021


Unfortunately virDomainSnapshotLocation is declared in snapshot_conf.h
which includes domain_conf.h. To avoid a circular dependency use
'unsigned int' for now.

Use XML parser can use virXMLPropEnum.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/conf/domain_conf.c | 15 +++------------
 src/conf/domain_conf.h |  2 +-
 2 files changed, 4 insertions(+), 13 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index da0e7700ff..6f7948da0a 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -9313,7 +9313,6 @@ virDomainDiskDefParseXML(virDomainXMLOption *xmlopt,
     VIR_XPATH_NODE_AUTORESTORE(ctxt)
     bool source = false;
     g_autofree char *tmp = NULL;
-    g_autofree char *snapshot = NULL;
     g_autofree char *target = NULL;
     g_autofree char *bus = NULL;
     g_autofree char *serial = NULL;
@@ -9349,7 +9348,9 @@ virDomainDiskDefParseXML(virDomainXMLOption *xmlopt,
                        VIR_XML_PROP_OPTIONAL, &def->model) < 0)
         return NULL;

-    snapshot = virXMLPropString(node, "snapshot");
+    if (virXMLPropEnum(node, "snapshot", virDomainSnapshotLocationTypeFromString,
+                       VIR_XML_PROP_OPTIONAL | VIR_XML_PROP_NONZERO, &def->snapshot) < 0)
+        return NULL;

     if (virXMLPropTristateBool(node, "rawio", VIR_XML_PROP_OPTIONAL, &def->rawio) < 0)
         return NULL;
@@ -9461,16 +9462,6 @@ virDomainDiskDefParseXML(virDomainXMLOption *xmlopt,
         }
     }

-    if (snapshot) {
-        def->snapshot = virDomainSnapshotLocationTypeFromString(snapshot);
-        if (def->snapshot <= 0) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           _("unknown disk snapshot setting '%s'"),
-                           snapshot);
-            return NULL;
-        }
-    }
-
     if (bus) {
         if ((def->bus = virDomainDiskBusTypeFromString(bus)) <= 0) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index a83d5b337f..17d830a822 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -573,7 +573,7 @@ struct _virDomainDiskDef {
     virTristateSwitch ioeventfd;
     virTristateSwitch event_idx;
     virTristateSwitch copy_on_read;
-    int snapshot; /* virDomainSnapshotLocation, snapshot_conf.h */
+    unsigned int snapshot; /* virDomainSnapshotLocation, snapshot_conf.h */
     virDomainStartupPolicy startupPolicy;
     bool transient;
     virDomainDeviceInfo info;
-- 
2.30.2




More information about the libvir-list mailing list