[libvirt PATCH 04/16] domain_conf: graphics: extract VNC formatting to separate function

Pavel Hrdina posted 16 patches 6 days ago
[libvirt PATCH 04/16] domain_conf: graphics: extract VNC formatting to separate function
Posted by Pavel Hrdina 6 days ago
virDomainGraphicsDefFormat function was way too long so split it into
separate functions for each graphics type.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
---
 src/conf/domain_conf.c | 131 ++++++++++++++++++++++-------------------
 1 file changed, 71 insertions(+), 60 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 8de39e7767..e1589527f2 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -26385,6 +26385,76 @@ virDomainGraphicsDefFormatAudio(virBuffer *buf,
     virXMLFormatElement(buf, "audio", &attrBuf, NULL);
 }
 
+static int
+virDomainGraphicsDefFormatVNC(virBuffer *attrBuf,
+                              virDomainGraphicsDef *def,
+                              unsigned int flags)
+{
+    virDomainGraphicsListenDef *glisten = virDomainGraphicsGetListen(def, 0);
+
+    if (!glisten) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("missing listen element for graphics"));
+        return -1;
+    }
+
+    switch (glisten->type) {
+    case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
+        /* To not break migration we shouldn't print the 'socket' attribute
+         * if it's auto-generated or if it's based on config option from
+         * qemu.conf.  If the socket is provided by user we need to print it
+         * into migratable XML. */
+        if (glisten->socket &&
+            !((glisten->autoGenerated || glisten->fromConfig) &&
+              (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE))) {
+            virBufferEscapeString(attrBuf, " socket='%s'", glisten->socket);
+        }
+        break;
+
+    case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
+    case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
+        if (def->data.vnc.port &&
+            (!def->data.vnc.autoport || !(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)))
+            virBufferAsprintf(attrBuf, " port='%d'", def->data.vnc.port);
+        else if (def->data.vnc.autoport)
+            virBufferAddLit(attrBuf, " port='-1'");
+
+        virBufferAsprintf(attrBuf, " autoport='%s'",
+                          def->data.vnc.autoport ? "yes" : "no");
+
+        if (def->data.vnc.websocketGenerated &&
+            (flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE))
+            virBufferAddLit(attrBuf, " websocket='-1'");
+        else if (def->data.vnc.websocket)
+            virBufferAsprintf(attrBuf, " websocket='%d'", def->data.vnc.websocket);
+
+        if (flags & VIR_DOMAIN_DEF_FORMAT_STATUS)
+            virBufferAsprintf(attrBuf, " websocketGenerated='%s'",
+                              def->data.vnc.websocketGenerated ? "yes" : "no");
+
+        virDomainGraphicsListenDefFormatAddr(attrBuf, glisten, flags);
+        break;
+    case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
+    case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
+        break;
+    }
+
+    virBufferEscapeString(attrBuf, " keymap='%s'", def->data.vnc.keymap);
+
+    if (def->data.vnc.sharePolicy)
+        virBufferAsprintf(attrBuf, " sharePolicy='%s'",
+                          virDomainGraphicsVNCSharePolicyTypeToString(
+                          def->data.vnc.sharePolicy));
+
+    if (def->data.vnc.powerControl)
+        virBufferAsprintf(attrBuf, " powerControl='%s'",
+                          virTristateBoolTypeToString(def->data.vnc.powerControl));
+
+    virDomainGraphicsAuthDefFormatAttr(attrBuf, &def->data.vnc.auth, flags);
+
+    return 0;
+}
+
 static int
 virDomainGraphicsDefFormat(virBuffer *buf,
                            virDomainGraphicsDef *def,
@@ -26406,67 +26476,8 @@ virDomainGraphicsDefFormat(virBuffer *buf,
 
     switch (def->type) {
     case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
-        if (!glisten) {
-            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                           _("missing listen element for graphics"));
+        if (virDomainGraphicsDefFormatVNC(&attrBuf, def, flags) < 0)
             return -1;
-        }
-
-        switch (glisten->type) {
-        case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
-            /* To not break migration we shouldn't print the 'socket' attribute
-             * if it's auto-generated or if it's based on config option from
-             * qemu.conf.  If the socket is provided by user we need to print it
-             * into migratable XML. */
-            if (glisten->socket &&
-                !((glisten->autoGenerated || glisten->fromConfig) &&
-                  (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE))) {
-                virBufferEscapeString(&attrBuf, " socket='%s'", glisten->socket);
-            }
-            break;
-
-        case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
-        case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
-            if (def->data.vnc.port &&
-                (!def->data.vnc.autoport || !(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)))
-                virBufferAsprintf(&attrBuf, " port='%d'",
-                                  def->data.vnc.port);
-            else if (def->data.vnc.autoport)
-                virBufferAddLit(&attrBuf, " port='-1'");
-
-            virBufferAsprintf(&attrBuf, " autoport='%s'",
-                              def->data.vnc.autoport ? "yes" : "no");
-
-            if (def->data.vnc.websocketGenerated &&
-                (flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE))
-                virBufferAddLit(&attrBuf, " websocket='-1'");
-            else if (def->data.vnc.websocket)
-                virBufferAsprintf(&attrBuf, " websocket='%d'", def->data.vnc.websocket);
-
-            if (flags & VIR_DOMAIN_DEF_FORMAT_STATUS)
-                virBufferAsprintf(&attrBuf, " websocketGenerated='%s'",
-                                  def->data.vnc.websocketGenerated ? "yes" : "no");
-
-            virDomainGraphicsListenDefFormatAddr(&attrBuf, glisten, flags);
-            break;
-        case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
-        case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
-            break;
-        }
-
-        virBufferEscapeString(&attrBuf, " keymap='%s'",
-                              def->data.vnc.keymap);
-
-        if (def->data.vnc.sharePolicy)
-            virBufferAsprintf(&attrBuf, " sharePolicy='%s'",
-                              virDomainGraphicsVNCSharePolicyTypeToString(
-                              def->data.vnc.sharePolicy));
-
-        if (def->data.vnc.powerControl)
-            virBufferAsprintf(&attrBuf, " powerControl='%s'",
-                              virTristateBoolTypeToString(def->data.vnc.powerControl));
-
-        virDomainGraphicsAuthDefFormatAttr(&attrBuf, &def->data.vnc.auth, flags);
         break;
 
     case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
-- 
2.48.1