Revert "randr: use explicit case statement instead of SProcRandrVector table"

This reverts commit 058815bed1.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2012>
This commit is contained in:
Alan Coopersmith 2025-06-11 13:44:17 -07:00
parent 9f72353a51
commit bc76e25994
3 changed files with 71 additions and 68 deletions

View File

@ -50,6 +50,8 @@ static int RRNScreens;
real->mem = priv->mem; \ real->mem = priv->mem; \
} }
static int SProcRRDispatch(ClientPtr pClient);
int RREventBase; int RREventBase;
int RRErrorBase; int RRErrorBase;
RESTYPE RRClientType, RREventType; /* resource types for event masks */ RESTYPE RRClientType, RREventType; /* resource types for event masks */
@ -734,3 +736,13 @@ RRVerticalRefresh(xRRModeInfo * mode)
refresh = 0xffff; refresh = 0xffff;
return (CARD16) refresh; 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);
}

View File

@ -33,6 +33,8 @@
extern int RREventBase, RRErrorBase; extern int RREventBase, RRErrorBase;
extern int (*SProcRandrVector[RRNumberRequests]) (ClientPtr);
extern RESTYPE RRClientType, RREventType; /* resource types for event masks */ extern RESTYPE RRClientType, RREventType; /* resource types for event masks */
extern DevPrivateKeyRec RRClientPrivateKeyRec; extern DevPrivateKeyRec RRClientPrivateKeyRec;
@ -139,6 +141,4 @@ int ProcRRSelectInput(ClientPtr client);
int ProcRRDispatch(ClientPtr client); int ProcRRDispatch(ClientPtr client);
int SProcRRDispatch(ClientPtr client);
#endif /* _XSERVER_RANDRSTR_PRIV_H_ */ #endif /* _XSERVER_RANDRSTR_PRIV_H_ */

View File

