xserver: Branch 'master' - 21 commits

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jun 13 21:58:20 UTC 2025


 randr/randr.c              |   38 +++++++
 randr/randrstr_priv.h      |   11 --
 randr/rrcrtc.c             |  147 ++++++++++++++++++------------
 randr/rrdispatch.c         |  128 ++++++++++++--------------
 randr/rrinfo.c             |   15 +--
 randr/rrlease.c            |    4 
 randr/rrmode.c             |    7 -
 randr/rrmonitor.c          |   59 ++++--------
 randr/rroutput.c           |   28 +++++
 randr/rrproperty.c         |  114 ++++++++++++-----------
 randr/rrprovider.c         |   56 ++++++-----
 randr/rrproviderproperty.c |   44 ++++++---
 randr/rrscreen.c           |   43 +++++++-
 randr/rrsdispatch.c        |  217 +++++++++++++++++++++------------------------
 randr/rrxinerama.c         |   32 ++++--
 15 files changed, 538 insertions(+), 405 deletions(-)

New commits:
commit ff8d250589a5d6ac970c87699e282ab3585f21f2
Merge: 8cb078f8b e3d066638
Author: Marge Bot <marge-bot at fdo.invalid>
Date:   Fri Jun 13 21:58:15 2025 +0000

    Merge branch 'xrandr-reverts' into 'master'
    
    Revert "randr cleanups"
    
    See merge request xorg/xserver!2012

commit e3d0666386d99d3ed1b9d2cf32c96cbbb0ab949d
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:44:43 2025 -0700

    Revert "randr: let SProc*'s call their Proc*'s directly"
    
    This reverts commit ed172244034f31d8e7e7eec2283bd825a48bb94e.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/randrstr_priv.h b/randr/randrstr_priv.h
index 7f802215f..4864f5272 100644
--- a/randr/randrstr_priv.h
+++ b/randr/randrstr_priv.h
@@ -136,8 +136,4 @@ int ProcRRCreateLease(ClientPtr client);
 
 int ProcRRFreeLease(ClientPtr client);
 
-int ProcRRQueryVersion(ClientPtr client);
-
-int ProcRRSelectInput(ClientPtr client);
-
 #endif /* _XSERVER_RANDRSTR_PRIV_H_ */
diff --git a/randr/rrdispatch.c b/randr/rrdispatch.c
index 4381f52ca..615e89312 100644
--- a/randr/rrdispatch.c
+++ b/randr/rrdispatch.c
@@ -36,7 +36,7 @@ RRClientKnowsRates(ClientPtr pClient)
                            1, 1) >= 0;
 }
 
