From c67b05e653066fb48a091a9eda1df94aa1d93e63 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Wed, 3 Jul 2024 16:45:06 +0200 Subject: [PATCH] Xext: shm: simplify dispatcher These dispatcher functions are much more complex than they're usually are (just switch/case statement). Bring them in line with the standard scheme used in the Xserver, so further steps become easier. Signed-off-by: Enrico Weigelt, metux IT consult --- Xext/shm.c | 77 +++++++++++++++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/Xext/shm.c b/Xext/shm.c index e9bdc8d4f..a11ed8705 100644 --- a/Xext/shm.c +++ b/Xext/shm.c @@ -106,6 +106,8 @@ static void ShmResetProc(ExtensionEntry *extEntry); static void SShmCompletionEvent(xShmCompletionEvent *from, xShmCompletionEvent *to); +static int ShmCreatePixmap(ClientPtr client, xShmCreatePixmapReq *stuff); + static unsigned char ShmReqCode; int ShmCompletionCode; int BadShmSegCode; @@ -490,16 +492,13 @@ doShmPutImage(DrawablePtr dst, GCPtr pGC, } static int -ProcShmPutImage(ClientPtr client) +ShmPutImage(ClientPtr client, xShmPutImageReq *stuff) { GCPtr pGC; DrawablePtr pDraw; long length; ShmDescPtr shmdesc; - REQUEST(xShmPutImageReq); - - REQUEST_SIZE_MATCH(xShmPutImageReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixWriteAccess); VERIFY_SHMPTR(stuff->shmseg, stuff->offset, FALSE, shmdesc, client); if ((stuff->sendEvent != xTrue) && (stuff->sendEvent != xFalse)) @@ -589,7 +588,7 @@ ProcShmPutImage(ClientPtr client) } static int -ProcShmGetImage(ClientPtr client) +ShmGetImage(ClientPtr client, xShmGetImageReq *stuff) { DrawablePtr pDraw; long lenPer = 0, length; @@ -600,9 +599,6 @@ ProcShmGetImage(ClientPtr client) RegionPtr pVisibleRegion = NULL; int rc; - REQUEST(xShmGetImageReq); - - REQUEST_SIZE_MATCH(xShmGetImageReq); if ((stuff->format != XYPixmap) && (stuff->format != ZPixmap)) { client->errorValue = stuff->format; return BadValue; @@ -707,16 +703,19 @@ ProcShmGetImage(ClientPtr client) return Success; } -#ifdef XINERAMA static int -ProcPanoramiXShmPutImage(ClientPtr client) +ProcShmPutImage(ClientPtr client) { + REQUEST(xShmPutImageReq); + REQUEST_SIZE_MATCH(xShmPutImageReq); + +#ifdef XINERAMA int j, result, orig_x, orig_y; PanoramiXRes *draw, *gc; Bool sendEvent, isRoot; - REQUEST(xShmPutImageReq); - REQUEST_SIZE_MATCH(xShmPutImageReq); + if (noPanoramiXExtension) + return ShmPutImage(client, stuff); result = dixLookupResourceByClass((void **) &draw, stuff->drawable, XRC_DRAWABLE, client, DixWriteAccess); @@ -743,16 +742,23 @@ ProcPanoramiXShmPutImage(ClientPtr client) stuff->dstX = orig_x - screenInfo.screens[j]->x; stuff->dstY = orig_y - screenInfo.screens[j]->y; } - result = ProcShmPutImage(client); + result = ShmPutImage(client, stuff); if (result != Success) break; } return result; +#else + return ShmPutImage(client, stuff); +#endif /* XINERAMA */ } static int -ProcPanoramiXShmGetImage(ClientPtr client) +ProcShmGetImage(ClientPtr client) { + REQUEST(xShmGetImageReq); + REQUEST_SIZE_MATCH(xShmGetImageReq); + +#ifdef XINERAMA PanoramiXRes *draw; DrawablePtr pDraw; xShmGetImageReply xgi; @@ -762,9 +768,8 @@ ProcPanoramiXShmGetImage(ClientPtr client) long lenPer = 0, length, widthBytesLine; Bool isRoot; - REQUEST(xShmGetImageReq); - - REQUEST_SIZE_MATCH(xShmGetImageReq); + if (noPanoramiXExtension) + return ShmGetImage(client, stuff); if ((stuff->format != XYPixmap) && (stuff->format != ZPixmap)) { client->errorValue = stuff->format; @@ -777,7 +782,7 @@ ProcPanoramiXShmGetImage(ClientPtr client) return (rc == BadValue) ? BadDrawable : rc; if (draw->type == XRT_PIXMAP) - return ProcShmGetImage(client); + return ShmGetImage(client, stuff); rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixReadAccess); if (rc != Success) @@ -888,24 +893,31 @@ ProcPanoramiXShmGetImage(ClientPtr client) WriteToClient(client, sizeof(xShmGetImageReply), &xgi); return Success; +#else + return ShmGetImage(client, stuff); +#endif /* XINERAMA */ } static int -ProcPanoramiXShmCreatePixmap(ClientPtr client) +ProcShmCreatePixmap(ClientPtr client) { + REQUEST(xShmCreatePixmapReq); + REQUEST_SIZE_MATCH(xShmCreatePixmapReq); + +#ifdef XINERAMA + if (noPanoramiXExtension) + return ShmCreatePixmap(client, stuff); + ScreenPtr pScreen = NULL; PixmapPtr pMap = NULL; DrawablePtr pDraw; DepthPtr pDepth; int i, j, result, rc; ShmDescPtr shmdesc; - - REQUEST(xShmCreatePixmapReq); unsigned int width, height, depth; unsigned long size; PanoramiXRes *newPix; - REQUEST_SIZE_MATCH(xShmCreatePixmapReq); client->errorValue = stuff->pid; if (!sharedPixmaps) return BadImplementation; @@ -1001,8 +1013,10 @@ ProcPanoramiXShmCreatePixmap(ClientPtr client) AddResource(stuff->pid, XRT_PIXMAP, newPix); return result; -} +#else + return ShmCreatePixmap(client, stuff); #endif /* XINERAMA */ +} static PixmapPtr fbShmCreatePixmap(ScreenPtr pScreen, @@ -1025,7 +1039,7 @@ fbShmCreatePixmap(ScreenPtr pScreen, } static int -ProcShmCreatePixmap(ClientPtr client) +ShmCreatePixmap(ClientPtr client, xShmCreatePixmapReq *stuff) { PixmapPtr pMap; DrawablePtr pDraw; @@ -1033,12 +1047,9 @@ ProcShmCreatePixmap(ClientPtr client) int i, rc; ShmDescPtr shmdesc; ShmScrPrivateRec *screen_priv; - - REQUEST(xShmCreatePixmapReq); unsigned int width, height, depth; unsigned long size; - REQUEST_SIZE_MATCH(xShmCreatePixmapReq); client->errorValue = stuff->pid; if (!sharedPixmaps) return BadImplementation; @@ -1322,22 +1333,10 @@ ProcShmDispatch(ClientPtr client) case X_ShmDetach: return ProcShmDetach(client); case X_ShmPutImage: -#ifdef XINERAMA - if (!noPanoramiXExtension) - return ProcPanoramiXShmPutImage(client); -#endif /* XINERAMA */ return ProcShmPutImage(client); case X_ShmGetImage: -#ifdef XINERAMA - if (!noPanoramiXExtension) - return ProcPanoramiXShmGetImage(client); -#endif /* XINERAMA */ return ProcShmGetImage(client); case X_ShmCreatePixmap: -#ifdef XINERAMA - if (!noPanoramiXExtension) - return ProcPanoramiXShmCreatePixmap(client); -#endif /* XINERAMA */ return ProcShmCreatePixmap(client); #ifdef SHM_FD_PASSING case X_ShmAttachFd: