[libvirt] [PATCH 08/13] vboxDumpDisplay: fill out the graphics structure earlier

Ján Tomko jtomko at redhat.com
Fri Feb 5 17:02:27 UTC 2016


Remove the need to track what type of graphics were present
by temporary variables.
---
 src/vbox/vbox_common.c | 68 +++++++++++++++++++-------------------------------
 1 file changed, 25 insertions(+), 43 deletions(-)

diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
index 7a24de4..e273de9 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -3300,8 +3300,6 @@ static int
 vboxDumpDisplay(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
 {
     /* dump display options vrdp/gui/sdl */
-    int sdlPresent            = 0;
-    int guiPresent            = 0;
     char *guiDisplay          = NULL;
     char *sdlDisplay          = NULL;
     PRUnichar *keyTypeUtf16   = NULL;
@@ -3310,7 +3308,6 @@ vboxDumpDisplay(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
     IVRDxServer *VRDxServer   = NULL;
     PRBool VRDxEnabled        = PR_FALSE;
     virDomainGraphicsDefPtr graphics = NULL;
-    bool addDesktop = false;
     int ret = -1;
 
     def->ngraphics = 0;
@@ -3346,28 +3343,41 @@ vboxDumpDisplay(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
         }
 
         if (STREQ(valueTypeUtf8, "sdl")) {
-            sdlPresent = 1;
             if (VIR_STRDUP(sdlDisplay, valueDisplayUtf8) < 0) {
                 /* just don't go to cleanup yet as it is ok to have
                  * sdlDisplay as NULL and we check it below if it
                  * exist and then only use it there
                  */
             }
+            graphics->type = VIR_DOMAIN_GRAPHICS_TYPE_SDL;
+            if (sdlDisplay)
+                graphics->data.sdl.display = sdlDisplay;
         }
 
         if (STREQ(valueTypeUtf8, "gui")) {
-            guiPresent = 1;
             if (VIR_STRDUP(guiDisplay, valueDisplayUtf8) < 0) {
                 /* just don't go to cleanup yet as it is ok to have
                  * guiDisplay as NULL and we check it below if it
                  * exist and then only use it there
                  */
             }
+            graphics->type = VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP;
+            if (guiDisplay)
+                graphics->data.desktop.display = guiDisplay;
         }
         VBOX_UTF8_FREE(valueDisplayUtf8);
     } else if (STRNEQ_NULLABLE(valueTypeUtf8, "vrdp")) {
+        const char *tmp;
         if (VIR_ALLOC(graphics) < 0)
             goto cleanup;
+
+        graphics->type = VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP;
+        tmp = virGetEnvBlockSUID("DISPLAY");
+        if (VIR_STRDUP(graphics->data.desktop.display, tmp) < 0) {
+            /* just don't go to cleanup yet as it is ok to have
+             * display as NULL
+             */
+        }
     }
 
     if (graphics) {
@@ -3376,32 +3386,7 @@ vboxDumpDisplay(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
 
         def->graphics[def->ngraphics] = graphics;
         graphics = NULL;
-    }
-
-    if (guiPresent || sdlPresent) {
-        if ((guiPresent)) {
-            def->graphics[def->ngraphics]->type = VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP;
-            if (guiDisplay)
-                def->graphics[def->ngraphics]->data.desktop.display = guiDisplay;
-            def->ngraphics++;
-        }
-
-        if ((sdlPresent)) {
-            def->graphics[def->ngraphics]->type = VIR_DOMAIN_GRAPHICS_TYPE_SDL;
-            if (sdlDisplay)
-                def->graphics[def->ngraphics]->data.sdl.display = sdlDisplay;
-            def->ngraphics++;
-        }
-    } else if (addDesktop) {
-            const char *tmp;
-            def->graphics[def->ngraphics]->type = VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP;
-            tmp = virGetEnvBlockSUID("DISPLAY");
-            if (VIR_STRDUP(def->graphics[def->ngraphics]->data.desktop.display, tmp) < 0) {
-                /* just don't go to cleanup yet as it is ok to have
-                 * display as NULL
-                 */
-            }
-            def->ngraphics++;
+        def->ngraphics++;
     }
 
     gVBoxAPI.UIMachine.GetVRDxServer(machine, &VRDxServer);
@@ -3417,20 +3402,15 @@ vboxDumpDisplay(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
         if (VIR_ALLOC(graphics) < 0)
             goto cleanup;
 
-        if (VIR_REALLOC_N(def->graphics, def->ngraphics + 1) < 0)
-            goto cleanup;
+        gVBoxAPI.UIVRDxServer.GetPorts(data, VRDxServer, graphics);
 
-        def->graphics[def->ngraphics] = graphics;
-
-        gVBoxAPI.UIVRDxServer.GetPorts(data, VRDxServer, def->graphics[def->ngraphics]);
-
-        def->graphics[def->ngraphics]->type = VIR_DOMAIN_GRAPHICS_TYPE_RDP;
+        graphics->type = VIR_DOMAIN_GRAPHICS_TYPE_RDP;
 
         gVBoxAPI.UIVRDxServer.GetNetAddress(data, VRDxServer, &netAddressUtf16);
         if (netAddressUtf16) {
             VBOX_UTF16_TO_UTF8(netAddressUtf16, &netAddressUtf8);
             if (STRNEQ(netAddressUtf8, ""))
-                virDomainGraphicsListenSetAddress(def->graphics[def->ngraphics], 0,
+                virDomainGraphicsListenSetAddress(graphics, 0,
                                                   netAddressUtf8, -1, true);
             VBOX_UTF16_FREE(netAddressUtf16);
             VBOX_UTF8_FREE(netAddressUtf8);
@@ -3438,20 +3418,22 @@ vboxDumpDisplay(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
 
         gVBoxAPI.UIVRDxServer.GetAllowMultiConnection(VRDxServer, &allowMultiConnection);
         if (allowMultiConnection)
-            def->graphics[def->ngraphics]->data.rdp.multiUser = true;
+            graphics->data.rdp.multiUser = true;
 
         gVBoxAPI.UIVRDxServer.GetReuseSingleConnection(VRDxServer, &reuseSingleConnection);
         if (reuseSingleConnection)
-            def->graphics[def->ngraphics]->data.rdp.replaceUser = true;
+            graphics->data.rdp.replaceUser = true;
+
+        if (VIR_REALLOC_N(def->graphics, def->ngraphics + 1) < 0)
+            goto cleanup;
 
+        def->graphics[def->ngraphics] = graphics;
         def->ngraphics++;
     }
 
     ret = 0;
 
  cleanup:
-    VBOX_UTF8_FREE(guiDisplay);
-    VBOX_UTF8_FREE(sdlDisplay);
     VBOX_RELEASE(VRDxServer);
     VBOX_UTF8_FREE(valueTypeUtf8);
     return ret;
-- 
2.4.10




More information about the libvir-list mailing list