summaryrefslogtreecommitdiffstats
path: root/unix/xserver/hw/vnc
diff options
context:
space:
mode:
authorPeter Åstrand (astrand) <astrand@cendio.se>2018-03-07 08:35:03 +0100
committerPeter Åstrand (astrand) <astrand@cendio.se>2018-04-09 10:04:12 +0200
commit758b83ba53372cf81cae4131f1f50a0b8fc670ca (patch)
treeeacb567952ce4be2b40dd677adafb691133147f5 /unix/xserver/hw/vnc
parente3aece4bac1b8c7cc2aadd824dbba4231665479f (diff)
downloadtigervnc-758b83ba53372cf81cae4131f1f50a0b8fc670ca.tar.gz
tigervnc-758b83ba53372cf81cae4131f1f50a0b8fc670ca.zip
vncRandRGetOutputName: return a copy of the string
Compatibility with libXrandr, where the name is in dynamically allocated XRROutputInfo.
Diffstat (limited to 'unix/xserver/hw/vnc')
-rw-r--r--unix/xserver/hw/vnc/XorgGlue.c7
-rw-r--r--unix/xserver/hw/vnc/XorgGlue.h2
-rw-r--r--unix/xserver/hw/vnc/XserverDesktop.cc12
3 files changed, 14 insertions, 7 deletions
diff --git a/unix/xserver/hw/vnc/XorgGlue.c b/unix/xserver/hw/vnc/XorgGlue.c
index baeac29d..3a2fce9f 100644
--- a/unix/xserver/hw/vnc/XorgGlue.c
+++ b/unix/xserver/hw/vnc/XorgGlue.c
@@ -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
}
diff --git a/unix/xserver/hw/vnc/XorgGlue.h b/unix/xserver/hw/vnc/XorgGlue.h
index dc78f5eb..9bdb25e7 100644
--- a/unix/xserver/hw/vnc/XorgGlue.h
+++ b/unix/xserver/hw/vnc/XorgGlue.h
@@ -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);
diff --git a/unix/xserver/hw/vnc/XserverDesktop.cc b/unix/xserver/hw/vnc/XserverDesktop.cc
index c47f507a..c9b70389 100644
--- a/unix/xserver/hw/vnc/XserverDesktop.cc
+++ b/unix/xserver/hw/vnc/XserverDesktop.cc
@@ -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;
}
}