From 40b3d2972dbafefae38759666ed49c66cc797889 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 6 Aug 2008 15:26:24 -0700 Subject: [PATCH] Replace dixLookupResource by dixLookupResourceBy{Type,Class} dixLookupResource attempted to automatically detect whether the caller wanted a lookup by-type or by-class, unfortunately, it guessed wrong for RT_NONE. Instead of trying to make the guess better, this patch just reverts the unification and creates separate functions for each operation. --- Xext/saver.c | 8 +++--- Xext/security.c | 4 +- Xext/shape.c | 2 +- Xext/sync.c | 2 +- Xext/xselinux.c | 2 +- Xext/xtest.c | 6 ++-- Xi/exevents.c | 2 +- composite/compext.c | 10 ++++---- dix/cursor.c | 8 +++--- dix/deprecated.c | 34 +++++++++++++++++++++++------- dix/dispatch.c | 48 ++++++++++++++++++++++---------------------- dix/dixutils.c | 4 +- dix/events.c | 10 ++++---- dix/gc.c | 8 +++--- dix/resource.c | 39 +++++++++++++++++++++++++++++++---- dix/window.c | 8 +++--- hw/xfree86/loader/dixsym.c | 2 + include/resource.h | 39 +++++++++++++++++++++++++++-------- render/picture.c | 4 +- render/render.c | 8 +++--- xfixes/cursor.c | 4 +- xfixes/region.c | 6 ++-- 22 files changed, 164 insertions(+), 94 deletions(-) diff --git a/Xext/saver.c b/Xext/saver.c index 69a5fa1..c1f0382 100644 --- a/Xext/saver.c +++ b/Xext/saver.c @@ -1064,7 +1064,7 @@ ScreenSaverSetAttributes (ClientPtr client) } else { - ret = dixLookupResource((pointer *)&pPixmap, pixID, RT_PIXMAP, + ret = dixLookupResourceByType((pointer *)&pPixmap, pixID, RT_PIXMAP, client, DixReadAccess); if (ret == Success) { @@ -1102,7 +1102,7 @@ ScreenSaverSetAttributes (ClientPtr client) } else { - ret = dixLookupResource((pointer *)&pPixmap, pixID, RT_PIXMAP, + ret = dixLookupResourceByType((pointer *)&pPixmap, pixID, RT_PIXMAP, client, DixReadAccess); if (ret == Success) { @@ -1196,7 +1196,7 @@ ScreenSaverSetAttributes (ClientPtr client) break; case CWColormap: cmap = (Colormap) *pVlist; - ret = dixLookupResource((pointer *)&pCmap, cmap, RT_COLORMAP, + ret = dixLookupResourceByType((pointer *)&pCmap, cmap, RT_COLORMAP, client, DixUseAccess); if (ret != Success) { @@ -1220,7 +1220,7 @@ ScreenSaverSetAttributes (ClientPtr client) } else { - ret = dixLookupResource((pointer *)&pCursor, cursorID, + ret = dixLookupResourceByType((pointer *)&pCursor, cursorID, RT_CURSOR, client, DixUseAccess); if (ret != Success) { diff --git a/Xext/security.c b/Xext/security.c index bd92600..c865d65 100644 --- a/Xext/security.c +++ b/Xext/security.c @@ -1014,7 +1014,7 @@ SecurityClientState(CallbackListPtr *pcbl, pointer unused, pointer calldata) case ClientStateRunning: state->authId = AuthorizationIDOfClient(pci->client); - rc = dixLookupResource((pointer *)&pAuth, state->authId, + rc = dixLookupResourceByType((pointer *)&pAuth, state->authId, SecurityAuthorizationResType, serverClient, DixGetAttrAccess); if (rc == Success) { @@ -1029,7 +1029,7 @@ SecurityClientState(CallbackListPtr *pcbl, pointer unused, pointer calldata) case ClientStateGone: case ClientStateRetained: - rc = dixLookupResource((pointer *)&pAuth, state->authId, + rc = dixLookupResourceByType((pointer *)&pAuth, state->authId, SecurityAuthorizationResType, serverClient, DixGetAttrAccess); if (rc == Success) { diff --git a/Xext/shape.c b/Xext/shape.c index 6857c28..d03b644 100644 --- a/Xext/shape.c +++ b/Xext/shape.c @@ -438,7 +438,7 @@ ProcShapeMask (client) if (stuff->src == None) srcRgn = 0; else { - rc = dixLookupResource((pointer *)&pPixmap, stuff->src, RT_PIXMAP, + rc = dixLookupResourceByType((pointer *)&pPixmap, stuff->src, RT_PIXMAP, client, DixReadAccess); if (rc != Success) return (rc == BadValue) ? BadPixmap : rc; diff --git a/Xext/sync.c b/Xext/sync.c index ce04702..50b2caa 100644 --- a/Xext/sync.c +++ b/Xext/sync.c @@ -440,7 +440,7 @@ SyncInitTrigger(client, pTrigger, counter, changes) { if (counter == None) pCounter = NULL; - else if (Success != (rc = dixLookupResource((pointer *)&pCounter, + else if (Success != (rc = dixLookupResourceByType ((pointer *)&pCounter, counter, RTCounter, client, DixReadAccess))) { client->errorValue = counter; diff --git a/Xext/xselinux.c b/Xext/xselinux.c index a47df03..3c74574 100644 --- a/Xext/xselinux.c +++ b/Xext/xselinux.c @@ -555,7 +555,7 @@ SELinuxLabelInitial(void) SELinuxScreen(NULL, NULL, &srec); /* Do the default colormap */ - dixLookupResource(&unused, screenInfo.screens[i]->defColormap, + dixLookupResourceByType(&unused, screenInfo.screens[i]->defColormap, RT_COLORMAP, serverClient, DixCreateAccess); } } diff --git a/Xext/xtest.c b/Xext/xtest.c index 8e96f65..2dd61a3 100644 --- a/Xext/xtest.c +++ b/Xext/xtest.c @@ -135,8 +135,8 @@ ProcXTestCompareCursor(client) else if (stuff->cursor == XTestCurrentCursor) pCursor = GetSpriteCursor(); else { - rc = dixLookupResource((pointer *)&pCursor, stuff->cursor, RT_CURSOR, - client, DixReadAccess); + rc = dixLookupResourceByType((pointer *)&pCursor, stuff->cursor, RT_CURSOR, + client, DixReadAccess); if (rc != Success) { client->errorValue = stuff->cursor; #@@ -169,7 +169,7 @@ ProcXTestFakeInput(client) int numValuators = 0; int firstValuator = 0; EventListPtr events; - int nevents; + int nevents = 0; int i; int base = 0; diff --git a/Xi/exevents.c b/Xi/exevents.c index 35d8bb5..ef53506 100644 --- a/Xi/exevents.c +++ b/Xi/exevents.c @@ -1369,7 +1369,7 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode, if (rcursor == None) cursor = NullCursor; else { - rc = dixLookupResource((pointer *)&cursor, rcursor, RT_CURSOR, + rc = dixLookupResourceByType((pointer *)&cursor, rcursor, RT_CURSOR, client, DixUseAccess); if (rc != Success) { diff --git a/composite/compext.c b/composite/compext.c index e720f6c..2a7c227 100644 --- a/composite/compext.c +++ b/composite/compext.c @@ -148,7 +148,7 @@ ProcCompositeRedirectWindow (ClientPtr client) REQUEST(xCompositeRedirectWindowReq); REQUEST_SIZE_MATCH(xCompositeRedirectWindowReq); - rc = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW, client, + rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW, client, DixSetAttrAccess|DixManageAccess|DixBlendAccess); if (rc != Success) { @@ -166,7 +166,7 @@ ProcCompositeRedirectSubwindows (ClientPtr client) REQUEST(xCompositeRedirectSubwindowsReq); REQUEST_SIZE_MATCH(xCompositeRedirectSubwindowsReq); - rc = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW, client, + rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW, client, DixSetAttrAccess|DixManageAccess|DixBlendAccess); if (rc != Success) { @@ -218,7 +218,7 @@ ProcCompositeCreateRegionFromBorderClip (ClientPtr client) REQUEST(xCompositeCreateRegionFromBorderClipReq); REQUEST_SIZE_MATCH(xCompositeCreateRegionFromBorderClipReq); - rc = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW, client, + rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW, client, DixGetAttrAccess); if (rc != Success) { @@ -254,7 +254,7 @@ ProcCompositeNameWindowPixmap (ClientPtr client) REQUEST(xCompositeNameWindowPixmapReq); REQUEST_SIZE_MATCH(xCompositeNameWindowPixmapReq); - rc = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW, client, + rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW, client, DixGetAttrAccess); if (rc != Success) { @@ -302,7 +302,7 @@ ProcCompositeGetOverlayWindow (ClientPtr client) int rc; REQUEST_SIZE_MATCH(xCompositeGetOverlayWindowReq); - rc = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW, client, + rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW, client, DixGetAttrAccess); if (rc != Success) { diff --git a/dix/cursor.c b/dix/cursor.c index 81540fd..0017c66 100644 --- a/dix/cursor.c +++ b/dix/cursor.c @@ -298,15 +298,15 @@ AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar, GlyphSharePtr pShare; DeviceIntPtr pDev; - rc = dixLookupResource((pointer *)&sourcefont, source, RT_FONT, client, - DixUseAccess); + rc = dixLookupResourceByType((pointer *)&sourcefont, source, RT_FONT, client, + DixUseAccess); if (rc != Success) { client->errorValue = source; return (rc == BadValue) ? BadFont : rc; } - rc = dixLookupResource((pointer *)&maskfont, mask, RT_FONT, client, - DixUseAccess); + rc = dixLookupResourceByType((pointer *)&maskfont, mask, RT_FONT, client, + DixUseAccess); if (rc != Success && mask != None) { client->errorValue = mask; diff --git a/dix/deprecated.c b/dix/deprecated.c index 2bb8119..4e20d60 100644 --- a/dix/deprecated.c +++ b/dix/deprecated.c @@ -115,48 +115,66 @@ LookupClient(XID id, ClientPtr client) return (i == Success) ? pClient : NULL; } -/* replaced by dixLookupResource */ +/* replaced by dixLookupResourceByType */ _X_EXPORT pointer SecurityLookupIDByType(ClientPtr client, XID id, RESTYPE rtype, Mask access_mode) { pointer retval; - int i = dixLookupResource(&retval, id, rtype, client, access_mode); + int i = dixLookupResourceByType(&retval, id, rtype, client, access_mode); static int warn = 1; if (warn > 0 && --warn) ErrorF("Warning: LookupIDByType()/SecurityLookupIDByType() " "are deprecated. Please convert your driver/module " - "to use dixLookupResource().\n"); + "to use dixLookupResourceByType().\n"); return (i == Success) ? retval : NULL; } -/* replaced by dixLookupResource */ +/* replaced by dixLookupResourceByClass */ _X_EXPORT pointer SecurityLookupIDByClass(ClientPtr client, XID id, RESTYPE classes, Mask access_mode) { pointer retval; - int i = dixLookupResource(&retval, id, classes, client, access_mode); + int i = dixLookupResourceByClass(&retval, id, classes, client, access_mode); static int warn = 1; if (warn > 0 && --warn) ErrorF("Warning: LookupIDByClass()/SecurityLookupIDByClass() " "are deprecated. Please convert your driver/module " - "to use dixLookupResource().\n"); + "to use dixLookupResourceByClass().\n"); return (i == Success) ? retval : NULL; } -/* replaced by dixLookupResource */ +/* replaced by dixLookupResourceByType */ _X_EXPORT pointer LookupIDByType(XID id, RESTYPE rtype) { return SecurityLookupIDByType(NullClient, id, rtype, DixUnknownAccess); } -/* replaced by dixLookupResource */ +/* replaced by dixLookupResourceByClass */ _X_EXPORT pointer LookupIDByClass(XID id, RESTYPE classes) { return SecurityLookupIDByClass(NullClient, id, classes, DixUnknownAccess); } +/* replaced by dixLookupResourceBy{Type,Class} */ +_X_EXPORT int +dixLookupResource (pointer *result, XID id, RESTYPE rtype, + ClientPtr client, Mask mode) +{ + Bool istype = ((rtype & TypeMask) && (rtype != RC_ANY)) || (rtype == RT_NONE); + + static int warn = 1; + if (warn > 0 && --warn) + ErrorF("Warning: dixLookupResource() " + "is deprecated. Please convert your driver/module " + "to use dixLookupResourceByType/dixLookupResourceByClass().\n"); + if (istype) + return dixLookupResourceByType (result, id, rtype, client, mode); + else + return dixLookupResourceByClass (result, id, rtype, client, mode); +} + /* end deprecated functions */ diff --git a/dix/dispatch.c b/dix/dispatch.c index 8b21690..d1531fc 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -1136,11 +1136,11 @@ ProcQueryFont(ClientPtr client) REQUEST_SIZE_MATCH(xResourceReq); client->errorValue = stuff->id; /* EITHER font or gc */ - rc = dixLookupResource((pointer *)&pFont, stuff->id, RT_FONT, client, - DixGetAttrAccess); + rc = dixLookupResourceByType((pointer *)&pFont, stuff->id, RT_FONT, client, + DixGetAttrAccess); if (rc == BadValue) { - rc = dixLookupResource((pointer *)&pGC, stuff->id, RT_GC, client, - DixGetAttrAccess); + rc = dixLookupResourceByType((pointer *)&pGC, stuff->id, RT_GC, client, + DixGetAttrAccess); if (rc == Success) pFont = pGC->font; } @@ -1194,10 +1194,10 @@ ProcQueryTextExtents(ClientPtr client) REQUEST_AT_LEAST_SIZE(xQueryTextExtentsReq); client->errorValue = stuff->fid; /* EITHER font or gc */ - rc = dixLookupResource((pointer *)&pFont, stuff->fid, RT_FONT, client, - DixGetAttrAccess); + rc = dixLookupResourceByType((pointer *)&pFont, stuff->fid, RT_FONT, client, + DixGetAttrAccess); if (rc == BadValue) { - rc = dixLookupResource((pointer *)&pGC, stuff->fid, RT_GC, client, + rc = dixLookupResourceByType((pointer *)&pGC, stuff->fid, RT_GC, client, DixGetAttrAccess); if (rc == Success) pFont = pGC->font; @@ -1342,7 +1342,7 @@ ProcFreePixmap(ClientPtr client) REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - rc = dixLookupResource((pointer *)&pMap, stuff->id, RT_PIXMAP, client, + rc = dixLookupResourceByType((pointer *)&pMap, stuff->id, RT_PIXMAP, client, DixDestroyAccess); if (rc == Success) { @@ -2288,7 +2288,7 @@ ProcFreeColormap(ClientPtr client) REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - rc = dixLookupResource((pointer *)&pmap, stuff->id, RT_COLORMAP, client, + rc = dixLookupResourceByType((pointer *)&pmap, stuff->id, RT_COLORMAP, client, DixDestroyAccess); if (rc == Success) { @@ -2316,7 +2316,7 @@ ProcCopyColormapAndFree(ClientPtr client) REQUEST_SIZE_MATCH(xCopyColormapAndFreeReq); mid = stuff->mid; LEGAL_NEW_RESOURCE(mid, client); - rc = dixLookupResource((pointer *)&pSrcMap, stuff->srcCmap, RT_COLORMAP, + rc = dixLookupResourceByType((pointer *)&pSrcMap, stuff->srcCmap, RT_COLORMAP, client, DixReadAccess|DixRemoveAccess); if (rc == Success) { @@ -2341,7 +2341,7 @@ ProcInstallColormap(ClientPtr client) REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - rc = dixLookupResource((pointer *)&pcmp, stuff->id, RT_COLORMAP, client, + rc = dixLookupResourceByType((pointer *)&pcmp, stuff->id, RT_COLORMAP, client, DixInstallAccess); if (rc != Success) goto out; @@ -2366,7 +2366,7 @@ ProcUninstallColormap(ClientPtr client) REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - rc = dixLookupResource((pointer *)&pcmp, stuff->id, RT_COLORMAP, client, + rc = dixLookupResourceByType((pointer *)&pcmp, stuff->id, RT_COLORMAP, client, DixUninstallAccess); if (rc != Success) goto out; @@ -2433,7 +2433,7 @@ ProcAllocColor (ClientPtr client) REQUEST(xAllocColorReq); REQUEST_SIZE_MATCH(xAllocColorReq); - rc = dixLookupResource((pointer *)&pmap, stuff->cmap, RT_COLORMAP, client, + rc = dixLookupResourceByType((pointer *)&pmap, stuff->cmap, RT_COLORMAP, client, DixAddAccess); if (rc == Success) { @@ -2474,7 +2474,7 @@ ProcAllocNamedColor (ClientPtr client) REQUEST(xAllocNamedColorReq); REQUEST_FIXED_SIZE(xAllocNamedColorReq, stuff->nbytes); - rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, + rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, DixAddAccess); if (rc == Success) { @@ -2525,7 +2525,7 @@ ProcAllocColorCells (ClientPtr client) REQUEST(xAllocColorCellsReq); REQUEST_SIZE_MATCH(xAllocColorCellsReq); - rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, + rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, DixAddAccess); if (rc == Success) { @@ -2592,7 +2592,7 @@ ProcAllocColorPlanes(ClientPtr client) REQUEST(xAllocColorPlanesReq); REQUEST_SIZE_MATCH(xAllocColorPlanesReq); - rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, + rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, DixAddAccess); if (rc == Success) { @@ -2657,7 +2657,7 @@ ProcFreeColors(ClientPtr client) REQUEST(xFreeColorsReq); REQUEST_AT_LEAST_SIZE(xFreeColorsReq); - rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, + rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, DixRemoveAccess); if (rc == Success) { @@ -2692,7 +2692,7 @@ ProcStoreColors (ClientPtr client) REQUEST(xStoreColorsReq); REQUEST_AT_LEAST_SIZE(xStoreColorsReq); - rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, + rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, DixWriteAccess); if (rc == Success) { @@ -2726,7 +2726,7 @@ ProcStoreNamedColor (ClientPtr client) REQUEST(xStoreNamedColorReq); REQUEST_FIXED_SIZE(xStoreNamedColorReq, stuff->nbytes); - rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, + rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, DixWriteAccess); if (rc == Success) { @@ -2760,7 +2760,7 @@ ProcQueryColors(ClientPtr client) REQUEST(xQueryColorsReq); REQUEST_AT_LEAST_SIZE(xQueryColorsReq); - rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, + rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, DixReadAccess); if (rc == Success) { @@ -2812,7 +2812,7 @@ ProcLookupColor(ClientPtr client) REQUEST(xLookupColorReq); REQUEST_FIXED_SIZE(xLookupColorReq, stuff->nbytes); - rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, + rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client, DixReadAccess); if (rc == Success) { @@ -2861,14 +2861,14 @@ ProcCreateCursor (ClientPtr client) REQUEST_SIZE_MATCH(xCreateCursorReq); LEGAL_NEW_RESOURCE(stuff->cid, client); - rc = dixLookupResource((pointer *)&src, stuff->source, RT_PIXMAP, client, + rc = dixLookupResourceByType((pointer *)&src, stuff->source, RT_PIXMAP, client, DixReadAccess); if (rc != Success) { client->errorValue = stuff->source; return (rc == BadValue) ? BadPixmap : rc; } - rc = dixLookupResource((pointer *)&msk, stuff->mask, RT_PIXMAP, client, + rc = dixLookupResourceByType((pointer *)&msk, stuff->mask, RT_PIXMAP, client, DixReadAccess); if (rc != Success) { @@ -2968,7 +2968,7 @@ ProcFreeCursor (ClientPtr client) REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - rc = dixLookupResource((pointer *)&pCursor, stuff->id, RT_CURSOR, client, + rc = dixLookupResourceByType((pointer *)&pCursor, stuff->id, RT_CURSOR, client, DixDestroyAccess); if (rc == Success) { diff --git a/dix/dixutils.c b/dix/dixutils.c index 22935ce..1d43d44 100644 --- a/dix/dixutils.c +++ b/dix/dixutils.c @@ -216,7 +216,7 @@ dixLookupDrawable(DrawablePtr *pDraw, XID id, ClientPtr client, if (id == INVALID) return BadDrawable; - rc = dixLookupResource((pointer *)&pTmp, id, RC_DRAWABLE, client, access); + rc = dixLookupResourceByClass((pointer *)&pTmp, id, RC_DRAWABLE, client, access); if (rc == BadValue) return BadDrawable; @@ -259,7 +259,7 @@ dixLookupClient(ClientPtr *pClient, XID rid, ClientPtr client, Mask access) if (!clientIndex || !clients[clientIndex] || (rid & SERVER_BIT)) goto bad; - rc = dixLookupResource(&pRes, rid, RC_ANY, client, DixGetAttrAccess); + rc = dixLookupResourceByClass(&pRes, rid, RC_ANY, client, DixGetAttrAccess); if (rc != Success) goto bad; diff --git a/dix/events.c b/dix/events.c index a4deaaa..b8dd680 100644 --- a/dix/events.c +++ b/dix/events.c @@ -5091,7 +5091,7 @@ ProcGrabPointer(ClientPtr client) cursor = NullCursor; else { - rc = dixLookupResource((pointer *)&cursor, stuff->cursor, RT_CURSOR, + rc = dixLookupResourceByType((pointer *)&cursor, stuff->cursor, RT_CURSOR, client, DixUseAccess); if (rc != Success) { @@ -5191,8 +5191,8 @@ ProcChangeActivePointerGrab(ClientPtr client) newCursor = NullCursor; else { - int rc = dixLookupResource((pointer *)&newCursor, stuff->cursor, - RT_CURSOR, client, DixUseAccess); + int rc = dixLookupResourceByType((pointer *)&newCursor, stuff->cursor, + RT_CURSOR, client, DixUseAccess); if (rc != Success) { client->errorValue = stuff->cursor; @@ -5798,7 +5798,7 @@ ProcGrabButton(ClientPtr client) cursor = NullCursor; else { - rc = dixLookupResource((pointer *)&cursor, stuff->cursor, RT_CURSOR, + rc = dixLookupResourceByType((pointer *)&cursor, stuff->cursor, RT_CURSOR, client, DixUseAccess); if (rc != Success) if (!cursor) @@ -6048,7 +6048,7 @@ ProcRecolorCursor(ClientPtr client) REQUEST(xRecolorCursorReq); REQUEST_SIZE_MATCH(xRecolorCursorReq); - rc = dixLookupResource((pointer *)&pCursor, stuff->cursor, RT_CURSOR, + rc = dixLookupResourceByType((pointer *)&pCursor, stuff->cursor, RT_CURSOR, client, DixWriteAccess); if (rc != Success) { diff --git a/dix/gc.c b/dix/gc.c index 83f48d4..1a5fb3e 100644 --- a/dix/gc.c +++ b/dix/gc.c @@ -273,7 +273,7 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr else { NEXTVAL(XID, newpix); - rc = dixLookupResource((pointer *)&pPixmap, newpix, + rc = dixLookupResourceByType((pointer *)&pPixmap, newpix, RT_PIXMAP, client, DixReadAccess); } if (rc == Success) @@ -310,7 +310,7 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr else { NEXTVAL(XID, newstipple) - rc = dixLookupResource((pointer *)&pPixmap, newstipple, + rc = dixLookupResourceByType((pointer *)&pPixmap, newstipple, RT_PIXMAP, client, DixReadAccess); } if (rc == Success) @@ -353,7 +353,7 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr else { NEXTVAL(XID, newfont) - rc = dixLookupResource((pointer *)&pFont, newfont, + rc = dixLookupResourceByType((pointer *)&pFont, newfont, RT_FONT, client, DixUseAccess); } if (rc == Success) @@ -420,7 +420,7 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr pPixmap = NullPixmap; } else { - rc = dixLookupResource((pointer *)&pPixmap, pid, + rc = dixLookupResourceByType((pointer *)&pPixmap, pid, RT_PIXMAP, client, DixReadAccess); if (rc != Success) { diff --git a/dix/resource.c b/dix/resource.c index 81b2e95..6d7f816 100644 --- a/dix/resource.c +++ b/dix/resource.c @@ -846,11 +846,10 @@ LegalNewID(XID id, ClientPtr client) } _X_EXPORT int -dixLookupResource(pointer *result, XID id, RESTYPE rtype, - ClientPtr client, Mask mode) +dixLookupResourceByType(pointer *result, XID id, RESTYPE rtype, + ClientPtr client, Mask mode) { int cid = CLIENT_ID(id); - int istype = (rtype & TypeMask) && (rtype != RC_ANY); ResourcePtr res = NULL; *result = NULL; @@ -859,8 +858,38 @@ dixLookupResource(pointer *result, XID id, RESTYPE rtype, res = clientTable[cid].resources[Hash(cid, id)]; for (; res; res = res->next) - if ((res->id == id) && ((istype && res->type == rtype) || - (!istype && res->type & rtype))) + if (res->id == id && res->type == rtype) + break; + } + if (!res) + return BadValue; + + if (client) { + client->errorValue = id; + cid = XaceHook(XACE_RESOURCE_ACCESS, client, id, res->type, + res->value, RT_NONE, NULL, mode); + if (cid != Success) + return cid; + } + + *result = res->value; + return Success; +} + +_X_EXPORT int +dixLookupResourceByClass(pointer *result, XID id, RESTYPE rclass, + ClientPtr client, Mask mode) +{ + int cid = CLIENT_ID(id); + ResourcePtr res = NULL; + + *result = NULL; + + if ((cid < MAXCLIENTS) && clientTable[cid].buckets) { + res = clientTable[cid].resources[Hash(cid, id)]; + + for (; res; res = res->next) + if (res->id == id && (res->type & rclass)) break; } if (!res) diff --git a/dix/window.c b/dix/window.c index 541d199..5810030 100644 --- a/dix/window.c +++ b/dix/window.c @@ -1086,7 +1086,7 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID *vlist, ClientPtr client) } else { - rc = dixLookupResource((pointer *)&pPixmap, pixID, RT_PIXMAP, + rc = dixLookupResourceByType((pointer *)&pPixmap, pixID, RT_PIXMAP, client, DixReadAccess); if (rc == Success) { @@ -1146,7 +1146,7 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID *vlist, ClientPtr client) pixID = pWin->parent->border.pixmap->drawable.id; } } - rc = dixLookupResource((pointer *)&pPixmap, pixID, RT_PIXMAP, + rc = dixLookupResourceByType((pointer *)&pPixmap, pixID, RT_PIXMAP, client, DixReadAccess); if (rc == Success) { @@ -1348,7 +1348,7 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID *vlist, ClientPtr client) error = BadMatch; goto PatchUp; } - rc = dixLookupResource((pointer *)&pCmap, cmap, RT_COLORMAP, + rc = dixLookupResourceByType((pointer *)&pCmap, cmap, RT_COLORMAP, client, DixUseAccess); if (rc != Success) { @@ -1424,7 +1424,7 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID *vlist, ClientPtr client) } else { - rc = dixLookupResource((pointer *)&pCursor, cursorID, + rc = dixLookupResourceByType((pointer *)&pCursor, cursorID, RT_CURSOR, client, DixUseAccess); if (rc != Success) { diff --git a/hw/xfree86/loader/dixsym.c b/hw/xfree86/loader/dixsym.c index 5713ca1..58d813e 100644 --- a/hw/xfree86/loader/dixsym.c +++ b/hw/xfree86/loader/dixsym.c @@ -276,6 +276,8 @@ _X_HIDDEN void *dixLookupTab[] = { SYMFUNC(ChangeResourceValue) SYMFUNC(CreateNewResourceClass) SYMFUNC(CreateNewResourceType) + SYMFUNC(dixLookupResourceByType) + SYMFUNC(dixLookupResourceByClass) SYMFUNC(dixLookupResource) SYMFUNC(FakeClientID) SYMFUNC(FreeResource) diff --git a/include/resource.h b/include/resource.h index b8105d4..ad51424 100644 --- a/include/resource.h +++ b/include/resource.h @@ -218,13 +218,20 @@ extern pointer LookupClientResourceComplex( FindComplexResType func, pointer cdata); -extern int dixLookupResource( +extern int dixLookupResourceByType( pointer *result, XID id, RESTYPE rtype, ClientPtr client, Mask access_mode); +extern int dixLookupResourceByClass( + pointer *result, + XID id, + RESTYPE rclass, + ClientPtr client, + Mask access_mode); + extern void GetXIDRange( int /*client*/, Bool /*server*/, @@ -244,29 +251,43 @@ extern RESTYPE TypeMask; * Please use the noted replacements instead. */ -/* replaced by dixLookupResource */ +#ifdef __GNUC__ +#define X_DEPRECATED __attribute__((deprecated)) +#else +#define X_DEPRECATED +#endif + +/* replaced by dixLookupResourceByType or dixLookupResourceByClass */ +extern int dixLookupResource( + pointer *result, + XID id, + RESTYPE rtype, + ClientPtr client, + Mask access_mode) X_DEPRECATED; + +/* replaced by dixLookupResourceByType */ extern pointer SecurityLookupIDByType( ClientPtr client, XID id, RESTYPE rtype, - Mask access_mode); + Mask access_mode) X_DEPRECATED; -/* replaced by dixLookupResource */ +/* replaced by dixLookupResourceByClass */ extern pointer SecurityLookupIDByClass( ClientPtr client, XID id, RESTYPE classes, - Mask access_mode); + Mask access_mode) X_DEPRECATED; -/* replaced by dixLookupResource */ +/* replaced by dixLookupResourceByType */ extern pointer LookupIDByType( XID id, - RESTYPE rtype); + RESTYPE rtype) X_DEPRECATED; -/* replaced by dixLookupResource */ +/* replaced by dixLookupResourceByClass */ extern pointer LookupIDByClass( XID id, - RESTYPE classes); + RESTYPE classes) X_DEPRECATED; #endif /* RESOURCE_H */ diff --git a/render/picture.c b/render/picture.c index 723f337..93952c8 100644 --- a/render/picture.c +++ b/render/picture.c @@ -1069,7 +1069,7 @@ ChangePicture (PicturePtr pPicture, pAlpha = 0; else { - error = dixLookupResource((pointer *)&pAlpha, pid, + error = dixLookupResourceByType((pointer *)&pAlpha, pid, PictureType, client, DixReadAccess); if (error != Success) @@ -1130,7 +1130,7 @@ ChangePicture (PicturePtr pPicture, else { clipType = CT_PIXMAP; - error = dixLookupResource((pointer *)&pPixmap, pid, + error = dixLookupResourceByType((pointer *)&pPixmap, pid, RT_PIXMAP, client, DixReadAccess); if (error != Success) diff --git a/render/render.c b/render/render.c index 638aa46..db340dc 100644 --- a/render/render.c +++ b/render/render.c @@ -1018,7 +1018,7 @@ ProcRenderReferenceGlyphSet (ClientPtr client) LEGAL_NEW_RESOURCE(stuff->gsid, client); - rc = dixLookupResource((pointer *)&glyphSet, stuff->existing, GlyphSetType, + rc = dixLookupResourceByType((pointer *)&glyphSet, stuff->existing, GlyphSetType, client, DixGetAttrAccess); if (rc != Success) { @@ -1042,7 +1042,7 @@ ProcRenderFreeGlyphSet (ClientPtr client) REQUEST(xRenderFreeGlyphSetReq); REQUEST_SIZE_MATCH(xRenderFreeGlyphSetReq); - rc = dixLookupResource((pointer *)&glyphSet, stuff->glyphset, GlyphSetType, + rc = dixLookupResourceByType((pointer *)&glyphSet, stuff->glyphset, GlyphSetType, client, DixDestroyAccess); if (rc != Success) { @@ -1081,7 +1081,7 @@ ProcRenderAddGlyphs (ClientPtr client) CARD32 component_alpha; REQUEST_AT_LEAST_SIZE(xRenderAddGlyphsReq); - err = dixLookupResource((pointer *)&glyphSet, stuff->glyphset, GlyphSetType, + err = dixLookupResourceByType((pointer *)&glyphSet, stuff->glyphset, GlyphSetType, client, DixAddAccess); if (err != Success) { @@ -1271,7 +1271,7 @@ ProcRenderFreeGlyphs (ClientPtr client) CARD32 glyph; REQUEST_AT_LEAST_SIZE(xRenderFreeGlyphsReq); - rc = dixLookupResource((pointer *)&glyphSet, stuff->glyphset, GlyphSetType, + rc = dixLookupResourceByType((pointer *)&glyphSet, stuff->glyphset, GlyphSetType, client, DixRemoveAccess); if (rc != Success) { diff --git a/xfixes/cursor.c b/xfixes/cursor.c index 0834d88..6853168 100755 --- a/xfixes/cursor.c +++ b/xfixes/cursor.c @@ -850,7 +850,7 @@ ProcXFixesHideCursor (ClientPtr client) REQUEST_SIZE_MATCH (xXFixesHideCursorReq); - ret = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW, + ret = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW, client, DixGetAttrAccess); if (ret != Success) { client->errorValue = stuff->window; @@ -908,7 +908,7 @@ ProcXFixesShowCursor (ClientPtr client) REQUEST_SIZE_MATCH (xXFixesShowCursorReq); - rc = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW, + rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW, client, DixGetAttrAccess); if (rc != Success) { client->errorValue = stuff->window; diff --git a/xfixes/region.c b/xfixes/region.c index d90b1e0..b927631 100755 --- a/xfixes/region.c +++ b/xfixes/region.c @@ -115,7 +115,7 @@ ProcXFixesCreateRegionFromBitmap (ClientPtr client) REQUEST_SIZE_MATCH (xXFixesCreateRegionFromBitmapReq); LEGAL_NEW_RESOURCE (stuff->region, client); - rc = dixLookupResource((pointer *)&pPixmap, stuff->bitmap, RT_PIXMAP, + rc = dixLookupResourceByType((pointer *)&pPixmap, stuff->bitmap, RT_PIXMAP, client, DixReadAccess); if (rc != Success) { @@ -160,7 +160,7 @@ ProcXFixesCreateRegionFromWindow (ClientPtr client) REQUEST_SIZE_MATCH (xXFixesCreateRegionFromWindowReq); LEGAL_NEW_RESOURCE (stuff->region, client); - rc = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW, + rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW, client, DixGetAttrAccess); if (rc != Success) { @@ -687,7 +687,7 @@ ProcXFixesSetWindowShapeRegion (ClientPtr client) REQUEST(xXFixesSetWindowShapeRegionReq); REQUEST_SIZE_MATCH(xXFixesSetWindowShapeRegionReq); - rc = dixLookupResource((pointer *)&pWin, stuff->dest, RT_WINDOW, + rc = dixLookupResourceByType((pointer *)&pWin, stuff->dest, RT_WINDOW, client, DixSetAttrAccess); if (rc != Success) { -- 1.5.6.3