[libvirt] [PATCH 1/4] conf: cpu: Fix parsing of vendor_id

Peter Krempa pkrempa at redhat.com
Mon Dec 17 11:22:02 UTC 2012


From: Ken ICHIKAWA <ichikawa.ken at jp.fujitsu.com>

This patch fixes a problem that vendor_id attribute can not be defined
when fallback attribute is not defined.

If I define domain xml like below:
<domain>
  <cpu>
    <model vendor_id='aaaabbbbcccc'>core2duo</model>
  </cpu>
</domain>

In dumpxml, vendor_id is not reflected:
<domain>
  <cpu mode='custom' match='exact'>
    <model fallback='allow'>core2duo</model>
  </cpu>
</domain>

The expected output is:
<domain>
  <cpu mode='custom' match='exact'>
    <model fallback='allow' vendor_id='aaaabbbbcccc'>core2duo</model>
  </cpu>
</domain>

If the fallback attribute and vendor_id attribute is defined at the same
time, it's reflected as expected.

Signed-off-by: Ken ICHIKAWA <ichikawa.ken at jp.fujitsu.com>
---
 src/conf/cpu_conf.c | 42 +++++++++++++++++++++---------------------
 1 file changed, 21 insertions(+), 21 deletions(-)

diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
index 8cb54a3..6157ed7 100644
--- a/src/conf/cpu_conf.c
+++ b/src/conf/cpu_conf.c
@@ -300,32 +300,32 @@ virCPUDefParseXML(const xmlNodePtr node,
                     goto error;
                 }
             }
+        }

-            if (virXPathBoolean("boolean(./model[1]/@vendor_id)", ctxt)) {
-                char *vendor_id;
-
-                vendor_id = virXPathString("string(./model[1]/@vendor_id)",
-                                           ctxt);
-                if (!vendor_id ||
-                    strlen(vendor_id) != VIR_CPU_VENDOR_ID_LENGTH) {
-                    virReportError(VIR_ERR_XML_ERROR,
-                                   _("vendor_id must be exactly"
-                                     " %d characters long"),
-                                   VIR_CPU_VENDOR_ID_LENGTH);
+        if (virXPathBoolean("boolean(./model[1]/@vendor_id)", ctxt)) {
+            char *vendor_id;
+
+            vendor_id = virXPathString("string(./model[1]/@vendor_id)",
+                                       ctxt);
+            if (!vendor_id ||
+                strlen(vendor_id) != VIR_CPU_VENDOR_ID_LENGTH) {
+                virReportError(VIR_ERR_XML_ERROR,
+                               _("vendor_id must be exactly"
+                                 " %d characters long"),
+                               VIR_CPU_VENDOR_ID_LENGTH);
+                VIR_FREE(vendor_id);
+                goto error;
+            }
+            /* ensure that the string can be passed to qemu*/
+            for (i = 0; i < strlen(vendor_id); i++) {
+                if (vendor_id[i]==',') {
+                    virReportError(VIR_ERR_XML_ERROR, "%s",
+                                   _("vendor id is invalid"));
                     VIR_FREE(vendor_id);
                     goto error;
                 }
-                /* ensure that the string can be passed to qemu*/
-                for (i = 0; i < strlen(vendor_id); i++) {
-                    if (vendor_id[i]==',') {
-                        virReportError(VIR_ERR_XML_ERROR, "%s",
-                                       _("vendor id is invalid"));
-                        VIR_FREE(vendor_id);
-                        goto error;
-                    }
-                }
-                def->vendor_id = vendor_id;
             }
+            def->vendor_id = vendor_id;
         }
     }

-- 
1.8.0.2




More information about the libvir-list mailing list