]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: Improve virDomainChrTargetDefFormat()
authorAndrea Bolognani <abologna@redhat.com>
Mon, 20 Nov 2017 17:38:18 +0000 (18:38 +0100)
committerAndrea Bolognani <abologna@redhat.com>
Tue, 28 Nov 2017 14:46:32 +0000 (15:46 +0100)
Make the switch statement type-aware, avoid calling
virDomainChrTargetTypeToString() more than once and check its
return value before using it.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
src/conf/domain_conf.c

index 4bae0cc9496583f8b5014f0af9cce7fa1c388f55..72d5f289c68e05556bf5a6a24e19329cb451060c 100644 (file)
@@ -23954,7 +23954,7 @@ virDomainChrTargetDefFormat(virBufferPtr buf,
     const char *targetType = virDomainChrTargetTypeToString(def->deviceType,
                                                             def->targetType);
 
-    switch (def->deviceType) {
+    switch ((virDomainChrDeviceType) def->deviceType) {
     case VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL: {
         if (!targetType) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -24001,28 +24001,43 @@ virDomainChrTargetDefFormat(virBufferPtr buf,
     }
 
     case VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE:
+        if (!targetType) {
+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                           _("Could not format console target type"));
+            return -1;
+        }
+
         virBufferAsprintf(buf,
                           "<target type='%s' port='%d'/>\n",
-                          virDomainChrTargetTypeToString(def->deviceType,
-                                                         def->targetType),
-                          def->target.port);
+                          targetType, def->target.port);
         break;
 
     case VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL:
+        if (!targetType) {
+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                           _("Could not format serial target type"));
+            return -1;
+        }
+
         if (def->targetType != VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_NONE) {
             virBufferAsprintf(buf,
                               "<target type='%s' port='%d'/>\n",
-                              virDomainChrTargetTypeToString(def->deviceType,
-                                                             def->targetType),
+                              targetType,
                               def->target.port);
             break;
         }
         ATTRIBUTE_FALLTHROUGH;
 
-    default:
+    case VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL:
         virBufferAsprintf(buf, "<target port='%d'/>\n",
                           def->target.port);
         break;
+
+    case VIR_DOMAIN_CHR_DEVICE_TYPE_LAST:
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       _("unexpected char device type %d"),
+                       def->deviceType);
+        return -1;
     }
 
     return 0;