[libvirt] [PATCH v1 05/51] util: conf: separate virDomainDefParseDomainInfo from virDomainDefParseXML

xinhua.Cao caoxinhua at huawei.com
Thu Feb 8 06:46:03 UTC 2018


separate virDomainDefParseDomainInfo from virDomainDefParseXML
---
 src/conf/domain_conf.c | 90 +++++++++++++++++++++++++++++---------------------
 1 file changed, 53 insertions(+), 37 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 0f7069c..2daa6df 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -18694,6 +18694,58 @@ virDomainDefParseOsNodeInfo(virDomainParseTotalParamPtr param)
 }
 
 
+static int
+virDomainDefParseDomainInfo(virDomainParseTotalParamPtr param)
+{
+    virDomainDefPtr def = param->def;
+    xmlXPathContextPtr ctxt = param->ctxt;
+    char *tmp = NULL;
+    int ret = -1;
+
+    /* Extract domain name */
+    if (!(def->name = virXPathString("string(./name[1])", ctxt))) {
+        virReportError(VIR_ERR_NO_NAME, NULL);
+        goto cleanup;
+    }
+
+    /* Extract domain uuid. If both uuid and sysinfo/system/entry/uuid
+     * exist, they must match; and if only the latter exists, it can
+     * also serve as the uuid. */
+    tmp = virXPathString("string(./uuid[1])", ctxt);
+    if (!tmp) {
+        if (virUUIDGenerate(def->uuid)) {
+            virReportError(VIR_ERR_INTERNAL_ERROR,
+                           "%s", _("Failed to generate UUID"));
+            goto cleanup;
+        }
+        param->uuid_generated = true;
+    } else {
+        if (virUUIDParse(tmp, def->uuid) < 0) {
+            virReportError(VIR_ERR_INTERNAL_ERROR,
+                           "%s", _("malformed uuid element"));
+            goto cleanup;
+        }
+        VIR_FREE(tmp);
+    }
+
+    /* Extract short description of domain (title) */
+    def->title = virXPathString("string(./title[1])", ctxt);
+    if (def->title && strchr(def->title, '\n')) {
+        virReportError(VIR_ERR_XML_ERROR, "%s",
+                       _("Domain title can't contain newlines"));
+        goto cleanup;
+    }
+
+    /* Extract documentation if present */
+    def->description = virXPathString("string(./description[1])", ctxt);
+    ret = 0;
+
+ cleanup:
+    VIR_FREE(tmp);
+    return ret;
+}
+
+
 static virDomainDefPtr
 virDomainDefParseXML(xmlDocPtr xml,
                      xmlNodePtr root,
@@ -18737,6 +18789,7 @@ virDomainDefParseXML(xmlDocPtr xml,
             virDomainDefParseIdInfo,
             virDomainDefParseVirtTypeInfo,
             virDomainDefParseOsNodeInfo,
+            virDomainDefParseDomainInfo,
             NULL
     };
 
@@ -18764,43 +18817,6 @@ virDomainDefParseXML(xmlDocPtr xml,
         fun_index++;
     }
 
-    /* Extract domain name */
-    if (!(def->name = virXPathString("string(./name[1])", ctxt))) {
-        virReportError(VIR_ERR_NO_NAME, NULL);
-        goto error;
-    }
-
-    /* Extract domain uuid. If both uuid and sysinfo/system/entry/uuid
-     * exist, they must match; and if only the latter exists, it can
-     * also serve as the uuid. */
-    tmp = virXPathString("string(./uuid[1])", ctxt);
-    if (!tmp) {
-        if (virUUIDGenerate(def->uuid)) {
-            virReportError(VIR_ERR_INTERNAL_ERROR,
-                           "%s", _("Failed to generate UUID"));
-            goto error;
-        }
-        uuid_generated = true;
-    } else {
-        if (virUUIDParse(tmp, def->uuid) < 0) {
-            virReportError(VIR_ERR_INTERNAL_ERROR,
-                           "%s", _("malformed uuid element"));
-            goto error;
-        }
-        VIR_FREE(tmp);
-    }
-
-    /* Extract short description of domain (title) */
-    def->title = virXPathString("string(./title[1])", ctxt);
-    if (def->title && strchr(def->title, '\n')) {
-        virReportError(VIR_ERR_XML_ERROR, "%s",
-                       _("Domain title can't contain newlines"));
-        goto error;
-    }
-
-    /* Extract documentation if present */
-    def->description = virXPathString("string(./description[1])", ctxt);
-
     /* analysis of security label, done early even though we format it
      * late, so devices can refer to this for defaults */
     if (!(flags & VIR_DOMAIN_DEF_PARSE_SKIP_SECLABEL)) {
-- 
2.8.3





More information about the libvir-list mailing list