@ -603,69 +603,60 @@ SProcRRFreeLease(ClientPtr client) {
return ProcRRFreeLease(client); return ProcRRFreeLease(client);
} }
int int (*SProcRandrVector[RRNumberRequests]) (ClientPtr) = {
SProcRRDispatch(ClientPtr client) SProcRRQueryVersion, /* 0 */
{ /* we skip 1 to make old clients fail pretty immediately */
REQUEST(xReq); NULL, /* 1 SProcRandrOldGetScreenInfo */
UpdateCurrentTimeIf(); /* V1.0 apps share the same set screen config request id */
SProcRRSetScreenConfig, /* 2 */
switch (stuff->data) { NULL, /* 3 SProcRandrOldScreenChangeSelectInput */
case X_RRQueryVersion: return SProcRRQueryVersion(client); /* 3 used to be ScreenChangeSelectInput; deprecated */
case X_RRSetScreenConfig: return SProcRRSetScreenConfig(client); SProcRRSelectInput, /* 4 */
case X_RRSelectInput: return SProcRRSelectInput(client); SProcRRGetScreenInfo, /* 5 */
case X_RRGetScreenInfo: return SProcRRGetScreenInfo(client); /* V1.2 additions */
SProcRRGetScreenSizeRange, /* 6 */
/* V1.2 additions */ SProcRRSetScreenSize, /* 7 */
case X_RRGetScreenSizeRange: return SProcRRGetScreenSizeRange(client); SProcRRGetScreenResources, /* 8 */
case X_RRSetScreenSize: return SProcRRSetScreenSize(client); SProcRRGetOutputInfo, /* 9 */
case X_RRGetScreenResources: return SProcRRGetScreenResources(client); SProcRRListOutputProperties, /* 10 */
case X_RRGetOutputInfo: return SProcRRGetOutputInfo(client); SProcRRQueryOutputProperty, /* 11 */
case X_RRListOutputProperties: return SProcRRListOutputProperties(client); SProcRRConfigureOutputProperty, /* 12 */
case X_RRQueryOutputProperty: return SProcRRQueryOutputProperty(client); SProcRRChangeOutputProperty, /* 13 */
case X_RRConfigureOutputProperty: return SProcRRConfigureOutputProperty(client); SProcRRDeleteOutputProperty, /* 14 */
case X_RRChangeOutputProperty: return SProcRRChangeOutputProperty(client); SProcRRGetOutputProperty, /* 15 */
case X_RRDeleteOutputProperty: return SProcRRDeleteOutputProperty(client); SProcRRCreateMode, /* 16 */
case X_RRGetOutputProperty: return SProcRRGetOutputProperty(client); SProcRRDestroyMode, /* 17 */
case X_RRCreateMode: return SProcRRCreateMode(client); SProcRRAddOutputMode, /* 18 */
case X_RRDestroyMode: return SProcRRDestroyMode(client); SProcRRDeleteOutputMode, /* 19 */
case X_RRAddOutputMode: return SProcRRAddOutputMode(client); SProcRRGetCrtcInfo, /* 20 */
case X_RRDeleteOutputMode: return SProcRRDeleteOutputMode(client); SProcRRSetCrtcConfig, /* 21 */
case X_RRGetCrtcInfo: return SProcRRGetCrtcInfo(client); SProcRRGetCrtcGammaSize, /* 22 */
case X_RRSetCrtcConfig: return SProcRRSetCrtcConfig(client); SProcRRGetCrtcGamma, /* 23 */
case X_RRGetCrtcGammaSize: return SProcRRGetCrtcGammaSize(client); SProcRRSetCrtcGamma, /* 24 */
case X_RRGetCrtcGamma: return SProcRRGetCrtcGamma(client); /* V1.3 additions */
case X_RRSetCrtcGamma: return SProcRRSetCrtcGamma(client); SProcRRGetScreenResourcesCurrent, /* 25 */
SProcRRSetCrtcTransform, /* 26 */
/* V1.3 additions */ SProcRRGetCrtcTransform, /* 27 */
case X_RRGetScreenResourcesCurrent: return SProcRRGetScreenResourcesCurrent(client); SProcRRGetPanning, /* 28 */
case X_RRSetCrtcTransform: return SProcRRSetCrtcTransform(client); SProcRRSetPanning, /* 29 */
case X_RRGetCrtcTransform: return SProcRRGetCrtcTransform(client); SProcRRSetOutputPrimary, /* 30 */
case X_RRGetPanning: return SProcRRGetPanning(client); SProcRRGetOutputPrimary, /* 31 */
case X_RRSetPanning: return SProcRRSetPanning(client); /* V1.4 additions */
case X_RRSetOutputPrimary: return SProcRRSetOutputPrimary(client); SProcRRGetProviders, /* 32 */
case X_RRGetOutputPrimary: return SProcRRGetOutputPrimary(client); SProcRRGetProviderInfo, /* 33 */
SProcRRSetProviderOffloadSink, /* 34 */
/* V1.4 additions */ SProcRRSetProviderOutputSource, /* 35 */
case X_RRGetProviders: return SProcRRGetProviders(client); SProcRRListProviderProperties, /* 36 */
case X_RRGetProviderInfo: return SProcRRGetProviderInfo(client); SProcRRQueryProviderProperty, /* 37 */
case X_RRSetProviderOffloadSink: return SProcRRSetProviderOffloadSink(client); SProcRRConfigureProviderProperty, /* 38 */
case X_RRSetProviderOutputSource: return SProcRRSetProviderOutputSource(client); SProcRRChangeProviderProperty, /* 39 */
case X_RRListProviderProperties: return SProcRRListProviderProperties(client); SProcRRDeleteProviderProperty, /* 40 */
case X_RRQueryProviderProperty: return SProcRRQueryProviderProperty(client); SProcRRGetProviderProperty, /* 41 */
case X_RRConfigureProviderProperty: return SProcRRConfigureProviderProperty(client); /* V1.5 additions */
case X_RRChangeProviderProperty: return SProcRRChangeProviderProperty(client); SProcRRGetMonitors, /* 42 */
case X_RRDeleteProviderProperty: return SProcRRDeleteProviderProperty(client); SProcRRSetMonitor, /* 43 */
case X_RRGetProviderProperty: return SProcRRGetProviderProperty(client); SProcRRDeleteMonitor, /* 44 */
/* V1.6 additions */
/* V1.5 additions */ SProcRRCreateLease, /* 45 */
case X_RRGetMonitors: return SProcRRGetMonitors(client); SProcRRFreeLease, /* 46 */
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;
}