]> source.dussan.org Git - tigervnc.git/commitdiff
vncRandRGetOutputName: return a copy of the string
authorPeter Åstrand (astrand) <astrand@cendio.se>
Wed, 7 Mar 2018 07:35:03 +0000 (08:35 +0100)
committerPeter Åstrand (astrand) <astrand@cendio.se>
Mon, 9 Apr 2018 08:04:12 +0000 (10:04 +0200)
Compatibility with libXrandr, where the name is in dynamically
allocated XRROutputInfo.

unix/xserver/hw/vnc/XorgGlue.c
unix/xserver/hw/vnc/XorgGlue.h
unix/xserver/hw/vnc/XserverDesktop.cc

index baeac29dce9c6eddba7beb6bdafdc65e7f7c8262..3a2fce9f1e3d2f8259ebe5ea5ad01358ce9078f9 100644 (file)
@@ -22,6 +22,7 @@
 #endif
 
 #include <assert.h>
+#include <string.h>
 
 #include "scrnintstr.h"
 #ifdef RANDR
@@ -226,13 +227,13 @@ int vncRandRGetAvailableOutputs(int scrIdx)
 #endif
 }
 
-const char *vncRandRGetOutputName(int scrIdx, int outputIdx)
+char *vncRandRGetOutputName(int scrIdx, int outputIdx)
 {
 #ifdef RANDR
   rrScrPrivPtr rp = rrGetScrPriv(screenInfo.screens[scrIdx]);
-  return rp->outputs[outputIdx]->name;
+  return strdup(rp->outputs[outputIdx]->name);
 #else
-  return "";
+  return strdup("");
 #endif
 }
 
index dc78f5ebe8c915ce3ec531e728f480fc1546d3df..9bdb25e796441b096adcdd0a59f2fec6054250fe 100644 (file)
@@ -56,7 +56,7 @@ int vncRandRHasOutputClones(int scrIdx);
 int vncRandRGetOutputCount(int scrIdx);
 int vncRandRGetAvailableOutputs(int scrIdx);
 
-const char *vncRandRGetOutputName(int scrIdx, int outputIdx);
+char *vncRandRGetOutputName(int scrIdx, int outputIdx);
 
 int vncRandRIsOutputEnabled(int scrIdx, int outputIdx);
 int vncRandRIsOutputUsable(int scrIdx, int outputIdx);
index c47f507a13d42f488f30c93ba1aac0f24eaf49d4..c9b70389de4e63ce82a0e53d231a29608121edc9 100644 (file)
@@ -675,8 +675,10 @@ unsigned int XserverDesktop::setScreenLayout(int fb_width, int fb_height,
       /* Disable and move on... */
       ret = vncRandRDisableOutput(screenIndex, i);
       if (!ret) {
+        char *name = vncRandRGetOutputName(screenIndex, i);
         vlog.error("Failed to disable unused output '%s'",
-                   vncRandRGetOutputName(screenIndex, i));
+                   name);
+        free(name);
         return rfb::resultInvalid;
       }
       outputIdMap.erase(output);
@@ -690,10 +692,12 @@ unsigned int XserverDesktop::setScreenLayout(int fb_width, int fb_height,
                                     iter->dimensions.width(),
                                     iter->dimensions.height());
     if (!ret) {
+      char *name = vncRandRGetOutputName(screenIndex, i);
       vlog.error("Failed to reconfigure output '%s' to %dx%d+%d+%d",
-                 vncRandRGetOutputName(screenIndex, i),
+                 name,
                  iter->dimensions.width(), iter->dimensions.height(),
                  iter->dimensions.tl.x, iter->dimensions.tl.y);
+      free(name);
       return rfb::resultInvalid;
     }
   }
@@ -747,10 +751,12 @@ unsigned int XserverDesktop::setScreenLayout(int fb_width, int fb_height,
                                     iter->dimensions.width(),
                                     iter->dimensions.height());
     if (!ret) {
+      char *name = vncRandRGetOutputName(screenIndex, i);
       vlog.error("Failed to reconfigure output '%s' to %dx%d+%d+%d",
-                 vncRandRGetOutputName(screenIndex, i),
+                 name,
                  iter->dimensions.width(), iter->dimensions.height(),
                  iter->dimensions.tl.x, iter->dimensions.tl.y);
+      free(name);
       return rfb::resultInvalid;
     }
   }