diff options
author | Keith Packard <keithp@keithp.com> | 2008-08-06 15:26:24 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2009-07-26 13:56:57 -0700 |
commit | 1addf6fe235f8537024140aff56dffb4738701a7 (patch) | |
tree | 844b96c792bfd495a24a30e064c47b5be5db022d | |
parent | c838a03e891a6fcd2f7b71f727c1b93f7c26e7a7 (diff) |
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.
(cherry picked from commit f8dd80d13bb5313a11b38b280f8ad3e22f0a6300)
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r-- | Xext/saver.c | 8 | ||||
-rw-r--r-- | Xext/security.c | 4 | ||||
-rw-r--r-- | Xext/shape.c | 2 | ||||
-rw-r--r-- | Xext/sync.c | 2 | ||||
-rw-r--r-- | Xext/xselinux.c | 2 | ||||
-rw-r--r-- | Xext/xtest.c | 6 | ||||
-rw-r--r-- | Xi/exevents.c | 2 | ||||
-rw-r--r-- | composite/compext.c | 10 | ||||
-rw-r--r-- | dix/cursor.c | 8 | ||||
-rw-r--r-- | dix/deprecated.c | 34 | ||||
-rw-r--r-- | dix/dispatch.c | 48 | ||||
-rw-r--r-- | dix/dixutils.c | 4 | ||||
-rw-r--r-- | dix/events.c | 10 | ||||
-rw-r--r-- | dix/gc.c | 8 | ||||
-rw-r--r-- | dix/resource.c | 39 | ||||
-rw-r--r-- | dix/window.c | 8 | ||||
-rw-r--r-- | include/resource.h | 38 | ||||
-rw-r--r-- | render/picture.c | 4 | ||||
-rw-r--r-- | render/render.c | 8 | ||||
-rw-r--r-- | xfixes/cursor.c | 4 | ||||
-rw-r--r-- | xfixes/region.c | 6 |
21 files changed, 161 insertions, 94 deletions
diff --git a/Xext/saver.c b/Xext/saver.c index 0bdcb8b94..86db7b0b9 100644 --- a/Xext/saver.c +++ b/Xext/saver.c @@ -1054,7 +1054,7 @@ ScreenSaverSetAttributes (ClientPtr client) } else { - ret = dixLookupResource((pointer *)&pPixmap, pixID, RT_PIXMAP, + ret = dixLookupResourceByType((pointer *)&pPixmap, pixID, RT_PIXMAP, client, DixReadAccess); if (ret == Success) { @@ -1092,7 +1092,7 @@ ScreenSaverSetAttributes (ClientPtr client) } else { - ret = dixLookupResource((pointer *)&pPixmap, pixID, RT_PIXMAP, + ret = dixLookupResourceByType((pointer *)&pPixmap, pixID, RT_PIXMAP, client, DixReadAccess); if (ret == Success) { @@ -1186,7 +1186,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) { @@ -1210,7 +1210,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 b9f411ec4..1a90a82b1 100644 --- a/Xext/security.c +++ b/Xext/security.c @@ -1023,7 +1023,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) { @@ -1038,7 +1038,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 aaef0cb14..332e58743 100644 --- a/Xext/shape.c +++ b/Xext/shape.c @@ -428,7 +428,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 1b3736644..424361ee5 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 6c99c2944..4f4254abc 100644 --- a/Xext/xselinux.c +++ b/Xext/xselinux.c @@ -557,7 +557,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 3ff02ed91..9cfe8ca17 100644 --- a/Xext/xtest.c +++ b/Xext/xtest.c @@ -124,8 +124,8 @@ ProcXTestCompareCursor(client) else if (stuff->cursor == XTestCurrentCursor) pCursor = GetSpriteCursor(ptr); 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; @@ -158,7 +158,7 @@ ProcXTestFakeInput(client) int numValuators = 0; int firstValuator = 0; EventListPtr events; - int nevents; + int nevents = 0; int i; int base = 0; int flags = 0; diff --git a/Xi/exevents.c b/Xi/exevents.c index 398a26b20..0bb84f86c 100644 --- a/Xi/exevents.c +++ b/Xi/exevents.c @@ -1349,7 +1349,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 c1544021c..4fff20efa 100644 --- a/composite/compext.c +++ b/composite/compext.c @@ -144,7 +144,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) { @@ -162,7 +162,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) { @@ -214,7 +214,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) { @@ -250,7 +250,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) { @@ -298,7 +298,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 81540fd89..0017c661d 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 2bb81190c..4e20d6082 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 66f8f79ff..1ca08b641 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -1119,11 +1119,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; } @@ -1177,10 +1177,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; @@ -1325,7 +1325,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) { @@ -2271,7 +2271,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) { @@ -2299,7 +2299,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) { @@ -2324,7 +2324,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; @@ -2349,7 +2349,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; @@ -2416,7 +2416,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) { @@ -2457,7 +2457,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) { @@ -2508,7 +2508,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) { @@ -2575,7 +2575,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) { @@ -2640,7 +2640,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) { @@ -2675,7 +2675,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) { @@ -2709,7 +2709,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) { @@ -2743,7 +2743,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) { @@ -2795,7 +2795,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) { @@ -2844,14 +2844,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) { @@ -2949,7 +2949,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 340564ecd..66e5bc51b 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 5388a16fe..17868272a 100644 --- a/dix/events.c +++ b/dix/events.c @@ -4445,7 +4445,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) { @@ -4545,8 +4545,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; @@ -5146,7 +5146,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) @@ -5396,7 +5396,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) { @@ -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 7b0441ee9..7b133cae4 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 c19990ac1..a9d00f91b 100644 --- a/dix/window.c +++ b/dix/window.c @@ -1068,7 +1068,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) { @@ -1128,7 +1128,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) { @@ -1290,7 +1290,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) { @@ -1366,7 +1366,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/include/resource.h b/include/resource.h index b8105d45a..9b5792e30 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,42 @@ 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; + 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 d672ebc8c..956738734 100644 --- a/render/picture.c +++ b/render/picture.c @@ -1070,7 +1070,7 @@ ChangePicture (PicturePtr pPicture, pAlpha = 0; else { - error = dixLookupResource((pointer *)&pAlpha, pid, + error = dixLookupResourceByType((pointer *)&pAlpha, pid, PictureType, client, DixReadAccess); if (error != Success) @@ -1131,7 +1131,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 7cb93bd18..e3d76d2c1 100644 --- a/render/render.c +++ b/render/render.c @@ -1009,7 +1009,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) { @@ -1033,7 +1033,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) { @@ -1072,7 +1072,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) { @@ -1262,7 +1262,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 2c584f9f4..02ff1fd57 100644 --- a/xfixes/cursor.c +++ b/xfixes/cursor.c @@ -863,7 +863,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; @@ -921,7 +921,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 cac24b5da..2ab98fcef 100644 --- 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) { @@ -682,7 +682,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) { |