]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: Extend device types handled by virDomainDeviceDefParse
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 11 Jul 2013 09:20:34 +0000 (11:20 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 11 Jul 2013 14:07:04 +0000 (16:07 +0200)
Not all device types are currently parsed in virDomainDeviceDefParse,
Since all needed functions do exist, nothing holds us back to make the
implementation complete. Similarly, the virDomainDeviceDefFree needs to
be updated as well.

src/conf/domain_conf.c

index 4013267ffc4e0b3cd3c904b0e966e40b4b1bbf26..d0c87b26db6ae39591759cb178b668370035abc0 100644 (file)
@@ -1756,13 +1756,23 @@ void virDomainDeviceDefFree(virDomainDeviceDefPtr def)
     case VIR_DOMAIN_DEVICE_RNG:
         virDomainRNGDefFree(def->data.rng);
         break;
-    case VIR_DOMAIN_DEVICE_NONE:
+    case VIR_DOMAIN_DEVICE_CHR:
+        virDomainChrDefFree(def->data.chr);
+        break;
     case VIR_DOMAIN_DEVICE_FS:
+        virDomainFSDefFree(def->data.fs);
+        break;
     case VIR_DOMAIN_DEVICE_SMARTCARD:
-    case VIR_DOMAIN_DEVICE_CHR:
+        virDomainSmartcardDefFree(def->data.smartcard);
+        break;
     case VIR_DOMAIN_DEVICE_MEMBALLOON:
+        virDomainMemballoonDefFree(def->data.memballoon);
+        break;
     case VIR_DOMAIN_DEVICE_NVRAM:
+        virDomainNVRAMDefFree(def->data.nvram);
+        break;
     case VIR_DOMAIN_DEVICE_LAST:
+    case VIR_DOMAIN_DEVICE_NONE:
         break;
     }
 
@@ -9388,6 +9398,29 @@ virDomainDeviceDefParse(const char *xmlStr,
         dev->type = VIR_DOMAIN_DEVICE_RNG;
         if (!(dev->data.rng = virDomainRNGDefParseXML(node, ctxt, flags)))
             goto error;
+    } else if (xmlStrEqual(node->name, BAD_CAST "channel") ||
+               xmlStrEqual(node->name, BAD_CAST "console") ||
+               xmlStrEqual(node->name, BAD_CAST "parallel") ||
+               xmlStrEqual(node->name, BAD_CAST "serial")) {
+        dev->type = VIR_DOMAIN_DEVICE_CHR;
+        if (!(dev->data.chr = virDomainChrDefParseXML(ctxt,
+                                                      node,
+                                                      def->seclabels,
+                                                      def->nseclabels,
+                                                      flags)))
+            goto error;
+    } else if (xmlStrEqual(node->name, BAD_CAST "smartcard")) {
+        dev->type = VIR_DOMAIN_DEVICE_SMARTCARD;
+        if (!(dev->data.smartcard = virDomainSmartcardDefParseXML(node, flags)))
+            goto error;
+    } else if (xmlStrEqual(node->name, BAD_CAST "memballoon")) {
+        dev->type = VIR_DOMAIN_DEVICE_MEMBALLOON;
+        if (!(dev->data.memballoon = virDomainMemballoonDefParseXML(node, flags)))
+            goto error;
+    } else if (xmlStrEqual(node->name, BAD_CAST "nvram")) {
+        dev->type = VIR_DOMAIN_DEVICE_NVRAM;
+        if (!(dev->data.nvram = virDomainNVRAMDefParseXML(node, flags)))
+            goto error;
     } else {
         virReportError(VIR_ERR_XML_ERROR, "%s", _("unknown device type"));
         goto error;