-int
+static int
 ProcRRQueryVersion(ClientPtr client)
 {
     xRRQueryVersionReply rep = {
@@ -72,7 +72,7 @@ ProcRRQueryVersion(ClientPtr client)
     return Success;
 }
 
-int
+static int
 ProcRRSelectInput(ClientPtr client)
 {
     REQUEST(xRRSelectInputReq);
diff --git a/randr/rrsdispatch.c b/randr/rrsdispatch.c
index 48f908fd1..6de8775b0 100644
--- a/randr/rrsdispatch.c
+++ b/randr/rrsdispatch.c
@@ -30,7 +30,7 @@ SProcRRQueryVersion(ClientPtr client)
     REQUEST_SIZE_MATCH(xRRQueryVersionReq);
     swapl(&stuff->majorVersion);
     swapl(&stuff->minorVersion);
-    return ProcRRQueryVersion(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -40,7 +40,7 @@ SProcRRGetScreenInfo(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xRRGetScreenInfoReq);
     swapl(&stuff->window);
-    return ProcRRGetScreenInfo(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -60,7 +60,7 @@ SProcRRSetScreenConfig(ClientPtr client)
     swapl(&stuff->timestamp);
     swaps(&stuff->sizeID);
     swaps(&stuff->rotation);
-    return ProcRRSetScreenConfig(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -71,7 +71,7 @@ SProcRRSelectInput(ClientPtr client)
     REQUEST_SIZE_MATCH(xRRSelectInputReq);
     swapl(&stuff->window);
     swaps(&stuff->enable);
-    return ProcRRSelectInput(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -81,7 +81,7 @@ SProcRRGetScreenSizeRange(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xRRGetScreenSizeRangeReq);
     swapl(&stuff->window);
-    return ProcRRGetScreenSizeRange(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -95,7 +95,7 @@ SProcRRSetScreenSize(ClientPtr client)
     swaps(&stuff->height);
     swapl(&stuff->widthInMillimeters);
     swapl(&stuff->heightInMillimeters);
-    return ProcRRSetScreenSize(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -105,7 +105,7 @@ SProcRRGetScreenResources(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xRRGetScreenResourcesReq);
     swapl(&stuff->window);
-    return ProcRRGetScreenResources(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -116,7 +116,7 @@ SProcRRGetScreenResourcesCurrent(ClientPtr client)
     REQUEST_SIZE_MATCH(xRRGetScreenResourcesCurrentReq);
     swaps(&stuff->length);
     swapl(&stuff->window);
-    return ProcRRGetScreenResourcesCurrent(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -127,7 +127,7 @@ SProcRRGetOutputInfo(ClientPtr client)
     REQUEST_SIZE_MATCH(xRRGetOutputInfoReq);
     swapl(&stuff->output);
     swapl(&stuff->configTimestamp);
-    return ProcRRGetScreenResources(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -137,7 +137,7 @@ SProcRRListOutputProperties(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xRRListOutputPropertiesReq);
     swapl(&stuff->output);
-    return ProcRRListOutputProperties(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -148,7 +148,7 @@ SProcRRQueryOutputProperty(ClientPtr client)
     REQUEST_SIZE_MATCH(xRRQueryOutputPropertyReq);
     swapl(&stuff->output);
     swapl(&stuff->property);
-    return ProcRRQueryOutputProperty(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -160,7 +160,7 @@ SProcRRConfigureOutputProperty(ClientPtr client)
     swapl(&stuff->output);
     swapl(&stuff->property);
     SwapRestL(stuff);
-    return ProcRRConfigureOutputProperty(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -186,7 +186,7 @@ SProcRRChangeOutputProperty(ClientPtr client)
         client->errorValue = stuff->format;
         return BadValue;
     }
-    return ProcRRChangeOutputProperty(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -197,7 +197,7 @@ SProcRRDeleteOutputProperty(ClientPtr client)
     REQUEST_SIZE_MATCH(xRRDeleteOutputPropertyReq);
     swapl(&stuff->output);
     swapl(&stuff->property);
-    return ProcRRDeleteOutputProperty(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -211,7 +211,7 @@ SProcRRGetOutputProperty(ClientPtr client)
     swapl(&stuff->type);
     swapl(&stuff->longOffset);
     swapl(&stuff->longLength);
-    return ProcRRGetOutputProperty(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -237,7 +237,7 @@ SProcRRCreateMode(ClientPtr client)
     swaps(&modeinfo->vTotal);
     swaps(&modeinfo->nameLength);
     swapl(&modeinfo->modeFlags);
-    return ProcRRCreateMode(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -247,7 +247,7 @@ SProcRRDestroyMode(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xRRDestroyModeReq);
     swapl(&stuff->mode);
-    return ProcRRDestroyMode(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -258,7 +258,7 @@ SProcRRAddOutputMode(ClientPtr client)
     REQUEST_SIZE_MATCH(xRRAddOutputModeReq);
     swapl(&stuff->output);
     swapl(&stuff->mode);
-    return ProcRRAddOutputMode(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -269,7 +269,7 @@ SProcRRDeleteOutputMode(ClientPtr client)
     REQUEST_SIZE_MATCH(xRRDeleteOutputModeReq);
     swapl(&stuff->output);
     swapl(&stuff->mode);
-    return ProcRRDeleteOutputMode(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -280,7 +280,7 @@ SProcRRGetCrtcInfo(ClientPtr client)
     REQUEST_SIZE_MATCH(xRRGetCrtcInfoReq);
     swapl(&stuff->crtc);
     swapl(&stuff->configTimestamp);
-    return ProcRRGetCrtcInfo(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -297,7 +297,7 @@ SProcRRSetCrtcConfig(ClientPtr client)
     swapl(&stuff->mode);
     swaps(&stuff->rotation);
     SwapRestL(stuff);
-    return ProcRRSetCrtcConfig(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -307,7 +307,7 @@ SProcRRGetCrtcGammaSize(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xRRGetCrtcGammaSizeReq);
     swapl(&stuff->crtc);
-    return ProcRRGetCrtcGammaSize(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -317,7 +317,7 @@ SProcRRGetCrtcGamma(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xRRGetCrtcGammaReq);
     swapl(&stuff->crtc);
-    return ProcRRGetCrtcGamma(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -329,7 +329,7 @@ SProcRRSetCrtcGamma(ClientPtr client)
     swapl(&stuff->crtc);
     swaps(&stuff->size);
     SwapRestS(stuff);
-    return ProcRRSetCrtcGamma(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -353,7 +353,7 @@ SProcRRSetCrtcTransform(ClientPtr client)
         return BadLength;
 
     SwapLongs(params, nparams);
-    return ProcRRSetCrtcTransform(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -363,7 +363,7 @@ SProcRRGetCrtcTransform(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xRRGetCrtcTransformReq);
     swapl(&stuff->crtc);
-    return ProcRRGetCrtcTransform(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -373,7 +373,7 @@ SProcRRGetPanning(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xRRGetPanningReq);
     swapl(&stuff->crtc);
-    return ProcRRGetPanning(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -396,7 +396,7 @@ SProcRRSetPanning(ClientPtr client)
     swaps(&stuff->border_top);
     swaps(&stuff->border_right);
     swaps(&stuff->border_bottom);
-    return ProcRRSetPanning(client);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int _X_COLD
@@ -407,7 +407,7 @@ SProcRRSetOutputPrimary(ClientPtr client)
     REQUEST_SIZE_MATCH(xRRSetOutputPrimaryReq);
     swapl(&stuff->window);
     swapl(&stuff->output);
-    return ProcRRSetOutputPrimary(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -417,7 +417,7 @@ SProcRRGetOutputPrimary(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xRRGetOutputPrimaryReq);
     swapl(&stuff->window);
-    return ProcRRGetOutputPrimary(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -427,7 +427,7 @@ SProcRRGetProviders(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xRRGetProvidersReq);
     swapl(&stuff->window);
-    return ProcRRGetProviders(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -438,7 +438,7 @@ SProcRRGetProviderInfo(ClientPtr client)
     REQUEST_SIZE_MATCH(xRRGetProviderInfoReq);
     swapl(&stuff->provider);
     swapl(&stuff->configTimestamp);
-    return ProcRRGetProviderInfo(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -450,7 +450,7 @@ SProcRRSetProviderOffloadSink(ClientPtr client)
     swapl(&stuff->provider);
     swapl(&stuff->sink_provider);
     swapl(&stuff->configTimestamp);
-    return ProcRRSetProviderOffloadSink(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -462,7 +462,7 @@ SProcRRSetProviderOutputSource(ClientPtr client)
     swapl(&stuff->provider);
     swapl(&stuff->source_provider);
     swapl(&stuff->configTimestamp);
-    return ProcRRSetProviderOutputSource(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -472,7 +472,7 @@ SProcRRListProviderProperties(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xRRListProviderPropertiesReq);
     swapl(&stuff->provider);
-    return ProcRRListProviderProperties(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -483,7 +483,7 @@ SProcRRQueryProviderProperty(ClientPtr client)
     REQUEST_SIZE_MATCH(xRRQueryProviderPropertyReq);
     swapl(&stuff->provider);
     swapl(&stuff->property);
-    return ProcRRQueryProviderProperty(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -496,7 +496,7 @@ SProcRRConfigureProviderProperty(ClientPtr client)
     swapl(&stuff->property);
     /* TODO: no way to specify format? */
     SwapRestL(stuff);
-    return ProcRRConfigureProviderProperty(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -519,7 +519,7 @@ SProcRRChangeProviderProperty(ClientPtr client)
         SwapRestL(stuff);
         break;
     }
-    return ProcRRChangeProviderProperty(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -530,7 +530,7 @@ SProcRRDeleteProviderProperty(ClientPtr client)
     REQUEST_SIZE_MATCH(xRRDeleteProviderPropertyReq);
     swapl(&stuff->provider);
     swapl(&stuff->property);
-    return ProcRRDeleteProviderProperty(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -544,7 +544,7 @@ SProcRRGetProviderProperty(ClientPtr client)
     swapl(&stuff->type);
     swapl(&stuff->longOffset);
     swapl(&stuff->longLength);
-    return ProcRRGetProviderProperty(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -553,7 +553,7 @@ SProcRRGetMonitors(ClientPtr client) {
 
     REQUEST_SIZE_MATCH(xRRGetMonitorsReq);
     swapl(&stuff->window);
-    return ProcRRGetMonitors(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -569,7 +569,7 @@ SProcRRSetMonitor(ClientPtr client) {
     swaps(&stuff->monitor.width);
     swaps(&stuff->monitor.height);
     SwapRestL(stuff);
-    return ProcRRSetMonitor(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -579,7 +579,7 @@ SProcRRDeleteMonitor(ClientPtr client) {
     REQUEST_SIZE_MATCH(xRRDeleteMonitorReq);
     swapl(&stuff->window);
     swapl(&stuff->name);
-    return ProcRRDeleteMonitor(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -591,7 +591,7 @@ SProcRRCreateLease(ClientPtr client) {
     swaps(&stuff->nCrtcs);
     swaps(&stuff->nOutputs);
     SwapRestL(stuff);
-    return ProcRRCreateLease(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 static int _X_COLD
@@ -600,7 +600,7 @@ SProcRRFreeLease(ClientPtr client) {
 
     REQUEST_SIZE_MATCH(xRRFreeLeaseReq);
     swapl(&stuff->lid);
-    return ProcRRFreeLease(client);
+    return ProcRandrVector[stuff->randrReqType] (client);
 }
 
 int (*SProcRandrVector[RRNumberRequests]) (ClientPtr) = {
commit c35a28539825c08b6f9042b19e6f78144f409183
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:44:30 2025 -0700

    Revert "randr: use explicit case statement instead of ProcRandrVector table"
    
    This reverts commit 42677ae1e391ce723fb9b967071ddc0862c62ebd.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/randr.c b/randr/randr.c
index 078514a3c..59d101ba7 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -50,6 +50,7 @@ static int RRNScreens;
     real->mem = priv->mem; \
 }
 
+static int ProcRRDispatch(ClientPtr pClient);
 static int SProcRRDispatch(ClientPtr pClient);
 
 int RREventBase;
@@ -737,6 +738,16 @@ RRVerticalRefresh(xRRModeInfo * mode)
     return (CARD16) refresh;
 }
 
+static int
+ProcRRDispatch(ClientPtr client)
+{
+    REQUEST(xReq);
+    if (stuff->data >= RRNumberRequests || !ProcRandrVector[stuff->data])
+        return BadRequest;
+    UpdateCurrentTimeIf();
+    return (*ProcRandrVector[stuff->data]) (client);
+}
+
 static int _X_COLD
 SProcRRDispatch(ClientPtr client)
 {
diff --git a/randr/randrstr_priv.h b/randr/randrstr_priv.h
index a125f293a..7f802215f 100644
--- a/randr/randrstr_priv.h
+++ b/randr/randrstr_priv.h
@@ -33,6 +33,7 @@
 
 extern int RREventBase, RRErrorBase;
 
+extern int (*ProcRandrVector[RRNumberRequests]) (ClientPtr);
 extern int (*SProcRandrVector[RRNumberRequests]) (ClientPtr);
 
 extern RESTYPE RRClientType, RREventType;     /* resource types for event masks */
@@ -139,6 +140,4 @@ int ProcRRQueryVersion(ClientPtr client);
 
 int ProcRRSelectInput(ClientPtr client);
 
-int ProcRRDispatch(ClientPtr client);
-
 #endif /* _XSERVER_RANDRSTR_PRIV_H_ */
diff --git a/randr/rrdispatch.c b/randr/rrdispatch.c
index 866c6f252..4381f52ca 100644
--- a/randr/rrdispatch.c
+++ b/randr/rrdispatch.c
@@ -211,69 +211,60 @@ ProcRRSelectInput(ClientPtr client)
     return Success;
 }
 
-int
-ProcRRDispatch(ClientPtr client)
-{
-    REQUEST(xReq);
-    UpdateCurrentTimeIf();
-
-    switch (stuff->data) {
-        case X_RRQueryVersion:              return ProcRRQueryVersion(client);
-        case X_RRSetScreenConfig:           return ProcRRSetScreenConfig(client);
-        case X_RRSelectInput:               return ProcRRSelectInput(client);
-        case X_RRGetScreenInfo:             return ProcRRGetScreenInfo(client);
-
-        /* V1.2 additions */
-        case X_RRGetScreenSizeRange:        return ProcRRGetScreenSizeRange(client);
-        case X_RRSetScreenSize:             return ProcRRSetScreenSize(client);
-        case X_RRGetScreenResources:        return ProcRRGetScreenResources(client);
-        case X_RRGetOutputInfo:             return ProcRRGetOutputInfo(client);
-        case X_RRListOutputProperties:      return ProcRRListOutputProperties(client);
-        case X_RRQueryOutputProperty:       return ProcRRQueryOutputProperty(client);
-        case X_RRConfigureOutputProperty:   return ProcRRConfigureOutputProperty(client);
-        case X_RRChangeOutputProperty:      return ProcRRChangeOutputProperty(client);
-        case X_RRDeleteOutputProperty:      return ProcRRDeleteOutputProperty(client);
-        case X_RRGetOutputProperty:         return ProcRRGetOutputProperty(client);
-        case X_RRCreateMode:                return ProcRRCreateMode(client);
-        case X_RRDestroyMode:               return ProcRRDestroyMode(client);
-        case X_RRAddOutputMode:             return ProcRRAddOutputMode(client);
-        case X_RRDeleteOutputMode:          return ProcRRDeleteOutputMode(client);
-        case X_RRGetCrtcInfo:               return ProcRRGetCrtcInfo(client);
-        case X_RRSetCrtcConfig:             return ProcRRSetCrtcConfig(client);
-        case X_RRGetCrtcGammaSize:          return ProcRRGetCrtcGammaSize(client);
-        case X_RRGetCrtcGamma:              return ProcRRGetCrtcGamma(client);
-        case X_RRSetCrtcGamma:              return ProcRRSetCrtcGamma(client);
-
-        /* V1.3 additions */
-        case X_RRGetScreenResourcesCurrent: return ProcRRGetScreenResourcesCurrent(client);
-        case X_RRSetCrtcTransform:          return ProcRRSetCrtcTransform(client);
-        case X_RRGetCrtcTransform:          return ProcRRGetCrtcTransform(client);
-        case X_RRGetPanning:                return ProcRRGetPanning(client);
-        case X_RRSetPanning:                return ProcRRSetPanning(client);
-        case X_RRSetOutputPrimary:          return ProcRRSetOutputPrimary(client);
-        case X_RRGetOutputPrimary:          return ProcRRGetOutputPrimary(client);
-
-        /* V1.4 additions */
-        case X_RRGetProviders:              return ProcRRGetProviders(client);
-        case X_RRGetProviderInfo:           return ProcRRGetProviderInfo(client);
-        case X_RRSetProviderOffloadSink:    return ProcRRSetProviderOffloadSink(client);
-        case X_RRSetProviderOutputSource:   return ProcRRSetProviderOutputSource(client);
-        case X_RRListProviderProperties:    return ProcRRListProviderProperties(client);
-        case X_RRQueryProviderProperty:     return ProcRRQueryProviderProperty(client);
-        case X_RRConfigureProviderProperty: return ProcRRConfigureProviderProperty(client);
-        case X_RRChangeProviderProperty:    return ProcRRChangeProviderProperty(client);
-        case X_RRDeleteProviderProperty:    return ProcRRDeleteProviderProperty(client);
-        case X_RRGetProviderProperty:       return ProcRRGetProviderProperty(client);
-
-        /* V1.5 additions */
-        case X_RRGetMonitors:               return ProcRRGetMonitors(client);
-        case X_RRSetMonitor:                return ProcRRSetMonitor(client);
-        case X_RRDeleteMonitor:             return ProcRRDeleteMonitor(client);
-
-        /* V1.6 additions */
-        case X_RRCreateLease:               return ProcRRCreateLease(client);
-        case X_RRFreeLease:                 return ProcRRFreeLease(client);
-    }
-
-    return BadRequest;
-}
+int (*ProcRandrVector[RRNumberRequests]) (ClientPtr) = {
+    ProcRRQueryVersion,         /* 0 */
+/* we skip 1 to make old clients fail pretty immediately */
+        NULL,                   /* 1 ProcRandrOldGetScreenInfo */
+/* V1.0 apps share the same set screen config request id */
+        ProcRRSetScreenConfig,  /* 2 */
+        NULL,                   /* 3 ProcRandrOldScreenChangeSelectInput */
+/* 3 used to be ScreenChangeSelectInput; deprecated */
+        ProcRRSelectInput,      /* 4 */
+        ProcRRGetScreenInfo,    /* 5 */
+/* V1.2 additions */
+        ProcRRGetScreenSizeRange,       /* 6 */
+        ProcRRSetScreenSize,    /* 7 */
+        ProcRRGetScreenResources,       /* 8 */
+        ProcRRGetOutputInfo,    /* 9 */
+        ProcRRListOutputProperties,     /* 10 */
+        ProcRRQueryOutputProperty,      /* 11 */
+        ProcRRConfigureOutputProperty,  /* 12 */
+        ProcRRChangeOutputProperty,     /* 13 */
+        ProcRRDeleteOutputProperty,     /* 14 */
+        ProcRRGetOutputProperty,        /* 15 */
+        ProcRRCreateMode,       /* 16 */
+        ProcRRDestroyMode,      /* 17 */
+        ProcRRAddOutputMode,    /* 18 */
+        ProcRRDeleteOutputMode, /* 19 */
+        ProcRRGetCrtcInfo,      /* 20 */
+        ProcRRSetCrtcConfig,    /* 21 */
+        ProcRRGetCrtcGammaSize, /* 22 */
+        ProcRRGetCrtcGamma,     /* 23 */
+        ProcRRSetCrtcGamma,     /* 24 */
+/* V1.3 additions */
+        ProcRRGetScreenResourcesCurrent,        /* 25 */
+        ProcRRSetCrtcTransform, /* 26 */
+        ProcRRGetCrtcTransform, /* 27 */
+        ProcRRGetPanning,       /* 28 */
+        ProcRRSetPanning,       /* 29 */
+        ProcRRSetOutputPrimary, /* 30 */
+        ProcRRGetOutputPrimary, /* 31 */
+/* V1.4 additions */
+        ProcRRGetProviders,     /* 32 */
+        ProcRRGetProviderInfo,  /* 33 */
+        ProcRRSetProviderOffloadSink, /* 34 */
+        ProcRRSetProviderOutputSource, /* 35 */
+        ProcRRListProviderProperties,    /* 36 */
+        ProcRRQueryProviderProperty,     /* 37 */
+        ProcRRConfigureProviderProperty, /* 38 */
+        ProcRRChangeProviderProperty, /* 39 */
+        ProcRRDeleteProviderProperty, /* 40 */
+        ProcRRGetProviderProperty,    /* 41 */
+/* V1.5 additions */
+        ProcRRGetMonitors,            /* 42 */
+        ProcRRSetMonitor,             /* 43 */
+        ProcRRDeleteMonitor,          /* 44 */
+/* V1.6 additions */
+        ProcRRCreateLease,            /* 45 */
+        ProcRRFreeLease,              /* 46 */
+};
commit bc76e25994f070adbb5a749c70bd2ff70f2b1a45
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:44:17 2025 -0700

    Revert "randr: use explicit case statement instead of SProcRandrVector table"
    
    This reverts commit 058815bed1bac2d9fc6ce15e001132806fb9ab14.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/randr.c b/randr/randr.c
index b314f0411..078514a3c 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -50,6 +50,8 @@ static int RRNScreens;
     real->mem = priv->mem; \
 }
 
+static int SProcRRDispatch(ClientPtr pClient);
+
 int RREventBase;
 int RRErrorBase;
 RESTYPE RRClientType, RREventType;      /* resource types for event masks */
@@ -734,3 +736,13 @@ RRVerticalRefresh(xRRModeInfo * mode)
         refresh = 0xffff;
     return (CARD16) refresh;
 }
+
+static int _X_COLD
+SProcRRDispatch(ClientPtr client)
+{
+    REQUEST(xReq);
+    if (stuff->data >= RRNumberRequests || !SProcRandrVector[stuff->data])
+        return BadRequest;
+    UpdateCurrentTimeIf();
+    return (*SProcRandrVector[stuff->data]) (client);
+}
diff --git a/randr/randrstr_priv.h b/randr/randrstr_priv.h
index f50a8eb94..a125f293a 100644
--- a/randr/randrstr_priv.h
+++ b/randr/randrstr_priv.h
@@ -33,6 +33,8 @@
 
 extern int RREventBase, RRErrorBase;
 
+extern int (*SProcRandrVector[RRNumberRequests]) (ClientPtr);
+
 extern RESTYPE RRClientType, RREventType;     /* resource types for event masks */
 extern DevPrivateKeyRec RRClientPrivateKeyRec;
 
@@ -139,6 +141,4 @@ int ProcRRSelectInput(ClientPtr client);
 
 int ProcRRDispatch(ClientPtr client);
 
-int SProcRRDispatch(ClientPtr client);
-
 #endif /* _XSERVER_RANDRSTR_PRIV_H_ */
diff --git a/randr/rrsdispatch.c b/randr/rrsdispatch.c
index c447c5d63..48f908fd1 100644
--- a/randr/rrsdispatch.c
+++ b/randr/rrsdispatch.c
@@ -603,69 +603,60 @@ SProcRRFreeLease(ClientPtr client) {
     return ProcRRFreeLease(client);
 }
 
-int
-SProcRRDispatch(ClientPtr client)
-{
-    REQUEST(xReq);
-    UpdateCurrentTimeIf();
-
-    switch (stuff->data) {
-        case X_RRQueryVersion:              return SProcRRQueryVersion(client);
-        case X_RRSetScreenConfig:           return SProcRRSetScreenConfig(client);
-        case X_RRSelectInput:               return SProcRRSelectInput(client);
-        case X_RRGetScreenInfo:             return SProcRRGetScreenInfo(client);
-
-        /* V1.2 additions */
-        case X_RRGetScreenSizeRange:        return SProcRRGetScreenSizeRange(client);
-        case X_RRSetScreenSize:             return SProcRRSetScreenSize(client);
-        case X_RRGetScreenResources:        return SProcRRGetScreenResources(client);
-        case X_RRGetOutputInfo:             return SProcRRGetOutputInfo(client);
-        case X_RRListOutputProperties:      return SProcRRListOutputProperties(client);
-        case X_RRQueryOutputProperty:       return SProcRRQueryOutputProperty(client);
-        case X_RRConfigureOutputProperty:   return SProcRRConfigureOutputProperty(client);
-        case X_RRChangeOutputProperty:      return SProcRRChangeOutputProperty(client);
-        case X_RRDeleteOutputProperty:      return SProcRRDeleteOutputProperty(client);
-        case X_RRGetOutputProperty:         return SProcRRGetOutputProperty(client);
-        case X_RRCreateMode:                return SProcRRCreateMode(client);
-        case X_RRDestroyMode:               return SProcRRDestroyMode(client);
-        case X_RRAddOutputMode:             return SProcRRAddOutputMode(client);
-        case X_RRDeleteOutputMode:          return SProcRRDeleteOutputMode(client);
-        case X_RRGetCrtcInfo:               return SProcRRGetCrtcInfo(client);
-        case X_RRSetCrtcConfig:             return SProcRRSetCrtcConfig(client);
-        case X_RRGetCrtcGammaSize:          return SProcRRGetCrtcGammaSize(client);
-        case X_RRGetCrtcGamma:              return SProcRRGetCrtcGamma(client);
-        case X_RRSetCrtcGamma:              return SProcRRSetCrtcGamma(client);
-
-        /* V1.3 additions */
-        case X_RRGetScreenResourcesCurrent: return SProcRRGetScreenResourcesCurrent(client);
-        case X_RRSetCrtcTransform:          return SProcRRSetCrtcTransform(client);
-        case X_RRGetCrtcTransform:          return SProcRRGetCrtcTransform(client);
-        case X_RRGetPanning:                return SProcRRGetPanning(client);
-        case X_RRSetPanning:                return SProcRRSetPanning(client);
-        case X_RRSetOutputPrimary:          return SProcRRSetOutputPrimary(client);
-        case X_RRGetOutputPrimary:          return SProcRRGetOutputPrimary(client);
-
-        /* V1.4 additions */
-        case X_RRGetProviders:              return SProcRRGetProviders(client);
-        case X_RRGetProviderInfo:           return SProcRRGetProviderInfo(client);
-        case X_RRSetProviderOffloadSink:    return SProcRRSetProviderOffloadSink(client);
-        case X_RRSetProviderOutputSource:   return SProcRRSetProviderOutputSource(client);
-        case X_RRListProviderProperties:    return SProcRRListProviderProperties(client);
-        case X_RRQueryProviderProperty:     return SProcRRQueryProviderProperty(client);
-        case X_RRConfigureProviderProperty: return SProcRRConfigureProviderProperty(client);
-        case X_RRChangeProviderProperty:    return SProcRRChangeProviderProperty(client);
-        case X_RRDeleteProviderProperty:    return SProcRRDeleteProviderProperty(client);
-        case X_RRGetProviderProperty:       return SProcRRGetProviderProperty(client);
-
-        /* V1.5 additions */
-        case X_RRGetMonitors:               return SProcRRGetMonitors(client);
-        case X_RRSetMonitor:                return SProcRRSetMonitor(client);
-        case X_RRDeleteMonitor:             return SProcRRDeleteMonitor(client);
-
-        /* V1.6 additions */
-        case X_RRCreateLease:               return SProcRRCreateLease(client);
-        case X_RRFreeLease:                 return SProcRRFreeLease(client);
-    }
-
-    return BadRequest;
-}
+int (*SProcRandrVector[RRNumberRequests]) (ClientPtr) = {
+    SProcRRQueryVersion,        /* 0 */
+/* we skip 1 to make old clients fail pretty immediately */
+        NULL,                   /* 1 SProcRandrOldGetScreenInfo */
+/* V1.0 apps share the same set screen config request id */
+        SProcRRSetScreenConfig, /* 2 */
+        NULL,                   /* 3 SProcRandrOldScreenChangeSelectInput */
+/* 3 used to be ScreenChangeSelectInput; deprecated */
+        SProcRRSelectInput,     /* 4 */
+        SProcRRGetScreenInfo,   /* 5 */
+/* V1.2 additions */
+        SProcRRGetScreenSizeRange,      /* 6 */
+        SProcRRSetScreenSize,   /* 7 */
+        SProcRRGetScreenResources,      /* 8 */
+        SProcRRGetOutputInfo,   /* 9 */
+        SProcRRListOutputProperties,    /* 10 */
+        SProcRRQueryOutputProperty,     /* 11 */
+        SProcRRConfigureOutputProperty, /* 12 */
+        SProcRRChangeOutputProperty,    /* 13 */
+        SProcRRDeleteOutputProperty,    /* 14 */
+        SProcRRGetOutputProperty,       /* 15 */
+        SProcRRCreateMode,      /* 16 */
+        SProcRRDestroyMode,     /* 17 */
+        SProcRRAddOutputMode,   /* 18 */
+        SProcRRDeleteOutputMode,        /* 19 */
+        SProcRRGetCrtcInfo,     /* 20 */
+        SProcRRSetCrtcConfig,   /* 21 */
+        SProcRRGetCrtcGammaSize,        /* 22 */
+        SProcRRGetCrtcGamma,    /* 23 */
+        SProcRRSetCrtcGamma,    /* 24 */
+/* V1.3 additions */
+        SProcRRGetScreenResourcesCurrent,      /* 25 */
+        SProcRRSetCrtcTransform,        /* 26 */
+        SProcRRGetCrtcTransform,        /* 27 */
+        SProcRRGetPanning,      /* 28 */
+        SProcRRSetPanning,      /* 29 */
+        SProcRRSetOutputPrimary,        /* 30 */
+        SProcRRGetOutputPrimary,        /* 31 */
+/* V1.4 additions */
+        SProcRRGetProviders,            /* 32 */
+        SProcRRGetProviderInfo,         /* 33 */
+        SProcRRSetProviderOffloadSink,  /* 34 */
+        SProcRRSetProviderOutputSource, /* 35 */
+        SProcRRListProviderProperties,  /* 36 */
+        SProcRRQueryProviderProperty,   /* 37 */
+        SProcRRConfigureProviderProperty, /* 38 */
+        SProcRRChangeProviderProperty,  /* 39 */
+        SProcRRDeleteProviderProperty,  /* 40 */
+        SProcRRGetProviderProperty,     /* 41 */
+/* V1.5 additions */
+        SProcRRGetMonitors,            /* 42 */
+        SProcRRSetMonitor,             /* 43 */
+        SProcRRDeleteMonitor,          /* 44 */
+/* V1.6 additions */
+        SProcRRCreateLease,            /* 45 */
+        SProcRRFreeLease,              /* 46 */
+};
commit 9f72353a51f09d8cf7b951a35136f4a746609224
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:44:02 2025 -0700

    Revert "randr: RRCrtcCreate(): drop unnecessary zero assigments"
    
    This reverts commit 6d2c42d0c8fd814e60a04babef96efa86922224f.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 3974c350d..2fb92b053 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -77,8 +77,16 @@ RRCrtcCreate(ScreenPtr pScreen, void *devPrivate)
         return NULL;
     crtc->id = FakeClientID(0);
     crtc->pScreen = pScreen;
+    crtc->mode = NULL;
+    crtc->x = 0;
+    crtc->y = 0;
     crtc->rotation = RR_Rotate_0;
     crtc->rotations = RR_Rotate_0;
+    crtc->outputs = NULL;
+    crtc->numOutputs = 0;
+    crtc->gammaSize = 0;
+    crtc->gammaRed = crtc->gammaBlue = crtc->gammaGreen = NULL;
+    crtc->changed = FALSE;
     crtc->devPrivate = devPrivate;
     RRTransformInit(&crtc->client_pending_transform);
     RRTransformInit(&crtc->client_current_transform);
commit 160abf285c1280455b99ce35c94f808cdaf2e370
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:43:47 2025 -0700

    Revert "randr: use struct initializer for reply structs"
    
    This reverts commit 7eff742ef2138696c28ca6c234592ff6a24fe788.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 4feccbb87..3974c350d 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -1022,16 +1022,18 @@ static void
 RRModeGetScanoutSize(RRModePtr mode, PictTransformPtr transform,
                      int *width, int *height)
 {
+    BoxRec box;
+
     if (mode == NULL) {
         *width = 0;
         *height = 0;
         return;
     }
 
-    BoxRec box = {
-        .x2 = mode->mode.width,
-        .y2 = mode->mode.height,
-    };
+    box.x1 = 0;
+    box.y1 = 0;
+    box.x2 = mode->mode.width;
+    box.y2 = mode->mode.height;
 
     pixman_transform_bounds(transform, &box);
     *width = box.x2 - box.x1;
@@ -1145,9 +1147,10 @@ int
 ProcRRGetCrtcInfo(ClientPtr client)
 {
     REQUEST(xRRGetCrtcInfoReq);
+    xRRGetCrtcInfoReply rep;
     RRCrtcPtr crtc;
     CARD8 *extra = NULL;
-    unsigned long extraLen = 0;
+    unsigned long extraLen;
     ScreenPtr pScreen;
     rrScrPrivPtr pScrPriv;
     RRModePtr mode;
@@ -1171,17 +1174,22 @@ ProcRRGetCrtcInfo(ClientPtr client)
 
     mode = crtc->mode;
 
-    xRRGetCrtcInfoReply rep = {
+    rep = (xRRGetCrtcInfoReply) {
         .type = X_Reply,
         .status = RRSetConfigSuccess,
         .sequenceNumber = client->sequence,
-        .timestamp = pScrPriv->lastSetTime.milliseconds,
-        .rotation = crtc->rotation,
-        .rotations = crtc->rotations,
+        .length = 0,
+        .timestamp = pScrPriv->lastSetTime.milliseconds
     };
     if (leased) {
+        rep.x = rep.y = rep.width = rep.height = 0;
+        rep.mode = 0;
         rep.rotation = RR_Rotate_0;
         rep.rotations = RR_Rotate_0;
+        rep.nOutput = 0;
+        rep.nPossibleOutput = 0;
+        rep.length = 0;
+        extraLen = 0;
     } else {
         if (pScrPriv->rrGetPanning &&
             pScrPriv->rrGetPanning(pScreen, crtc, &panned_area, NULL, NULL) &&
@@ -1200,18 +1208,23 @@ ProcRRGetCrtcInfo(ClientPtr client)
             rep.height = height;
         }
         rep.mode = mode ? mode->mode.id : 0;
+        rep.rotation = crtc->rotation;
+        rep.rotations = crtc->rotations;
         rep.nOutput = crtc->numOutputs;
+        k = 0;
         for (i = 0; i < pScrPriv->numOutputs; i++) {
             if (!RROutputIsLeased(pScrPriv->outputs[i])) {
                 for (j = 0; j < pScrPriv->outputs[i]->numCrtcs; j++)
                     if (pScrPriv->outputs[i]->crtcs[j] == crtc)
-                        rep.nPossibleOutput++;
+                        k++;
             }
         }
 
-        extraLen = (rep.nOutput + rep.nPossibleOutput) * sizeof(CARD32);
-        rep.length = bytes_to_int32(extraLen);
+        rep.nPossibleOutput = k;
+
+        rep.length = rep.nOutput + rep.nPossibleOutput;
 
+        extraLen = rep.length << 2;
         if (extraLen) {
             extra = malloc(extraLen);
             if (!extra)
@@ -1270,6 +1283,7 @@ int
 ProcRRSetCrtcConfig(ClientPtr client)
 {
     REQUEST(xRRSetCrtcConfigReq);
+    xRRSetCrtcConfigReply rep;
     ScreenPtr pScreen;
     rrScrPrivPtr pScrPriv;
     RRCrtcPtr crtc;
@@ -1461,10 +1475,11 @@ ProcRRSetCrtcConfig(ClientPtr client)
  sendReply:
     free(outputs);
 
-    xRRSetCrtcConfigReply rep = {
+    rep = (xRRSetCrtcConfigReply) {
         .type = X_Reply,
         .status = status,
         .sequenceNumber = client->sequence,
+        .length = 0,
         .newTimestamp = pScrPriv->lastSetTime.milliseconds
     };
 
@@ -1482,6 +1497,7 @@ int
 ProcRRGetPanning(ClientPtr client)
 {
     REQUEST(xRRGetPanningReq);
+    xRRGetPanningReply rep;
     RRCrtcPtr crtc;
     ScreenPtr pScreen;
     rrScrPrivPtr pScrPriv;
@@ -1501,7 +1517,7 @@ ProcRRGetPanning(ClientPtr client)
     if (!pScrPriv)
         return RRErrorBase + BadRRCrtc;
 
-    xRRGetPanningReply rep = {
+    rep = (xRRGetPanningReply) {
         .type = X_Reply,
         .status = RRSetConfigSuccess,
         .sequenceNumber = client->sequence,
@@ -1625,6 +1641,7 @@ int
 ProcRRGetCrtcGammaSize(ClientPtr client)
 {
     REQUEST(xRRGetCrtcGammaSizeReq);
+    xRRGetCrtcGammaSizeReply reply;
     RRCrtcPtr crtc;
 
     REQUEST_SIZE_MATCH(xRRGetCrtcGammaSizeReq);
@@ -1634,9 +1651,10 @@ ProcRRGetCrtcGammaSize(ClientPtr client)
     if (!RRCrtcGammaGet(crtc))
         return RRErrorBase + BadRRCrtc;
 
-    xRRGetCrtcGammaSizeReply reply = {
+    reply = (xRRGetCrtcGammaSizeReply) {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
+        .length = 0,
         .size = crtc->gammaSize
     };
     if (client->swapped) {
@@ -1652,6 +1670,7 @@ int
 ProcRRGetCrtcGamma(ClientPtr client)
 {
     REQUEST(xRRGetCrtcGammaReq);
+    xRRGetCrtcGammaReply reply;
     RRCrtcPtr crtc;
     unsigned long len;
     char *extra = NULL;
@@ -1671,7 +1690,7 @@ ProcRRGetCrtcGamma(ClientPtr client)
             return BadAlloc;
     }
 
-    xRRGetCrtcGammaReply reply = {
+    reply = (xRRGetCrtcGammaReply) {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
         .length = bytes_to_int32(len),
diff --git a/randr/rrdispatch.c b/randr/rrdispatch.c
index c51d510a7..866c6f252 100644
--- a/randr/rrdispatch.c
+++ b/randr/rrdispatch.c
@@ -42,6 +42,7 @@ ProcRRQueryVersion(ClientPtr client)
     xRRQueryVersionReply rep = {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
+        .length = 0
     };
     REQUEST(xRRQueryVersionReq);
     rrClientPriv(client);
diff --git a/randr/rrinfo.c b/randr/rrinfo.c
index 68861dd1c..24245b7b6 100644
--- a/randr/rrinfo.c
+++ b/randr/rrinfo.c
@@ -250,18 +250,19 @@ RRRegisterSize(ScreenPtr pScreen,
 {
     rrScrPriv(pScreen);
     int i;
+    RRScreenSize tmp;
     RRScreenSizePtr pNew;
 
     if (!pScrPriv)
         return 0;
 
-    RRScreenSize tmp = {
-        .width = width,
-        .height = height,
-        .mmWidth = mmWidth,
-        .mmHeight = mmHeight,
-    };
-
+    tmp.id = 0;
+    tmp.width = width;
+    tmp.height = height;
+    tmp.mmWidth = mmWidth;
+    tmp.mmHeight = mmHeight;
+    tmp.pRates = 0;
+    tmp.nRates = 0;
     for (i = 0; i < pScrPriv->nSizes; i++)
         if (RRScreenSizeMatches(&tmp, &pScrPriv->pSizes[i]))
             return &pScrPriv->pSizes[i];
diff --git a/randr/rrlease.c b/randr/rrlease.c
index e73307807..b6083cd2a 100644
--- a/randr/rrlease.c
+++ b/randr/rrlease.c
@@ -213,6 +213,7 @@ int
 ProcRRCreateLease(ClientPtr client)
 {
     REQUEST(xRRCreateLeaseReq);
+    xRRCreateLeaseReply rep;
     WindowPtr window;
     ScreenPtr screen;
     rrScrPrivPtr scr_priv;
@@ -333,10 +334,11 @@ leaseReturned:
 
     RRLeaseChangeState(lease, RRLeaseCreating, RRLeaseRunning);
 
-    xRRCreateLeaseReply rep = {
+    rep = (xRRCreateLeaseReply) {
         .type = X_Reply,
         .nfd = 1,
         .sequenceNumber = client->sequence,
+        .length = 0,
     };
 
     if (client->swapped) {
diff --git a/randr/rrmode.c b/randr/rrmode.c
index dbf4daed0..20ff4525d 100644
--- a/randr/rrmode.c
+++ b/randr/rrmode.c
@@ -286,6 +286,7 @@ int
 ProcRRCreateMode(ClientPtr client)
 {
     REQUEST(xRRCreateModeReq);
+    xRRCreateModeReply rep;
     WindowPtr pWin;
     ScreenPtr pScreen;
     xRRModeInfo *modeInfo;
@@ -313,12 +314,12 @@ ProcRRCreateMode(ClientPtr client)
     if (!mode)
         return error;
 
-    xRRCreateModeReply rep = {
+    rep = (xRRCreateModeReply) {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
+        .length = 0,
         .mode = mode->mode.id
-    };
-
+	};
     if (client->swapped) {
         swaps(&rep.sequenceNumber);
         swapl(&rep.length);
diff --git a/randr/rrmonitor.c b/randr/rrmonitor.c
index c77978e33..b3712c0ca 100644
--- a/randr/rrmonitor.c
+++ b/randr/rrmonitor.c
@@ -581,6 +581,11 @@ int
 ProcRRGetMonitors(ClientPtr client)
 {
     REQUEST(xRRGetMonitorsReq);
+    xRRGetMonitorsReply rep = {
+        .type = X_Reply,
+        .sequenceNumber = client->sequence,
+        .length = 0,
+    };
     WindowPtr           window;
     ScreenPtr           screen;
     int                 r;
@@ -599,19 +604,17 @@ ProcRRGetMonitors(ClientPtr client)
     if (!RRMonitorMakeList(screen, get_active, &monitors, &nmonitors))
         return BadAlloc;
 
+    rep.timestamp = RRMonitorTimestamp(screen);
+
     noutputs = 0;
     for (m = 0; m < nmonitors; m++) {
+        rep.length += SIZEOF(xRRMonitorInfo) >> 2;
+        rep.length += monitors[m].numOutputs;
         noutputs += monitors[m].numOutputs;
     }
 
-    xRRGetMonitorsReply rep = {
-        .type = X_Reply,
-        .sequenceNumber = client->sequence,
-        .timestamp = RRMonitorTimestamp(screen),
-        .length = noutputs + nmonitors * bytes_to_int32(sizeof(xRRMonitorInfo)),
-        .nmonitors = nmonitors,
-        .noutputs = noutputs,
-    };
+    rep.nmonitors = nmonitors;
+    rep.noutputs = noutputs;
 
     if (client->swapped) {
         swaps(&rep.sequenceNumber);
diff --git a/randr/rroutput.c b/randr/rroutput.c
index 0e414b27b..0b4639aa6 100644
--- a/randr/rroutput.c
+++ b/randr/rroutput.c
@@ -481,8 +481,15 @@ ProcRRGetOutputInfo(ClientPtr client)
             .sequenceNumber = client->sequence,
             .length = bytes_to_int32(OutputInfoExtra),
             .timestamp = pScrPriv->lastSetTime.milliseconds,
+            .crtc = None,
+            .mmWidth = 0,
+            .mmHeight = 0,
             .connection = RR_Disconnected,
             .subpixelOrder = SubPixelUnknown,
+            .nCrtcs = 0,
+            .nModes = 0,
+            .nPreferred = 0,
+            .nClones = 0,
             .nameLength = output->nameLength
         };
         extraLen = bytes_to_int32(rep.nameLength) << 2;
@@ -651,6 +658,7 @@ ProcRRGetOutputPrimary(ClientPtr client)
     REQUEST(xRRGetOutputPrimaryReq);
     WindowPtr pWin;
     rrScrPrivPtr pScrPriv;
+    xRRGetOutputPrimaryReply rep;
     RROutputPtr primary = NULL;
     int rc;
 
@@ -664,7 +672,7 @@ ProcRRGetOutputPrimary(ClientPtr client)
     if (pScrPriv)
         primary = pScrPriv->primaryOutput;
 
-    xRRGetOutputPrimaryReply rep = {
+    rep = (xRRGetOutputPrimaryReply) {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
         .output = primary ? primary->id : None
diff --git a/randr/rrproperty.c b/randr/rrproperty.c
index 668dee40c..f97c3464f 100644
--- a/randr/rrproperty.c
+++ b/randr/rrproperty.c
@@ -417,6 +417,7 @@ ProcRRListOutputProperties(ClientPtr client)
 {
     REQUEST(xRRListOutputPropertiesReq);
     Atom *pAtoms = NULL;
+    xRRListOutputPropertiesReply rep;
     int numProps = 0;
     RROutputPtr output;
     RRPropertyPtr prop;
@@ -431,7 +432,7 @@ ProcRRListOutputProperties(ClientPtr client)
         if (!(pAtoms = xallocarray(numProps, sizeof(Atom))))
             return BadAlloc;
 
-    xRRListOutputPropertiesReply rep = {
+    rep = (xRRListOutputPropertiesReply) {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
         .length = bytes_to_int32(numProps * sizeof(Atom)),
@@ -461,6 +462,7 @@ int
 ProcRRQueryOutputProperty(ClientPtr client)
 {
     REQUEST(xRRQueryOutputPropertyReq);
+    xRRQueryOutputPropertyReply rep;
     RROutputPtr output;
     RRPropertyPtr prop;
     char *extra = NULL;
@@ -479,7 +481,7 @@ ProcRRQueryOutputProperty(ClientPtr client)
             return BadAlloc;
     }
 
-    xRRQueryOutputPropertyReply rep = {
+    rep = (xRRQueryOutputPropertyReply) {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
         .length = prop->num_valid,
@@ -618,6 +620,7 @@ ProcRRGetOutputProperty(ClientPtr client)
     RRPropertyValuePtr prop_value;
     unsigned long n, len, ind;
     RROutputPtr output;
+    xRRGetOutputPropertyReply reply;
     char *extra = NULL;
 
     REQUEST_SIZE_MATCH(xRRGetOutputPropertyReq);
@@ -643,14 +646,22 @@ ProcRRGetOutputProperty(ClientPtr client)
         if (prop->propertyName == stuff->property)
             break;
 
-    xRRGetOutputPropertyReply reply = {
+    reply = (xRRGetOutputPropertyReply) {
         .type = X_Reply,
         .sequenceNumber = client->sequence
     };
-
     if (!prop) {
+        reply.nItems = 0;
+        reply.length = 0;
+        reply.bytesAfter = 0;
+        reply.propertyType = None;
+        reply.format = 0;
         if (client->swapped) {
             swaps(&reply.sequenceNumber);
+            swapl(&reply.length);
+            swapl(&reply.propertyType);
+            swapl(&reply.bytesAfter);
+            swapl(&reply.nItems);
         }
         WriteToClient(client, sizeof(xRRGetOutputPropertyReply), &reply);
         return Success;
@@ -670,11 +681,15 @@ ProcRRGetOutputProperty(ClientPtr client)
         ) {
         reply.bytesAfter = prop_value->size;
         reply.format = prop_value->format;
+        reply.length = 0;
+        reply.nItems = 0;
         reply.propertyType = prop_value->type;
         if (client->swapped) {
             swaps(&reply.sequenceNumber);
+            swapl(&reply.length);
             swapl(&reply.propertyType);
             swapl(&reply.bytesAfter);
+            swapl(&reply.nItems);
         }
         WriteToClient(client, sizeof(xRRGetOutputPropertyReply), &reply);
         return Success;
@@ -706,6 +721,8 @@ ProcRRGetOutputProperty(ClientPtr client)
     reply.length = bytes_to_int32(len);
     if (prop_value->format)
         reply.nItems = len / (prop_value->format / 8);
+    else
+        reply.nItems = 0;
     reply.propertyType = prop_value->type;
 
     if (stuff->delete && (reply.bytesAfter == 0)) {
diff --git a/randr/rrprovider.c b/randr/rrprovider.c
index 61e9001b4..c67de88ae 100644
--- a/randr/rrprovider.c
+++ b/randr/rrprovider.c
@@ -56,6 +56,7 @@ int
 ProcRRGetProviders (ClientPtr client)
 {
     REQUEST(xRRGetProvidersReq);
+    xRRGetProvidersReply rep;
     WindowPtr pWin;
     ScreenPtr pScreen;
     rrScrPrivPtr pScrPriv;
@@ -86,36 +87,36 @@ ProcRRGetProviders (ClientPtr client)
 
     if (!pScrPriv)
     {
-        xRRGetProvidersReply rep = {
+        rep = (xRRGetProvidersReply) {
             .type = X_Reply,
             .sequenceNumber = client->sequence,
+            .length = 0,
             .timestamp = currentTime.milliseconds,
+            .nProviders = 0
         };
-        WriteToClient(client, sizeof(rep), &rep);
-        return Success;
-    }
-
-    extraLen = total_providers * sizeof(CARD32);
-
-    xRRGetProvidersReply rep = {
-        .type = X_Reply,
-        .sequenceNumber = client->sequence,
-        .timestamp = pScrPriv->lastSetTime.milliseconds,
-        .nProviders = total_providers,
-        .length = bytes_to_int32(extraLen),
-    };
-
-    if (extraLen) {
-        extra = malloc(extraLen);
-        if (!extra)
-            return BadAlloc;
-    } else
         extra = NULL;
-
-    providers = (RRProvider *)extra;
-    ADD_PROVIDER(pScreen);
-    xorg_list_for_each_entry(iter, &pScreen->secondary_list, secondary_head) {
-        ADD_PROVIDER(iter);
+        extraLen = 0;
+    } else {
+        rep = (xRRGetProvidersReply) {
+            .type = X_Reply,
+            .sequenceNumber = client->sequence,
+            .timestamp = pScrPriv->lastSetTime.milliseconds,
+            .nProviders = total_providers,
+            .length = total_providers
+        };
+        extraLen = rep.length << 2;
+        if (extraLen) {
+            extra = malloc(extraLen);
+            if (!extra)
+                return BadAlloc;
+        } else
+            extra = NULL;
+
+        providers = (RRProvider *)extra;
+        ADD_PROVIDER(pScreen);
+        xorg_list_for_each_entry(iter, &pScreen->secondary_list, secondary_head) {
+            ADD_PROVIDER(iter);
+        }
     }
 
     if (client->swapped) {
@@ -137,6 +138,7 @@ int
 ProcRRGetProviderInfo (ClientPtr client)
 {
     REQUEST(xRRGetProviderInfoReq);
+    xRRGetProviderInfoReply rep;
     rrScrPrivPtr pScrPriv, pScrProvPriv;
     RRProviderPtr provider;
     ScreenPtr pScreen;
@@ -156,15 +158,17 @@ ProcRRGetProviderInfo (ClientPtr client)
     pScreen = provider->pScreen;
     pScrPriv = rrGetScrPriv(pScreen);
 
-    xRRGetProviderInfoReply rep = {
+    rep = (xRRGetProviderInfoReply) {
         .type = X_Reply,
         .status = RRSetConfigSuccess,
         .sequenceNumber = client->sequence,
+        .length = 0,
         .capabilities = provider->capabilities,
         .nameLength = provider->nameLength,
         .timestamp = pScrPriv->lastSetTime.milliseconds,
         .nCrtcs = pScrPriv->numCrtcs,
         .nOutputs = pScrPriv->numOutputs,
+        .nAssociatedProviders = 0
     };
 
     /* count associated providers */
diff --git a/randr/rrproviderproperty.c b/randr/rrproviderproperty.c
index 27444ea8a..69f66ed27 100644
--- a/randr/rrproviderproperty.c
+++ b/randr/rrproviderproperty.c
@@ -391,6 +391,7 @@ ProcRRListProviderProperties(ClientPtr client)
 {
     REQUEST(xRRListProviderPropertiesReq);
     Atom *pAtoms = NULL, *temppAtoms;
+    xRRListProviderPropertiesReply rep;
     int numProps = 0;
     RRProviderPtr provider;
     RRPropertyPtr prop;
@@ -405,7 +406,7 @@ ProcRRListProviderProperties(ClientPtr client)
         if (!(pAtoms = xallocarray(numProps, sizeof(Atom))))
             return BadAlloc;
 
-    xRRListProviderPropertiesReply rep = {
+    rep = (xRRListProviderPropertiesReply) {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
         .length = bytes_to_int32(numProps * sizeof(Atom)),
@@ -433,6 +434,7 @@ int
 ProcRRQueryProviderProperty(ClientPtr client)
 {
     REQUEST(xRRQueryProviderPropertyReq);
+    xRRQueryProviderPropertyReply rep;
     RRProviderPtr provider;
     RRPropertyPtr prop;
     char *extra = NULL;
@@ -450,8 +452,7 @@ ProcRRQueryProviderProperty(ClientPtr client)
         if (!extra)
             return BadAlloc;
     }
-
-    xRRQueryProviderPropertyReply rep = {
+    rep = (xRRQueryProviderPropertyReply) {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
         .length = prop->num_valid,
@@ -613,8 +614,17 @@ ProcRRGetProviderProperty(ClientPtr client)
             break;
 
     if (!prop) {
+        reply.nItems = 0;
+        reply.length = 0;
+        reply.bytesAfter = 0;
+        reply.propertyType = None;
+        reply.format = 0;
         if (client->swapped) {
             swaps(&reply.sequenceNumber);
+            swapl(&reply.length);
+            swapl(&reply.propertyType);
+            swapl(&reply.bytesAfter);
+            swapl(&reply.nItems);
         }
         WriteToClient(client, sizeof(xRRGetProviderPropertyReply), &reply);
         return Success;
@@ -634,11 +644,15 @@ ProcRRGetProviderProperty(ClientPtr client)
         ) {
         reply.bytesAfter = prop_value->size;
         reply.format = prop_value->format;
+        reply.length = 0;
+        reply.nItems = 0;
         reply.propertyType = prop_value->type;
         if (client->swapped) {
             swaps(&reply.sequenceNumber);
+            swapl(&reply.length);
             swapl(&reply.propertyType);
             swapl(&reply.bytesAfter);
+            swapl(&reply.nItems);
         }
         WriteToClient(client, sizeof(xRRGetProviderPropertyReply), &reply);
         return Success;
@@ -670,6 +684,8 @@ ProcRRGetProviderProperty(ClientPtr client)
     reply.length = bytes_to_int32(len);
     if (prop_value->format)
         reply.nItems = len / (prop_value->format / 8);
+    else
+        reply.nItems = 0;
     reply.propertyType = prop_value->type;
 
     if (stuff->delete && (reply.bytesAfter == 0)) {
diff --git a/randr/rrscreen.c b/randr/rrscreen.c
index 184b30f32..1403a3cf4 100644
--- a/randr/rrscreen.c
+++ b/randr/rrscreen.c
@@ -76,6 +76,8 @@ RRSendConfigNotify(ScreenPtr pScreen)
     xEvent event = {
         .u.configureNotify.window = pWin->drawable.id,
         .u.configureNotify.aboveSibling = None,
+        .u.configureNotify.x = 0,
+        .u.configureNotify.y = 0,
 
     /* XXX xinerama stuff ? */
 
@@ -190,6 +192,7 @@ int
 ProcRRGetScreenSizeRange(ClientPtr client)
 {
     REQUEST(xRRGetScreenSizeRangeReq);
+    xRRGetScreenSizeRangeReply rep;
     WindowPtr pWin;
     ScreenPtr pScreen;
     rrScrPrivPtr pScrPriv;
@@ -203,9 +206,11 @@ ProcRRGetScreenSizeRange(ClientPtr client)
     pScreen = pWin->drawable.pScreen;
     pScrPriv = rrGetScrPriv(pScreen);
 
-    xRRGetScreenSizeRangeReply rep = {
+    rep = (xRRGetScreenSizeRangeReply) {
         .type = X_Reply,
+        .pad = 0,
         .sequenceNumber = client->sequence,
+        .length = 0
     };
 
     if (pScrPriv) {
@@ -367,6 +372,7 @@ rrGetMultiScreenResources(ClientPtr client, Bool query, ScreenPtr pScreen)
     rrScrPrivPtr pScrPriv;
     int num_modes;
     RRModePtr *modes;
+    xRRGetScreenResourcesReply rep;
     unsigned long extraLen;
     CARD8 *extra;
     RRCrtc *crtcs;
@@ -403,10 +409,10 @@ rrGetMultiScreenResources(ClientPtr client, Bool query, ScreenPtr pScreen)
     }
 
     pScrPriv = rrGetScrPriv(pScreen);
-
-    xRRGetScreenResourcesReply rep = {
+    rep = (xRRGetScreenResourcesReply) {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
+        .length = 0,
         .timestamp = pScrPriv->lastSetTime.milliseconds,
         .configTimestamp = pScrPriv->lastConfigTime.milliseconds,
         .nCrtcs = total_crtcs,
@@ -485,8 +491,8 @@ rrGetScreenResources(ClientPtr client, Bool query)
     WindowPtr pWin;
     ScreenPtr pScreen;
     rrScrPrivPtr pScrPriv;
-    CARD8 *extra = NULL;
-    unsigned long extraLen = 0;
+    CARD8 *extra;
+    unsigned long extraLen;
     int i, rc, has_primary = 0;
     RRCrtc *crtcs;
     RROutput *outputs;
@@ -512,9 +518,16 @@ rrGetScreenResources(ClientPtr client, Bool query)
         rep = (xRRGetScreenResourcesReply) {
             .type = X_Reply,
             .sequenceNumber = client->sequence,
+            .length = 0,
             .timestamp = currentTime.milliseconds,
             .configTimestamp = currentTime.milliseconds,
+            .nCrtcs = 0,
+            .nOutputs = 0,
+            .nModes = 0,
+            .nbytesNames = 0
         };
+        extra = NULL;
+        extraLen = 0;
     }
     else {
         RRModePtr *modes;
@@ -527,13 +540,16 @@ rrGetScreenResources(ClientPtr client, Bool query)
         rep = (xRRGetScreenResourcesReply) {
             .type = X_Reply,
             .sequenceNumber = client->sequence,
+            .length = 0,
             .timestamp = pScrPriv->lastSetTime.milliseconds,
             .configTimestamp = pScrPriv->lastConfigTime.milliseconds,
             .nCrtcs = pScrPriv->numCrtcs,
             .nOutputs = pScrPriv->numOutputs,
             .nModes = num_modes,
+            .nbytesNames = 0
         };
 
+
         for (i = 0; i < num_modes; i++)
             rep.nbytesNames += modes[i]->mode.nameLength;
 
@@ -746,8 +762,8 @@ ProcRRGetScreenInfo(ClientPtr client)
     int rc;
     ScreenPtr pScreen;
     rrScrPrivPtr pScrPriv;
-    CARD8 *extra = NULL;
-    unsigned long extraLen = 0;
+    CARD8 *extra;
+    unsigned long extraLen;
     RROutputPtr output;
 
     REQUEST_SIZE_MATCH(xRRGetScreenInfoReq);
@@ -769,11 +785,18 @@ ProcRRGetScreenInfo(ClientPtr client)
             .type = X_Reply,
             .setOfRotations = RR_Rotate_0,
             .sequenceNumber = client->sequence,
+            .length = 0,
             .root = pWin->drawable.pScreen->root->drawable.id,
             .timestamp = currentTime.milliseconds,
             .configTimestamp = currentTime.milliseconds,
+            .nSizes = 0,
+            .sizeID = 0,
             .rotation = RR_Rotate_0,
+            .rate = 0,
+            .nrateEnts = 0
         };
+        extra = 0;
+        extraLen = 0;
     }
     else {
         int i, j;
@@ -792,6 +815,7 @@ ProcRRGetScreenInfo(ClientPtr client)
             .type = X_Reply,
             .setOfRotations = output->crtc->rotations,
             .sequenceNumber = client->sequence,
+            .length = 0,
             .root = pWin->drawable.pScreen->root->drawable.id,
             .timestamp = pScrPriv->lastSetTime.milliseconds,
             .configTimestamp = pScrPriv->lastConfigTime.milliseconds,
@@ -881,6 +905,7 @@ int
 ProcRRSetScreenConfig(ClientPtr client)
 {
     REQUEST(xRRSetScreenConfigReq);
+    xRRSetScreenConfigReply rep;
     DrawablePtr pDraw;
     int rc;
     ScreenPtr pScreen;
@@ -1085,10 +1110,12 @@ ProcRRSetScreenConfig(ClientPtr client)
 
     free(pData);
 
-    xRRSetScreenConfigReply rep = {
+    rep = (xRRSetScreenConfigReply) {
         .type = X_Reply,
         .status = status,
         .sequenceNumber = client->sequence,
+        .length = 0,
+
         .newTimestamp = pScrPriv->lastSetTime.milliseconds,
         .newConfigTimestamp = pScrPriv->lastConfigTime.milliseconds,
         .root = pDraw->pScreen->root->drawable.id,
diff --git a/randr/rrxinerama.c b/randr/rrxinerama.c
index 22c23a0e9..e2f489ae0 100644
--- a/randr/rrxinerama.c
+++ b/randr/rrxinerama.c
@@ -99,6 +99,7 @@ ProcRRXineramaQueryVersion(ClientPtr client)
     xPanoramiXQueryVersionReply rep = {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
+        .length = 0,
         .majorVersion = SERVER_RRXINERAMA_MAJOR_VERSION,
         .minorVersion = SERVER_RRXINERAMA_MINOR_VERSION
     };
@@ -119,6 +120,7 @@ ProcRRXineramaGetState(ClientPtr client)
 {
     REQUEST(xPanoramiXGetStateReq);
     WindowPtr pWin;
+    xPanoramiXGetStateReply rep;
     register int rc;
     ScreenPtr pScreen;
     rrScrPrivPtr pScrPriv;
@@ -136,10 +138,11 @@ ProcRRXineramaGetState(ClientPtr client)
         active = TRUE;
     }
 
-    xPanoramiXGetStateReply rep = {
+    rep = (xPanoramiXGetStateReply) {
         .type = X_Reply,
         .state = active,
         .sequenceNumber = client->sequence,
+        .length = 0,
         .window = stuff->window
     };
     if (client->swapped) {
@@ -168,6 +171,7 @@ ProcRRXineramaGetScreenCount(ClientPtr client)
 {
     REQUEST(xPanoramiXGetScreenCountReq);
     WindowPtr pWin;
+    xPanoramiXGetScreenCountReply rep;
     register int rc;
 
     REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq);
@@ -175,10 +179,11 @@ ProcRRXineramaGetScreenCount(ClientPtr client)
     if (rc != Success)
         return rc;
 
-    xPanoramiXGetScreenCountReply rep = {
+    rep = (xPanoramiXGetScreenCountReply)  {
         .type = X_Reply,
         .ScreenCount = RRXineramaScreenCount(pWin->drawable.pScreen),
         .sequenceNumber = client->sequence,
+        .length = 0,
         .window = stuff->window
     };
     if (client->swapped) {
@@ -196,6 +201,7 @@ ProcRRXineramaGetScreenSize(ClientPtr client)
     REQUEST(xPanoramiXGetScreenSizeReq);
     WindowPtr pWin, pRoot;
     ScreenPtr pScreen;
+    xPanoramiXGetScreenSizeReply rep;
     register int rc;
 
     REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq);
@@ -206,9 +212,10 @@ ProcRRXineramaGetScreenSize(ClientPtr client)
     pScreen = pWin->drawable.pScreen;
     pRoot = pScreen->root;
 
-    xPanoramiXGetScreenSizeReply rep = {
+    rep = (xPanoramiXGetScreenSizeReply) {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
+        .length = 0,
         .width = pRoot->drawable.width,
         .height = pRoot->drawable.height,
         .window = stuff->window,
@@ -229,11 +236,13 @@ ProcRRXineramaGetScreenSize(ClientPtr client)
 int
 ProcRRXineramaIsActive(ClientPtr client)
 {
+    xXineramaIsActiveReply rep;
 
     REQUEST_SIZE_MATCH(xXineramaIsActiveReq);
 
-    xXineramaIsActiveReply rep = {
+    rep = (xXineramaIsActiveReply) {
         .type = X_Reply,
+        .length = 0,
         .sequenceNumber = client->sequence,
         .state = RRXineramaScreenActive(screenInfo.screens[RR_XINERAMA_SCREEN])
     };
@@ -249,12 +258,12 @@ ProcRRXineramaIsActive(ClientPtr client)
 static void
 RRXineramaWriteMonitor(ClientPtr client, RRMonitorPtr monitor)
 {
-    xXineramaScreenInfo scratch = {
-        .x_org = monitor->geometry.box.x1,
-        .y_org = monitor->geometry.box.y1,
-        .width = monitor->geometry.box.x2 - monitor->geometry.box.x1,
-        .height = monitor->geometry.box.y2 - monitor->geometry.box.y1,
-    };
+    xXineramaScreenInfo scratch;
+
+    scratch.x_org = monitor->geometry.box.x1;
+    scratch.y_org = monitor->geometry.box.y1;
+    scratch.width = monitor->geometry.box.x2 - monitor->geometry.box.x1;
+    scratch.height = monitor->geometry.box.y2 - monitor->geometry.box.y1;
 
     if (client->swapped) {
         swaps(&scratch.x_org);
@@ -269,6 +278,7 @@ RRXineramaWriteMonitor(ClientPtr client, RRMonitorPtr monitor)
 int
 ProcRRXineramaQueryScreens(ClientPtr client)
 {
+    xXineramaQueryScreensReply rep;
     ScreenPtr pScreen = screenInfo.screens[RR_XINERAMA_SCREEN];
     int m;
     RRMonitorPtr monitors = NULL;
@@ -282,7 +292,7 @@ ProcRRXineramaQueryScreens(ClientPtr client)
             return BadAlloc;
     }
 
-    xXineramaQueryScreensReply rep = {
+    rep = (xXineramaQueryScreensReply) {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
         .length = bytes_to_int32(nmonitors * sz_XineramaScreenInfo),
commit 9c53c6cf76bbf6e28da4a822e2666a4af53dc498
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:43:36 2025 -0700

    Revert "randr: ProcRRGetCrtcInfo(): use locally scoped variables"
    
    This reverts commit 90abc95c85020a2d2e02246a297d26261dd06c33.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index c0127534a..4feccbb87 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -1148,19 +1148,28 @@ ProcRRGetCrtcInfo(ClientPtr client)
     RRCrtcPtr crtc;
     CARD8 *extra = NULL;
     unsigned long extraLen = 0;
+    ScreenPtr pScreen;
+    rrScrPrivPtr pScrPriv;
+    RRModePtr mode;
+    RROutput *outputs;
+    RROutput *possible;
+    int i, j, k;
+    int width, height;
+    BoxRec panned_area;
+    Bool leased;
 
     REQUEST_SIZE_MATCH(xRRGetCrtcInfoReq);
     VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess);
 
-    Bool leased = RRCrtcIsLeased(crtc);
+    leased = RRCrtcIsLeased(crtc);
 
     /* All crtcs must be associated with screens before client
      * requests are processed
      */
-    ScreenPtr pScreen = crtc->pScreen;
-    rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen);
+    pScreen = crtc->pScreen;
+    pScrPriv = rrGetScrPriv(pScreen);
 
-    RRModePtr mode = crtc->mode;
+    mode = crtc->mode;
 
     xRRGetCrtcInfoReply rep = {
         .type = X_Reply,
@@ -1174,7 +1183,6 @@ ProcRRGetCrtcInfo(ClientPtr client)
         rep.rotation = RR_Rotate_0;
         rep.rotations = RR_Rotate_0;
     } else {
-        BoxRec panned_area;
         if (pScrPriv->rrGetPanning &&
             pScrPriv->rrGetPanning(pScreen, crtc, &panned_area, NULL, NULL) &&
             (panned_area.x2 > panned_area.x1) && (panned_area.y2 > panned_area.y1))
@@ -1185,7 +1193,6 @@ ProcRRGetCrtcInfo(ClientPtr client)
             rep.height = panned_area.y2 - panned_area.y1;
         }
         else {
-            int width, height;
             RRCrtcGetScanoutSize(crtc, &width, &height);
             rep.x = crtc->x;
             rep.y = crtc->y;
@@ -1194,9 +1201,9 @@ ProcRRGetCrtcInfo(ClientPtr client)
         }
         rep.mode = mode ? mode->mode.id : 0;
         rep.nOutput = crtc->numOutputs;
-        for (int i = 0; i < pScrPriv->numOutputs; i++) {
+        for (i = 0; i < pScrPriv->numOutputs; i++) {
             if (!RROutputIsLeased(pScrPriv->outputs[i])) {
-                for (int j = 0; j < pScrPriv->outputs[i]->numCrtcs; j++)
+                for (j = 0; j < pScrPriv->outputs[i]->numCrtcs; j++)
                     if (pScrPriv->outputs[i]->crtcs[j] == crtc)
                         rep.nPossibleOutput++;
             }
@@ -1211,19 +1218,18 @@ ProcRRGetCrtcInfo(ClientPtr client)
                 return BadAlloc;
         }
 
-        RROutput *outputs = (RROutput *) extra;
-        RROutput *possible = (RROutput *) (outputs + rep.nOutput);
+        outputs = (RROutput *) extra;
+        possible = (RROutput *) (outputs + rep.nOutput);
 
-        for (int i = 0; i < crtc->numOutputs; i++) {
+        for (i = 0; i < crtc->numOutputs; i++) {
             outputs[i] = crtc->outputs[i]->id;
             if (client->swapped)
                 swapl(&outputs[i]);
         }
-
-        int k = 0;
-        for (int i = 0; i < pScrPriv->numOutputs; i++) {
+        k = 0;
+        for (i = 0; i < pScrPriv->numOutputs; i++) {
             if (!RROutputIsLeased(pScrPriv->outputs[i])) {
-                for (int j = 0; j < pScrPriv->outputs[i]->numCrtcs; j++)
+                for (j = 0; j < pScrPriv->outputs[i]->numCrtcs; j++)
                     if (pScrPriv->outputs[i]->crtcs[j] == crtc) {
                         possible[k] = pScrPriv->outputs[i]->id;
                         if (client->swapped)
commit c371d11af00919207e28c50cc025dca36584dd03
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:43:23 2025 -0700

    Revert "randr: ProcRRGetCrtcTransform(): split reply header and payload"
    
    This reverts commit c6f1b8a735d3c6ba80ca552b79e2dbe8a358ff40.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 75ae0eea5..c0127534a 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -1752,6 +1752,8 @@ ProcRRSetCrtcTransform(ClientPtr client)
                               filter, nbytes, params, nparams);
 }
 
+#define CrtcTransformExtra	(SIZEOF(xRRGetCrtcTransformReply) - 32)
+
 static int
 transform_filter_length(RRTransformPtr transform)
 {
@@ -1806,9 +1808,11 @@ int
 ProcRRGetCrtcTransform(ClientPtr client)
 {
     REQUEST(xRRGetCrtcTransformReq);
+    xRRGetCrtcTransformReply *reply;
     RRCrtcPtr crtc;
     int nextra;
     RRTransformPtr current, pending;
+    char *extra;
 
     REQUEST_SIZE_MATCH(xRRGetCrtcTransformReq);
     VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess);
@@ -1819,36 +1823,33 @@ ProcRRGetCrtcTransform(ClientPtr client)
     nextra = (transform_filter_length(pending) +
               transform_filter_length(current));
 
-    char *extra_buf = calloc(1, nextra);
-    if (!extra_buf)
+    reply = calloc(1, sizeof(xRRGetCrtcTransformReply) + nextra);
+    if (!reply)
         return BadAlloc;
 
-    char *extra = extra_buf;
+    extra = (char *) (reply + 1);
+    reply->type = X_Reply;
+    reply->sequenceNumber = client->sequence;
+    reply->length = bytes_to_int32(CrtcTransformExtra + nextra);
 
-    xRRGetCrtcTransformReply rep = {
-        .type = X_Reply,
-        .sequenceNumber = client->sequence,
-        .length = bytes_to_int32(sizeof(xRRGetCrtcTransformReply) - sizeof(xReq)),
-        .hasTransforms = crtc->transforms,
-    };
+    reply->hasTransforms = crtc->transforms;
 
-    transform_encode(client, &rep.pendingTransform, &pending->transform);
+    transform_encode(client, &reply->pendingTransform, &pending->transform);
     extra += transform_filter_encode(client, extra,
-                                     &rep.pendingNbytesFilter,
-                                     &rep.pendingNparamsFilter, pending);
+                                     &reply->pendingNbytesFilter,
+                                     &reply->pendingNparamsFilter, pending);
 
-    transform_encode(client, &rep.currentTransform, &current->transform);
+    transform_encode(client, &reply->currentTransform, &current->transform);
     extra += transform_filter_encode(client, extra,
-                                     &rep.currentNbytesFilter,
-                                     &rep.currentNparamsFilter, current);
+                                     &reply->currentNbytesFilter,
+                                     &reply->currentNparamsFilter, current);
 
     if (client->swapped) {
-        swaps(&rep.sequenceNumber);
-        swapl(&rep.length);
+        swaps(&reply->sequenceNumber);
+        swapl(&reply->length);
     }
-    WriteToClient(client, sizeof(xRRGetCrtcTransformReply), &rep);
-    WriteToClient(client, nextra, extra_buf);
-    free(extra_buf);
+    WriteToClient(client, sizeof(xRRGetCrtcTransformReply) + nextra, reply);
+    free(reply);
     return Success;
 }
 
commit 9b753c397075dde0855e279252e4d8db29dc2e55
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:43:00 2025 -0700

    Revert "randr: ProcRRGetMonitors() use SwapLongs instead of callbacks"
    
    This reverts commit 203f59c6d3a47b0cf4be6cff7ca9ef99c9933f00.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rrmonitor.c b/randr/rrmonitor.c
index db33d117c..c77978e33 100644
--- a/randr/rrmonitor.c
+++ b/randr/rrmonitor.c
@@ -622,6 +622,8 @@ ProcRRGetMonitors(ClientPtr client)
     }
     WriteToClient(client, sizeof(xRRGetMonitorsReply), &rep);
 
+    client->pSwapReplyFunc = (ReplySwapPtr) CopySwap32Write;
+
     for (m = 0; m < nmonitors; m++) {
         RRMonitorPtr    monitor = &monitors[m];
         xRRMonitorInfo  info = {
@@ -647,14 +649,8 @@ ProcRRGetMonitors(ClientPtr client)
             swapl(&info.heightInMillimeters);
         }
 
-        RROutput outputs[monitor->numOutputs];
-        memcpy(outputs, monitor->outputs, monitor->numOutputs * sizeof (RROutput));
-
-        if (client->swapped)
-            SwapLongs(outputs, monitor->numOutputs);
-
         WriteToClient(client, sizeof(xRRMonitorInfo), &info);
-        WriteToClient(client, sizeof(outputs), outputs);
+        WriteSwappedDataToClient(client, monitor->numOutputs * sizeof (RROutput), monitor->outputs);
     }
 
     RRMonitorFreeList(monitors, nmonitors);
commit a205917752827e8b4a020152b8de3abf2f7270ff
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:42:33 2025 -0700

    Revert "randr: ProcRRGetMonitors(): collect reply payload in temporary buffer"
    
    This reverts commit 1bc6ca30a924e36893b0a604051762821163b66a.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rrmonitor.c b/randr/rrmonitor.c
index 661dee32e..db33d117c 100644
--- a/randr/rrmonitor.c
+++ b/randr/rrmonitor.c
@@ -604,13 +604,11 @@ ProcRRGetMonitors(ClientPtr client)
         noutputs += monitors[m].numOutputs;
     }
 
-    int payload_len = noutputs * sizeof(CARD32) + nmonitors * sizeof(xRRMonitorInfo);
-
     xRRGetMonitorsReply rep = {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
         .timestamp = RRMonitorTimestamp(screen),
-        .length = bytes_to_int32(payload_len),
+        .length = noutputs + nmonitors * bytes_to_int32(sizeof(xRRMonitorInfo)),
         .nmonitors = nmonitors,
         .noutputs = noutputs,
     };
@@ -624,18 +622,9 @@ ProcRRGetMonitors(ClientPtr client)
     }
     WriteToClient(client, sizeof(xRRGetMonitorsReply), &rep);
 
-    char *payload_buf = calloc(1, payload_len);
-    if (!payload_buf) {
-        RRMonitorFreeList(monitors, nmonitors);
-        return BadAlloc;
-    }
-
-    char *walk = payload_buf;
-
     for (m = 0; m < nmonitors; m++) {
         RRMonitorPtr    monitor = &monitors[m];
-        xRRMonitorInfo  *info = (xRRMonitorInfo*) walk;
-        *info = (xRRMonitorInfo) {
+        xRRMonitorInfo  info = {
             .name = monitor->name,
             .primary = monitor->primary,
             .automatic = monitor->automatic,
@@ -648,27 +637,26 @@ ProcRRGetMonitors(ClientPtr client)
             .heightInMillimeters = monitor->geometry.mmHeight,
         };
         if (client->swapped) {
-            swapl(&info->name);
-            swaps(&info->noutput);
-            swaps(&info->x);
-            swaps(&info->y);
-            swaps(&info->width);
-            swaps(&info->height);
-            swapl(&info->widthInMillimeters);
-            swapl(&info->heightInMillimeters);
+            swapl(&info.name);
+            swaps(&info.noutput);
+            swaps(&info.x);
+            swaps(&info.y);
+            swaps(&info.width);
+            swaps(&info.height);
+            swapl(&info.widthInMillimeters);
+            swapl(&info.heightInMillimeters);
         }
 
-        walk += sizeof(xRRMonitorInfo);
-        memcpy(walk, monitor->outputs, monitor->numOutputs * sizeof (RROutput));
+        RROutput outputs[monitor->numOutputs];
+        memcpy(outputs, monitor->outputs, monitor->numOutputs * sizeof (RROutput));
+
         if (client->swapped)
-            SwapLongs((CARD32*)walk, monitor->numOutputs);
+            SwapLongs(outputs, monitor->numOutputs);
 
-        walk += monitor->numOutputs * sizeof (RROutput);
+        WriteToClient(client, sizeof(xRRMonitorInfo), &info);
+        WriteToClient(client, sizeof(outputs), outputs);
     }
 
-    WriteToClient(client, payload_len, payload_buf);
-
-    free(payload_buf);
     RRMonitorFreeList(monitors, nmonitors);
 
     return Success;
commit 896d9d3be8974994e6561ce8d09773911d53ec1f
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:42:13 2025 -0700

    Revert "randr: RROutputCreate(): use calloc()"
    
    This reverts commit 3d3137513a64ab7045198fa8acdae7ec8effa2b9.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rroutput.c b/randr/rroutput.c
index 8d0f05498..0e414b27b 100644
--- a/randr/rroutput.c
+++ b/randr/rroutput.c
@@ -83,7 +83,7 @@ RROutputCreate(ScreenPtr pScreen,
 
     pScrPriv->outputs = outputs;
 
-    output = calloc(1, sizeof(RROutputRec) + nameLength + 1);
+    output = malloc(sizeof(RROutputRec) + nameLength + 1);
     if (!output)
         return NULL;
     output->id = FakeClientID(0);
@@ -94,6 +94,22 @@ RROutputCreate(ScreenPtr pScreen,
     output->name[nameLength] = '\0';
     output->connection = RR_UnknownConnection;
     output->subpixelOrder = SubPixelUnknown;
+    output->mmWidth = 0;
+    output->mmHeight = 0;
+    output->crtc = NULL;
+    output->numCrtcs = 0;
+    output->crtcs = NULL;
+    output->numClones = 0;
+    output->clones = NULL;
+    output->numModes = 0;
+    output->numPreferred = 0;
+    output->modes = NULL;
+    output->numUserModes = 0;
+    output->userModes = NULL;
+    output->properties = NULL;
+    output->pendingProperties = FALSE;
+    output->changed = FALSE;
+    output->nonDesktop = FALSE;
     output->devPrivate = devPrivate;
 
     if (!AddResource(output->id, RROutputType, (void *) output))
commit 9f2b9adbe3264a252034e261411dce2884ae91af
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:41:53 2025 -0700

    Revert "randr: RRCreateProviderProperty(): use calloc()"
    
    This reverts commit 05188ccec1cad52ebe78f67bebcbe85a7a1e27d5.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rrproviderproperty.c b/randr/rrproviderproperty.c
index 45e9a63e6..27444ea8a 100644
--- a/randr/rrproviderproperty.c
+++ b/randr/rrproviderproperty.c
@@ -107,10 +107,16 @@ RRCreateProviderProperty(Atom property)
 {
     RRPropertyPtr prop;
 
-    prop = (RRPropertyPtr) calloc(1, sizeof(RRPropertyRec));
+    prop = (RRPropertyPtr) malloc(sizeof(RRPropertyRec));
     if (!prop)
         return NULL;
+    prop->next = NULL;
     prop->propertyName = property;
+    prop->is_pending = FALSE;
+    prop->range = FALSE;
+    prop->immutable = FALSE;
+    prop->num_valid = 0;
+    prop->valid_values = NULL;
     RRInitProviderPropertyValue(&prop->current);
     RRInitProviderPropertyValue(&prop->pending);
     return prop;
commit e77b465eb6a9aaf429af3aa6eed247648e31d715
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:41:29 2025 -0700

    Revert "randr: ProcRRGetOutputProperty(): rename reply struct to "rep""
    
    This reverts commit 53d43bd8dcdc17fba6a42809ae67341c5310dc0e.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rrproperty.c b/randr/rrproperty.c
index 315e5b275..668dee40c 100644
--- a/randr/rrproperty.c
+++ b/randr/rrproperty.c
@@ -643,16 +643,16 @@ ProcRRGetOutputProperty(ClientPtr client)
         if (prop->propertyName == stuff->property)
             break;
 
-    xRRGetOutputPropertyReply rep = {
+    xRRGetOutputPropertyReply reply = {
         .type = X_Reply,
         .sequenceNumber = client->sequence
     };
 
     if (!prop) {
         if (client->swapped) {
-            swaps(&rep.sequenceNumber);
+            swaps(&reply.sequenceNumber);
         }
-        WriteToClient(client, sizeof(rep), &rep);
+        WriteToClient(client, sizeof(xRRGetOutputPropertyReply), &reply);
         return Success;
     }
 
@@ -668,15 +668,15 @@ ProcRRGetOutputProperty(ClientPtr client)
 
     if (((stuff->type != prop_value->type) && (stuff->type != AnyPropertyType))
         ) {
-        rep.bytesAfter = prop_value->size;
-        rep.format = prop_value->format;
-        rep.propertyType = prop_value->type;
+        reply.bytesAfter = prop_value->size;
+        reply.format = prop_value->format;
+        reply.propertyType = prop_value->type;
         if (client->swapped) {
-            swaps(&rep.sequenceNumber);
-            swapl(&rep.propertyType);
-            swapl(&rep.bytesAfter);
+            swaps(&reply.sequenceNumber);
+            swapl(&reply.propertyType);
+            swapl(&reply.bytesAfter);
         }
-        WriteToClient(client, sizeof(rep), &rep);
+        WriteToClient(client, sizeof(xRRGetOutputPropertyReply), &reply);
         return Success;
     }
 
@@ -701,14 +701,14 @@ ProcRRGetOutputProperty(ClientPtr client)
         if (!extra)
             return BadAlloc;
     }
-    rep.bytesAfter = n - (ind + len);
-    rep.format = prop_value->format;
-    rep.length = bytes_to_int32(len);
+    reply.bytesAfter = n - (ind + len);
+    reply.format = prop_value->format;
+    reply.length = bytes_to_int32(len);
     if (prop_value->format)
-        rep.nItems = len / (prop_value->format / 8);
-    rep.propertyType = prop_value->type;
+        reply.nItems = len / (prop_value->format / 8);
+    reply.propertyType = prop_value->type;
 
-    if (stuff->delete && (rep.bytesAfter == 0)) {
+    if (stuff->delete && (reply.bytesAfter == 0)) {
         xRROutputPropertyNotifyEvent event = {
             .type = RREventBase + RRNotify,
             .subCode = RRNotify_OutputProperty,
@@ -721,16 +721,16 @@ ProcRRGetOutputProperty(ClientPtr client)
     }
 
     if (client->swapped) {
-        swaps(&rep.sequenceNumber);
-        swapl(&rep.length);
-        swapl(&rep.propertyType);
-        swapl(&rep.bytesAfter);
-        swapl(&rep.nItems);
+        swaps(&reply.sequenceNumber);
+        swapl(&reply.length);
+        swapl(&reply.propertyType);
+        swapl(&reply.bytesAfter);
+        swapl(&reply.nItems);
     }
-    WriteToClient(client, sizeof(rep), &rep);
+    WriteToClient(client, sizeof(xGenericReply), &reply);
     if (len) {
         memcpy(extra, (char *) prop_value->data + ind, len);
-        switch (rep.format) {
+        switch (reply.format) {
         case 32:
             client->pSwapReplyFunc = (ReplySwapPtr) CopySwap32Write;
             break;
@@ -745,7 +745,7 @@ ProcRRGetOutputProperty(ClientPtr client)
         free(extra);
     }
 
-    if (stuff->delete && (rep.bytesAfter == 0)) {     /* delete the Property */
+    if (stuff->delete && (reply.bytesAfter == 0)) {     /* delete the Property */
         *prev = prop->next;
         RRDestroyOutputProperty(prop);
     }
commit 01914b1c5379fefcc9dc68d59f8c84b9eeeebe7e
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:41:13 2025 -0700

    Revert "randr: ProcRRGetOutputProperty(): use SwapShort()/SwapLong()"
    
    This reverts commit 8789be52a4ce4a285636f8c4efc2bd196fe571a2.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rrproperty.c b/randr/rrproperty.c
index 122f5ab64..315e5b275 100644
--- a/randr/rrproperty.c
+++ b/randr/rrproperty.c
@@ -727,26 +727,24 @@ ProcRRGetOutputProperty(ClientPtr client)
         swapl(&rep.bytesAfter);
         swapl(&rep.nItems);
     }
+    WriteToClient(client, sizeof(rep), &rep);
     if (len) {
         memcpy(extra, (char *) prop_value->data + ind, len);
         switch (rep.format) {
         case 32:
-            if (client->swapped)
-                SwapLongs((CARD32*)extra, len / sizeof(CARD32));
+            client->pSwapReplyFunc = (ReplySwapPtr) CopySwap32Write;
             break;
         case 16:
-            if (client->swapped)
-                SwapShorts((short*)extra, len / sizeof(CARD16));
+            client->pSwapReplyFunc = (ReplySwapPtr) CopySwap16Write;
             break;
         default:
+            client->pSwapReplyFunc = (ReplySwapPtr) WriteToClient;
             break;
         }
+        WriteSwappedDataToClient(client, len, extra);
+        free(extra);
     }
 
-    WriteToClient(client, sizeof(rep), &rep);
-    WriteToClient(client, len, extra);
-    free(extra);
-
     if (stuff->delete && (rep.bytesAfter == 0)) {     /* delete the Property */
         *prev = prop->next;
         RRDestroyOutputProperty(prop);
commit 3a76d12ef061a0487c95b4daf58bacc79c432d34
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:40:33 2025 -0700

    Revert "randr: ProcRRGetProviderProperty(): use SwapShort()/SwapLong()"
    
    This reverts commit 62b849799983d6154261c6662d5d8c40fafa67f4.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rrproviderproperty.c b/randr/rrproviderproperty.c
index 23a105c02..45e9a63e6 100644
--- a/randr/rrproviderproperty.c
+++ b/randr/rrproviderproperty.c
@@ -685,26 +685,24 @@ ProcRRGetProviderProperty(ClientPtr client)
         swapl(&reply.bytesAfter);
         swapl(&reply.nItems);
     }
+    WriteToClient(client, sizeof(xGenericReply), &reply);
     if (len) {
         memcpy(extra, (char *) prop_value->data + ind, len);
         switch (reply.format) {
         case 32:
-            if (client->swapped)
-                SwapLongs((CARD32*) extra, len/sizeof(CARD32));
+            client->pSwapReplyFunc = (ReplySwapPtr) CopySwap32Write;
             break;
         case 16:
-            if (client->swapped)
-                SwapShorts((short*) extra, len/sizeof(CARD16));
+            client->pSwapReplyFunc = (ReplySwapPtr) CopySwap16Write;
             break;
         default:
+            client->pSwapReplyFunc = (ReplySwapPtr) WriteToClient;
             break;
         }
+        WriteSwappedDataToClient(client, len, extra);
+        free(extra);
     }
 
-    WriteToClient(client, sizeof(xGenericReply), &reply);
-    WriteToClient(client, len, extra);
-    free(extra);
-
     if (stuff->delete && (reply.bytesAfter == 0)) {     /* delete the Property */
         *prev = prop->next;
         RRDestroyProviderProperty(prop);
commit bddafe4001734e002b73923675db41bfa8d82f68
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:38:23 2025 -0700

    Revert "randr: ProcRRGetCrtcGamma(): use SwapShort()/SwapLong()"
    
    This reverts commit d9863f7cb0f669e5c0943b6038a656ce34b8ea55.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 4eaded726..75ae0eea5 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -1676,16 +1676,13 @@ ProcRRGetCrtcGamma(ClientPtr client)
         swapl(&reply.length);
         swaps(&reply.size);
     }
+    WriteToClient(client, sizeof(xRRGetCrtcGammaReply), &reply);
     if (crtc->gammaSize) {
         memcpy(extra, crtc->gammaRed, len);
-        if (client->swapped)
-            SwapShorts((short*)extra, len/sizeof(CARD16));
+        client->pSwapReplyFunc = (ReplySwapPtr) CopySwap16Write;
+        WriteSwappedDataToClient(client, len, extra);
+        free(extra);
     }
-
-    WriteToClient(client, sizeof(xRRGetCrtcGammaReply), &reply);
-    WriteToClient(client, len, extra);
-    free(extra);
-
     return Success;
 }
 
commit 6a0c430b2505328a26f90e8635400b358a7777ab
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:38:12 2025 -0700

    Revert "randr: ProcRRListOutputProperties(): use SwapShort()/SwapLong()"
    
    This reverts commit e3001b71b31b2cf1327fbc86e6403bc3db044409.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rrproperty.c b/randr/rrproperty.c
index 610f5bb8d..122f5ab64 100644
--- a/randr/rrproperty.c
+++ b/randr/rrproperty.c
@@ -416,6 +416,7 @@ int
 ProcRRListOutputProperties(ClientPtr client)
 {
     REQUEST(xRRListOutputPropertiesReq);
+    Atom *pAtoms = NULL;
     int numProps = 0;
     RROutputPtr output;
     RRPropertyPtr prop;
@@ -426,6 +427,9 @@ ProcRRListOutputProperties(ClientPtr client)
 
     for (prop = output->properties; prop; prop = prop->next)
         numProps++;
+    if (numProps)
+        if (!(pAtoms = xallocarray(numProps, sizeof(Atom))))
+            return BadAlloc;
 
     xRRListOutputPropertiesReply rep = {
         .type = X_Reply,
@@ -438,25 +442,18 @@ ProcRRListOutputProperties(ClientPtr client)
         swapl(&rep.length);
         swaps(&rep.nAtoms);
     }
+    WriteToClient(client, sizeof(xRRListOutputPropertiesReply), &rep);
 
-    Atom* pAtoms = calloc(sizeof(Atom), numProps);
     if (numProps) {
-        if (!pAtoms)
-            return BadAlloc;
-
         /* Copy property name atoms to reply buffer */
         Atom *temppAtoms = pAtoms;
         for (prop = output->properties; prop; prop = prop->next)
             *temppAtoms++ = prop->propertyName;
 
-        if (client->swapped)
-            SwapLongs(pAtoms, numProps);
+        client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write;
+        WriteSwappedDataToClient(client, numProps * sizeof(Atom), pAtoms);
+        free(pAtoms);
     }
-
-    WriteToClient(client, sizeof(xRRListOutputPropertiesReply), &rep);
-    WriteToClient(client, sizeof(Atom) * numProps, pAtoms);
-    free(pAtoms);
-
     return Success;
 }
 
commit 8650028e59af9bcff0e7aba751a3f820756d20a6
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:37:57 2025 -0700

    Revert "randr: ProcRRQueryOutputProperty(): use SwapShort()/SwapLong()"
    
    This reverts commit 73467faeb26b2fb628b7c6980c4573c27e0ee955.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rrproperty.c b/randr/rrproperty.c
index 8df9790f1..610f5bb8d 100644
--- a/randr/rrproperty.c
+++ b/randr/rrproperty.c
@@ -495,16 +495,14 @@ ProcRRQueryOutputProperty(ClientPtr client)
         swaps(&rep.sequenceNumber);
         swapl(&rep.length);
     }
+    WriteToClient(client, sizeof(xRRQueryOutputPropertyReply), &rep);
     if (prop->num_valid) {
         memcpy(extra, prop->valid_values, prop->num_valid * sizeof(INT32));
-        if (client->swapped)
-            SwapLongs((CARD32*)extra, prop->num_valid);
+        client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write;
+        WriteSwappedDataToClient(client, prop->num_valid * sizeof(INT32),
+                                 extra);
+        free(extra);
     }
-
-    WriteToClient(client, sizeof(xRRQueryOutputPropertyReply), &rep);
-    WriteToClient(client, prop->num_valid * sizeof(INT32), extra);
-    free(extra);
-
     return Success;
 }
 
commit fc7858a458dc47733ec37bbec9249d7c3a487d3c
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:36:45 2025 -0700

    Revert "randr: RRScreenInit(): drop unnecessary zero'ing"
    
    This reverts commit 6fad884ce7c4767d2dd403ac8dfb8a6a107017ac.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/randr.c b/randr/randr.c
index 56fb453d2..b314f0411 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -315,6 +315,7 @@ RRScreenInit(ScreenPtr pScreen)
     /*
      * Calling function best set these function vectors
      */
+    pScrPriv->rrGetInfo = 0;
     pScrPriv->maxWidth = pScrPriv->minWidth = pScreen->width;
     pScrPriv->maxHeight = pScrPriv->minHeight = pScreen->height;
 
@@ -322,11 +323,21 @@ RRScreenInit(ScreenPtr pScreen)
     pScrPriv->height = pScreen->height;
     pScrPriv->mmWidth = pScreen->mmWidth;
     pScrPriv->mmHeight = pScreen->mmHeight;
+#if RANDR_12_INTERFACE
+    pScrPriv->rrScreenSetSize = NULL;
+    pScrPriv->rrCrtcSet = NULL;
+    pScrPriv->rrCrtcSetGamma = NULL;
+#endif
 #if RANDR_10_INTERFACE
+    pScrPriv->rrSetConfig = 0;
     pScrPriv->rotations = RR_Rotate_0;
     pScrPriv->reqWidth = pScreen->width;
     pScrPriv->reqHeight = pScreen->height;
+    pScrPriv->nSizes = 0;
+    pScrPriv->pSizes = NULL;
     pScrPriv->rotation = RR_Rotate_0;
+    pScrPriv->rate = 0;
+    pScrPriv->size = 0;
 #endif
 
     /*
@@ -341,6 +352,10 @@ RRScreenInit(ScreenPtr pScreen)
 
     pScreen->ConstrainCursorHarder = RRConstrainCursorHarder;
     pScreen->ReplaceScanoutPixmap = RRReplaceScanoutPixmap;
+    pScrPriv->numOutputs = 0;
+    pScrPriv->outputs = NULL;
+    pScrPriv->numCrtcs = 0;
+    pScrPriv->crtcs = NULL;
 
     xorg_list_init(&pScrPriv->leases);
 
commit 36af7a5f9c0eaffc85fd3605bd3c0cc2b177549d
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:36:22 2025 -0700

    Revert "randr: fix RRGetCrtcTransform reply length"
    
    This reverts commit 0ca5aaba500a4791b91f8237cbd74709331f8676.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index cbdc74e4d..4eaded726 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -1831,7 +1831,7 @@ ProcRRGetCrtcTransform(ClientPtr client)
     xRRGetCrtcTransformReply rep = {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
-        .length = bytes_to_int32(sizeof(xRRGetCrtcTransformReply) - sizeof(xReq) + nextra),
+        .length = bytes_to_int32(sizeof(xRRGetCrtcTransformReply) - sizeof(xReq)),
         .hasTransforms = crtc->transforms,
     };
 
commit eca05b85f99d67caf6e47bfc6c02b21615734d7a
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Wed Jun 11 13:35:44 2025 -0700

    Revert "randr: fix RRGetCrtcTransform reply length, part 2"
    
    This reverts commit 53876f1ef10eb9d513b126feda25e9fba5b375df.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>

diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index b828b7301..cbdc74e4d 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -1831,7 +1831,7 @@ ProcRRGetCrtcTransform(ClientPtr client)
     xRRGetCrtcTransformReply rep = {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
-        .length = bytes_to_int32(sizeof(xRRGetCrtcTransformReply) - sizeof(xGenericReply) + nextra),
+        .length = bytes_to_int32(sizeof(xRRGetCrtcTransformReply) - sizeof(xReq) + nextra),
         .hasTransforms = crtc->transforms,
     };
 


More information about the xorg-commit mailing list