From 0fde105e38472dc4e1ca42b99c6535532c3be417 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Tue, 2 Jul 2024 21:55:36 +0200 Subject: [PATCH] Xext: saver: use REQUEST_HEAD_STRUCT and REQUEST_FIELD_* macros Use the new macros to make request struct parsing / field swapping much easier. Signed-off-by: Enrico Weigelt, metux IT consult --- Xext/saver.c | 118 ++++++++++++--------------------------------------- 1 file changed, 26 insertions(+), 92 deletions(-) diff --git a/Xext/saver.c b/Xext/saver.c index 41af98b8d..d5a8f4631 100644 --- a/Xext/saver.c +++ b/Xext/saver.c @@ -36,6 +36,7 @@ in this Software without prior written authorization from the X Consortium. #include "dix/colormap_priv.h" #include "dix/cursor_priv.h" #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/window_priv.h" #include "os/osdep.h" #include "os/screensaver.h" @@ -591,6 +592,8 @@ ScreenSaverHandle(ScreenPtr pScreen, int xstate, Bool force) static int ProcScreenSaverQueryVersion(ClientPtr client) { + REQUEST_HEAD_STRUCT(xScreenSaverQueryVersionReq); + xScreenSaverQueryVersionReply rep = { .type = X_Reply, .sequenceNumber = client->sequence, @@ -598,8 +601,6 @@ ProcScreenSaverQueryVersion(ClientPtr client) .minorVersion = SERVER_SAVER_MINOR_VERSION }; - REQUEST_SIZE_MATCH(xScreenSaverQueryVersionReq); - if (client->swapped) { swaps(&rep.sequenceNumber); swaps(&rep.majorVersion); @@ -612,14 +613,15 @@ ProcScreenSaverQueryVersion(ClientPtr client) static int ProcScreenSaverQueryInfo(ClientPtr client) { - REQUEST(xScreenSaverQueryInfoReq); + REQUEST_HEAD_STRUCT(xScreenSaverQueryInfoReq); + REQUEST_FIELD_CARD32(drawable); + int rc; ScreenSaverStuffPtr pSaver; DrawablePtr pDraw; CARD32 lastInput; ScreenSaverScreenPrivatePtr pPriv; - REQUEST_SIZE_MATCH(xScreenSaverQueryInfoReq); rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixGetAttrAccess); if (rc != Success) @@ -676,11 +678,12 @@ ProcScreenSaverQueryInfo(ClientPtr client) static int ProcScreenSaverSelectInput(ClientPtr client) { - REQUEST(xScreenSaverSelectInputReq); + REQUEST_HEAD_STRUCT(xScreenSaverSelectInputReq); + REQUEST_FIELD_CARD32(drawable); + REQUEST_FIELD_CARD32(eventMask); + DrawablePtr pDraw; int rc; - - REQUEST_SIZE_MATCH(xScreenSaverSelectInputReq); rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixGetAttrAccess); if (rc != Success) @@ -1058,8 +1061,16 @@ ScreenSaverUnsetAttributes(ClientPtr client, Drawable drawable) static int ProcScreenSaverSetAttributes(ClientPtr client) { - REQUEST(xScreenSaverSetAttributesReq); - REQUEST_AT_LEAST_SIZE(xScreenSaverSetAttributesReq); + REQUEST_HEAD_AT_LEAST(xScreenSaverSetAttributesReq); + REQUEST_FIELD_CARD32(drawable); + REQUEST_FIELD_CARD16(x); + REQUEST_FIELD_CARD16(y); + REQUEST_FIELD_CARD16(width); + REQUEST_FIELD_CARD16(height); + REQUEST_FIELD_CARD16(borderWidth); + REQUEST_FIELD_CARD32(visualID); + REQUEST_FIELD_CARD32(mask); + REQUEST_REST_CARD32(); #ifdef XINERAMA if (!noPanoramiXExtension) { @@ -1145,8 +1156,8 @@ ProcScreenSaverSetAttributes(ClientPtr client) static int ProcScreenSaverUnsetAttributes(ClientPtr client) { - REQUEST(xScreenSaverUnsetAttributesReq); - REQUEST_SIZE_MATCH(xScreenSaverUnsetAttributesReq); + REQUEST_HEAD_STRUCT(xScreenSaverUnsetAttributesReq); + REQUEST_FIELD_CARD32(drawable); #ifdef XINERAMA if (!noPanoramiXExtension) { @@ -1173,12 +1184,11 @@ ProcScreenSaverUnsetAttributes(ClientPtr client) static int ProcScreenSaverSuspend(ClientPtr client) { + REQUEST_HEAD_STRUCT(xScreenSaverSuspendReq); + REQUEST_FIELD_CARD32(suspend); + ScreenSaverSuspensionPtr *prev, this; BOOL suspend; - - REQUEST(xScreenSaverSuspendReq); - REQUEST_SIZE_MATCH(xScreenSaverSuspendReq); - /* * Old versions of XCB encode suspend as 1 byte followed by three * pad bytes (which are always cleared), instead of a 4 byte @@ -1257,82 +1267,6 @@ ProcScreenSaverDispatch(ClientPtr client) } } -static int _X_COLD -SProcScreenSaverQueryInfo(ClientPtr client) -{ - REQUEST(xScreenSaverQueryInfoReq); - REQUEST_SIZE_MATCH(xScreenSaverQueryInfoReq); - swapl(&stuff->drawable); - return ProcScreenSaverQueryInfo(client); -} - -static int _X_COLD -SProcScreenSaverSelectInput(ClientPtr client) -{ - REQUEST(xScreenSaverSelectInputReq); - REQUEST_SIZE_MATCH(xScreenSaverSelectInputReq); - swapl(&stuff->drawable); - swapl(&stuff->eventMask); - return ProcScreenSaverSelectInput(client); -} - -static int _X_COLD -SProcScreenSaverSetAttributes(ClientPtr client) -{ - REQUEST(xScreenSaverSetAttributesReq); - REQUEST_AT_LEAST_SIZE(xScreenSaverSetAttributesReq); - swapl(&stuff->drawable); - swaps(&stuff->x); - swaps(&stuff->y); - swaps(&stuff->width); - swaps(&stuff->height); - swaps(&stuff->borderWidth); - swapl(&stuff->visualID); - swapl(&stuff->mask); - SwapRestL(stuff); - return ProcScreenSaverSetAttributes(client); -} - -static int _X_COLD -SProcScreenSaverUnsetAttributes(ClientPtr client) -{ - REQUEST(xScreenSaverUnsetAttributesReq); - REQUEST_SIZE_MATCH(xScreenSaverUnsetAttributesReq); - swapl(&stuff->drawable); - return ProcScreenSaverUnsetAttributes(client); -} - -static int _X_COLD -SProcScreenSaverSuspend(ClientPtr client) -{ - REQUEST(xScreenSaverSuspendReq); - REQUEST_SIZE_MATCH(xScreenSaverSuspendReq); - swapl(&stuff->suspend); - return ProcScreenSaverSuspend(client); -} - -static int _X_COLD -SProcScreenSaverDispatch(ClientPtr client) -{ - REQUEST(xReq); - switch (stuff->data) { - case X_ScreenSaverQueryVersion: - return ProcScreenSaverQueryVersion(client); - case X_ScreenSaverQueryInfo: - return SProcScreenSaverQueryInfo(client); - case X_ScreenSaverSelectInput: - return SProcScreenSaverSelectInput(client); - case X_ScreenSaverSetAttributes: - return SProcScreenSaverSetAttributes(client); - case X_ScreenSaverUnsetAttributes: - return SProcScreenSaverUnsetAttributes(client); - case X_ScreenSaverSuspend: - return SProcScreenSaverSuspend(client); - default: - return BadRequest; - } -} - void ScreenSaverExtensionInit(void) { @@ -1354,7 +1288,7 @@ ScreenSaverExtensionInit(void) if (AttrType && SaverEventType && SuspendType && (extEntry = AddExtension(ScreenSaverName, ScreenSaverNumberEvents, 0, ProcScreenSaverDispatch, - SProcScreenSaverDispatch, NULL, + ProcScreenSaverDispatch, NULL, StandardMinorOpcode))) { ScreenSaverEventBase = extEntry->eventBase; EventSwapVector[ScreenSaverEventBase] =