From bc76e25994f070adbb5a749c70bd2ff70f2b1a45 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Wed, 11 Jun 2025 13:44:17 -0700 Subject: [PATCH] Revert "randr: use explicit case statement instead of SProcRandrVector table" This reverts commit 058815bed1bac2d9fc6ce15e001132806fb9ab14. Part-of: --- randr/randr.c | 12 +++++ randr/randrstr_priv.h | 4 +- randr/rrsdispatch.c | 123 ++++++++++++++++++++---------------------- 3 files changed, 71 insertions(+), 68 deletions(-) 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 */ +};