diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c index 298d8d640..1f87ae3fe 100644 --- a/Xext/panoramiX.c +++ b/Xext/panoramiX.c @@ -32,6 +32,7 @@ Equipment Corporation. #include #include "dix/dix_priv.h" +#include "dix/resource_priv.h" #include "dix/screen_hooks_priv.h" #include "misc.h" @@ -352,7 +353,7 @@ PanoramiXFindIDByScrnum(RESTYPE type, XID id, int screen) data.screen = screen; data.id = id; - return LookupClientResourceComplex(clients[CLIENT_ID(id)], type, + return LookupClientResourceComplex(clients[dixClientIdForXID(id)], type, XineramaFindIDByScrnum, &data); } diff --git a/Xext/security.c b/Xext/security.c index ddf1414b9..e879ca693 100644 --- a/Xext/security.c +++ b/Xext/security.c @@ -743,7 +743,7 @@ SecurityResource(CallbackListPtr *pcbl, void *unused, void *calldata) { XaceResourceAccessRec *rec = calldata; SecurityStateRec *subj, *obj; - int cid = CLIENT_ID(rec->id); + int cid = dixClientIdForXID(rec->id); Mask requested = rec->access_mode; Mask allowed = SecurityResourceMask; diff --git a/Xext/xres.c b/Xext/xres.c index caf835d63..396f146f6 100644 --- a/Xext/xres.c +++ b/Xext/xres.c @@ -12,6 +12,7 @@ #include #include "dix/registry_priv.h" +#include "dix/resource_priv.h" #include "os/client_priv.h" #include "Xext/xace.h" @@ -301,12 +302,12 @@ ProcXResQueryClientResources(ClientPtr client) { REQUEST(xXResQueryClientResourcesReq); xXResQueryClientResourcesReply rep; - int i, clientID, num_types; + int i, num_types; int *counts; REQUEST_SIZE_MATCH(xXResQueryClientResourcesReq); - clientID = CLIENT_ID(stuff->xid); + int clientID = dixClientIdForXID(stuff->xid); if ((clientID >= currentMaxClients) || !clients[clientID] || (XaceHookClientAccess(client, clients[clientID], DixReadAccess) @@ -379,12 +380,11 @@ ProcXResQueryClientPixmapBytes(ClientPtr client) { REQUEST(xXResQueryClientPixmapBytesReq); xXResQueryClientPixmapBytesReply rep; - int clientID; unsigned long bytes; REQUEST_SIZE_MATCH(xXResQueryClientPixmapBytesReq); - clientID = CLIENT_ID(stuff->xid); + int clientID = dixClientIdForXID(stuff->xid); if ((clientID >= currentMaxClients) || !clients[clientID] || (XaceHookClientAccess(client, clients[clientID], DixReadAccess) @@ -555,7 +555,7 @@ ConstructClientIds(ClientPtr client, } } } else { - int clientID = CLIENT_ID(specs[specIdx].client); + int clientID = dixClientIdForXID(specs[specIdx].client); if ((clientID < currentMaxClients) && clients[clientID] && (XaceHookClientAccess(client, clients[clientID], DixReadAccess) @@ -897,7 +897,7 @@ ConstructResourceBytesByResource(XID aboutClient, ConstructResourceBytesCtx *ctx for (specIdx = 0; specIdx < ctx->numSpecs; ++specIdx) { xXResResourceIdSpec *spec = ctx->specs + specIdx; if (spec->resource) { - int cid = CLIENT_ID(spec->resource); + int cid = dixClientIdForXID(spec->resource); if (cid < currentMaxClients && (aboutClient == None || cid == aboutClient)) { ClientPtr client = clients[cid]; @@ -925,7 +925,7 @@ ConstructResourceBytes(XID aboutClient, ConstructResourceBytesCtx *ctx) { if (aboutClient) { - int clientIdx = CLIENT_ID(aboutClient); + int clientIdx = dixClientIdForXID(aboutClient); ClientPtr client = NullClient; if ((clientIdx >= currentMaxClients) || !clients[clientIdx]) { diff --git a/Xext/xselinux_hooks.c b/Xext/xselinux_hooks.c index 100e0d708..8c599883e 100644 --- a/Xext/xselinux_hooks.c +++ b/Xext/xselinux_hooks.c @@ -632,7 +632,7 @@ SELinuxResource(CallbackListPtr *pcbl, void *unused, void *calldata) if (offset < 0) { /* No: use the SID of the owning client */ class = SECCLASS_X_RESOURCE; - privatePtr = &clients[CLIENT_ID(rec->id)]->devPrivates; + privatePtr = &clients[dixClientIdForXID(rec->id)]->devPrivates; obj = dixLookupPrivate(privatePtr, objectKey); } else { diff --git a/Xi/exevents.c b/Xi/exevents.c index dd64fe0d4..88572b72a 100644 --- a/Xi/exevents.c +++ b/Xi/exevents.c @@ -1743,7 +1743,7 @@ ProcessBarrierEvent(InternalEvent *e, DeviceIntPtr dev) Otherwise, deliver normally to the client. */ if (grab && - CLIENT_ID(be->barrierid) == CLIENT_ID(grab->resource) && + dixClientIdForXID(be->barrierid) == dixClientIdForXID(grab->resource) && grab->window->drawable.id == be->window) { DeliverGrabbedEvent(e, dev, FALSE); } else { diff --git a/Xi/xibarriers.c b/Xi/xibarriers.c index f7ad4276a..977a49714 100644 --- a/Xi/xibarriers.c +++ b/Xi/xibarriers.c @@ -46,6 +46,7 @@ #include "dix/cursor_priv.h" #include "dix/dix_priv.h" #include "dix/input_priv.h" +#include "dix/resource_priv.h" #include "mi/mi_priv.h" #include "os/bug_priv.h" @@ -841,7 +842,7 @@ XIDestroyPointerBarrier(ClientPtr client, return err; } - if (CLIENT_ID(stuff->barrier) != client->index) + if (dixClientIdForXID(stuff->barrier) != client->index) return BadAccess; FreeResource(stuff->barrier, X11_RESTYPE_NONE); @@ -910,10 +911,9 @@ ProcXIBarrierReleasePointer(ClientPtr client) return err; } - if (CLIENT_ID(barrier_id) != client->index) + if (dixClientIdForXID(barrier_id) != client->index) return BadAccess; - barrier = container_of(b, struct PointerBarrierClient, barrier); pbd = GetBarrierDevice(barrier, dev->id); diff --git a/Xi/xiselectev.c b/Xi/xiselectev.c index d341a12d5..80dbf6857 100644 --- a/Xi/xiselectev.c +++ b/Xi/xiselectev.c @@ -29,6 +29,7 @@ #include "dix/dix_priv.h" #include "dix/exevents_priv.h" +#include "dix/resource_priv.h" #include "dixstruct.h" #include "windowstr.h" @@ -56,7 +57,7 @@ check_for_touch_selection_conflicts(ClientPtr B, WindowPtr win, int deviceid, for (; A; A = A->next) { DeviceIntPtr tmp; - if (CLIENT_ID(A->resource) == B->index) + if (dixClientIdForXID(A->resource) == B->index) continue; if (deviceid == XIAllDevices) diff --git a/composite/compalloc.c b/composite/compalloc.c index 4a6107c0c..6b5287d7d 100644 --- a/composite/compalloc.c +++ b/composite/compalloc.c @@ -43,6 +43,7 @@ #include +#include "dix/resource_priv.h" #include "os/bug_priv.h" #include "compint.h" @@ -332,7 +333,7 @@ compUnredirectWindow(ClientPtr pClient, WindowPtr pWin, int update) return BadValue; for (ccw = cw->clients; ccw; ccw = ccw->next) - if (ccw->update == update && CLIENT_ID(ccw->id) == pClient->index) { + if (ccw->update == update && dixClientIdForXID(ccw->id) == pClient->index) { FreeResource(ccw->id, X11_RESTYPE_NONE); return Success; } @@ -430,7 +431,7 @@ compFreeClientSubwindows(WindowPtr pWin, XID id) return; for (prev = &csw->clients; (ccw = *prev); prev = &ccw->next) { if (ccw->id == id) { - ClientPtr pClient = clients[CLIENT_ID(id)]; + ClientPtr pClient = clients[dixClientIdForXID(id)]; *prev = ccw->next; if (ccw->update == CompositeRedirectManual) { @@ -479,7 +480,7 @@ compUnredirectSubwindows(ClientPtr pClient, WindowPtr pWin, int update) if (!csw) return BadValue; for (ccw = csw->clients; ccw; ccw = ccw->next) - if (ccw->update == update && CLIENT_ID(ccw->id) == pClient->index) { + if (ccw->update == update && dixClientIdForXID(ccw->id) == pClient->index) { FreeResource(ccw->id, X11_RESTYPE_NONE); return Success; } @@ -499,7 +500,7 @@ compRedirectOneSubwindow(WindowPtr pParent, WindowPtr pWin) if (!csw) return Success; for (ccw = csw->clients; ccw; ccw = ccw->next) { - int ret = compRedirectWindow(clients[CLIENT_ID(ccw->id)], + int ret = compRedirectWindow(clients[dixClientIdForXID(ccw->id)], pWin, ccw->update); if (ret != Success) @@ -521,7 +522,7 @@ compUnredirectOneSubwindow(WindowPtr pParent, WindowPtr pWin) if (!csw) return Success; for (ccw = csw->clients; ccw; ccw = ccw->next) { - int ret = compUnredirectWindow(clients[CLIENT_ID(ccw->id)], + int ret = compUnredirectWindow(clients[dixClientIdForXID(ccw->id)], pWin, ccw->update); if (ret != Success) diff --git a/composite/compwindow.c b/composite/compwindow.c index ed6bb5899..96f36e4cb 100644 --- a/composite/compwindow.c +++ b/composite/compwindow.c @@ -575,7 +575,7 @@ compCreateWindow(WindowPtr pWin) (*pScreen->SetWindowPixmap) (pWin, parent_pixmap); if (csw) for (ccw = csw->clients; ccw; ccw = ccw->next) - compRedirectWindow(clients[CLIENT_ID(ccw->id)], + compRedirectWindow(clients[dixClientIdForXID(ccw->id)], pWin, ccw->update); if (compImplicitRedirect(pWin, pWin->parent)) compRedirectWindow(serverClient, pWin, CompositeRedirectAutomatic); diff --git a/dix/colormap.c b/dix/colormap.c index c94810dce..1dfaebd45 100644 --- a/dix/colormap.c +++ b/dix/colormap.c @@ -54,6 +54,7 @@ SOFTWARE. #include "dix/colormap_priv.h" #include "dix/dix_priv.h" +#include "dix/resource_priv.h" #include "os/osdep.h" #include "os/bug_priv.h" @@ -417,7 +418,7 @@ FreeColormap(void *value, XID mid) EntryPtr pent; ColormapPtr pmap = (ColormapPtr) value; - if (CLIENT_ID(mid) != SERVER_ID) { + if (dixClientIdForXID(mid) != SERVER_ID) { (*pmap->pScreen->UninstallColormap) (pmap); WalkTree(pmap->pScreen, (VisitWindowProcPtr) TellNoMap, (void *) &mid); } @@ -548,7 +549,7 @@ CopyColormapAndFree(Colormap mid, ColormapPtr pSrc, int client) pScreen = pSrc->pScreen; pVisual = pSrc->pVisual; midSrc = pSrc->mid; - alloc = ((pSrc->flags & CM_AllAllocated) && CLIENT_ID(midSrc) == client) ? + alloc = ((pSrc->flags & CM_AllAllocated) && dixClientIdForXID(midSrc) == client) ? AllocAll : AllocNone; size = pVisual->ColormapEntries; @@ -1088,7 +1089,8 @@ AllocColor(ColormapPtr pmap, * resource manager that the client has pixels in this colormap which * should be freed when the client dies */ if ((pmap->numPixelsRed[client] == 1) && - (CLIENT_ID(pmap->mid) != client) && !(pmap->flags & CM_BeingCreated)) { + (dixClientIdForXID(pmap->mid) != client) && !(pmap->flags & CM_BeingCreated)) { + colorResource *pcr = calloc(1, sizeof(colorResource)); if (!pcr) { (void) FreeColors(pmap, client, 1, pPix, (Pixel) 0); @@ -1507,7 +1509,7 @@ AllocColorCells(ClientPtr pClient, ColormapPtr pmap, int colors, int planes, oldcount = pmap->numPixelsRed[client]; if (pmap->class == DirectColor) oldcount += pmap->numPixelsGreen[client] + pmap->numPixelsBlue[client]; - if (!oldcount && (CLIENT_ID(pmap->mid) != client)) { + if (!oldcount && (dixClientIdForXID(pmap->mid) != client)) { pcr = calloc(1, sizeof(colorResource)); if (!pcr) return BadAlloc; @@ -1574,7 +1576,7 @@ AllocColorPlanes(int client, ColormapPtr pmap, int colors, oldcount = pmap->numPixelsRed[client]; if (class == DirectColor) oldcount += pmap->numPixelsGreen[client] + pmap->numPixelsBlue[client]; - if (!oldcount && (CLIENT_ID(pmap->mid) != client)) { + if (!oldcount && (dixClientIdForXID(pmap->mid) != client)) { pcr = calloc(1, sizeof(colorResource)); if (!pcr) return BadAlloc; diff --git a/dix/dix_priv.h b/dix/dix_priv.h index 97a26b491..3a355f5f4 100644 --- a/dix/dix_priv.h +++ b/dix/dix_priv.h @@ -26,6 +26,7 @@ #include "include/gc.h" #include "include/input.h" #include "include/os.h" +#include "include/resource.h" #include "include/window.h" /* server setting: maximum size for big requests */ diff --git a/dix/dixutils.c b/dix/dixutils.c index 066ed0586..a2ded548f 100644 --- a/dix/dixutils.c +++ b/dix/dixutils.c @@ -87,6 +87,7 @@ Author: Adobe Systems Incorporated #include "dix/callback_priv.h" #include "dix/dix_priv.h" +#include "dix/resource_priv.h" #include "misc.h" #include "windowstr.h" @@ -221,7 +222,7 @@ int dixLookupResourceOwner(ClientPtr *result, XID id, ClientPtr client, Mask access_mode) { void *pRes; - int rc = BadValue, clientIndex = CLIENT_ID(id); + int rc = BadValue, clientIndex = dixClientIdForXID(id); if (!clientIndex || !clients[clientIndex] || (id & SERVER_BIT)) goto bad; diff --git a/dix/events.c b/dix/events.c index a7816b721..7ebf06290 100644 --- a/dix/events.c +++ b/dix/events.c @@ -1426,8 +1426,8 @@ CheckGrabForSyncs(DeviceIntPtr thisDev, Bool thisMode, Bool otherMode) else { /* free both if same client owns both */ thisDev->deviceGrab.sync.state = GRAB_STATE_THAWED; if (thisDev->deviceGrab.sync.other && - (CLIENT_BITS(thisDev->deviceGrab.sync.other->resource) == - CLIENT_BITS(grab->resource))) + (dixClientIdForXID(thisDev->deviceGrab.sync.other->resource) == + dixClientIdForXID(grab->resource))) thisDev->deviceGrab.sync.other = NullGrab; } @@ -1437,8 +1437,8 @@ CheckGrabForSyncs(DeviceIntPtr thisDev, Bool thisMode, Bool otherMode) dev->deviceGrab.sync.other = grab; else { /* free both if same client owns both */ if (dev->deviceGrab.sync.other && - (CLIENT_BITS(dev->deviceGrab.sync.other->resource) == - CLIENT_BITS(grab->resource))) + (dixClientIdForXID(dev->deviceGrab.sync.other->resource) == + dixClientIdForXID(grab->resource))) dev->deviceGrab.sync.other = NullGrab; } } @@ -4424,8 +4424,8 @@ FreezeThisEventIfNeededForSyncGrab(DeviceIntPtr thisDev, InternalEvent *event) if (dev) { FreezeThaw(dev, TRUE); if ((dev->deviceGrab.sync.state == GRAB_STATE_FREEZE_BOTH_NEXT_EVENT) && - (CLIENT_BITS(grab->resource) == - CLIENT_BITS(dev->deviceGrab.grab->resource))) + (dixClientIdForXID(grab->resource) == + dixClientIdForXID(dev->deviceGrab.grab->resource))) dev->deviceGrab.sync.state = GRAB_STATE_FROZEN_NO_EVENT; else dev->deviceGrab.sync.other = grab; @@ -6286,5 +6286,5 @@ IsWrongPointerBarrierClient(ClientPtr client, DeviceIntPtr dev, xEvent *event) if (ev->evtype != XI_BarrierHit && ev->evtype != XI_BarrierLeave) return FALSE; - return client->index != CLIENT_ID(ev->barrier); + return client->index != dixClientIdForXID(ev->barrier); } diff --git a/dix/grabs.c b/dix/grabs.c index 27f86a547..d782a3783 100644 --- a/dix/grabs.c +++ b/dix/grabs.c @@ -55,6 +55,7 @@ SOFTWARE. #include "dix/dix_priv.h" #include "dix/dixgrabs_priv.h" #include "dix/exevents_priv.h" +#include "dix/resource_priv.h" #include "os/auth.h" #include "os/client_priv.h" @@ -88,7 +89,7 @@ PrintDeviceGrabInfo(DeviceIntPtr dev) (grab->grabtype == XI2) ? "xi2" : ((grab->grabtype == CORE) ? "core" : "xi1"), dev->name, dev->id); - client = clients[CLIENT_ID(grab->resource)]; + client = clients[dixClientIdForXID(grab->resource)]; if (client) { pid_t clientpid = GetClientPid(client); const char *cmdname = GetClientCmdName(client); @@ -110,7 +111,7 @@ PrintDeviceGrabInfo(DeviceIntPtr dev) } if (!clientIdPrinted) { ErrorF(" (no client information available for client %d)\n", - CLIENT_ID(grab->resource)); + dixClientIdForXID(grab->resource)); } /* XXX is this even correct? */ @@ -181,7 +182,7 @@ UngrabAllDevices(Bool kill_client) if (!dev->deviceGrab.grab) continue; PrintDeviceGrabInfo(dev); - client = clients[CLIENT_ID(dev->deviceGrab.grab->resource)]; + client = clients[dixClientIdForXID(dev->deviceGrab.grab->resource)]; if (!kill_client || !client || client->clientGone) dev->deviceGrab.DeactivateGrab(dev); if (kill_client) @@ -538,7 +539,7 @@ AddPassiveGrabToList(ClientPtr client, GrabPtr pGrab) for (grab = wPassiveGrabs(pGrab->window); grab; grab = grab->next) { if (GrabMatchesSecond(pGrab, grab, (pGrab->grabtype == CORE))) { - if (CLIENT_BITS(pGrab->resource) != CLIENT_BITS(grab->resource)) { + if (dixClientIdForXID(pGrab->resource) != dixClientIdForXID(grab->resource)) { FreeGrab(pGrab); return BadAccess; } @@ -618,7 +619,7 @@ DeletePassiveGrabFromList(GrabPtr pMinuendGrab) ok = TRUE; for (grab = wPassiveGrabs(pMinuendGrab->window); grab && ok; grab = grab->next) { - if ((CLIENT_BITS(grab->resource) != CLIENT_BITS(pMinuendGrab->resource)) + if ((dixClientIdForXID(grab->resource) != dixClientIdForXID(pMinuendGrab->resource)) || !GrabMatchesSecond(grab, pMinuendGrab, (grab->grabtype == CORE))) continue; if (GrabSupersedesSecond(pMinuendGrab, grab)) { @@ -646,7 +647,7 @@ DeletePassiveGrabFromList(GrabPtr pMinuendGrab) param.other_devices_mode = grab->pointerMode; param.modifiers = any_modifier; - pNewGrab = CreateGrab(CLIENT_ID(grab->resource), grab->device, + pNewGrab = CreateGrab(dixClientIdForXID(grab->resource), grab->device, grab->modifierDevice, grab->window, grab->grabtype, (GrabMask *) &grab->eventMask, diff --git a/dix/lookup.c b/dix/lookup.c index c039efd39..02d04e228 100644 --- a/dix/lookup.c +++ b/dix/lookup.c @@ -16,26 +16,26 @@ ClientPtr dixClientForWindow(WindowPtr pWin) { if (!pWin) return NullClient; - return clients[CLIENT_ID(pWin->drawable.id)]; + return clients[dixClientIdForXID(pWin->drawable.id)]; } ClientPtr dixClientForGrab(GrabPtr pGrab) { if (!pGrab) return NullClient; - return clients[CLIENT_ID(pGrab->resource)]; + return clients[dixClientIdForXID(pGrab->resource)]; } ClientPtr dixClientForInputClients(InputClientsPtr pInputClients) { if (!pInputClients) return NullClient; - return clients[CLIENT_ID(pInputClients->resource)]; + return clients[dixClientIdForXID(pInputClients->resource)]; } ClientPtr dixClientForOtherClients(OtherClientsPtr pOtherClients) { if (!pOtherClients) return NullClient; - return clients[CLIENT_ID(pOtherClients->resource)]; + return clients[dixClientIdForXID(pOtherClients->resource)]; } diff --git a/dix/resource.c b/dix/resource.c index 149cf0bc9..9c495a2da 100644 --- a/dix/resource.c +++ b/dix/resource.c @@ -112,7 +112,7 @@ Equipment Corporation. * like it belongs to a client. This ID, however, must not be one * the client actually can create, or we have the potential for conflict. * The 31st bit of the ID is reserved for the server's use for this - * purpose. By setting CLIENT_ID(id) to the client, the SERVER_BIT to + * purpose. By setting dixClientIdForXID(id) to the client, the SERVER_BIT to * 1, and an otherwise arbitrary ID in the low 22 bits, we can create a * resource "owned" by the client. */ @@ -126,6 +126,7 @@ Equipment Corporation. #include "dix/dixgrabs_priv.h" #include "dix/gc_priv.h" #include "dix/registry_priv.h" +#include "dix/resource_priv.h" #include "os/osdep.h" #include "misc.h" @@ -824,7 +825,7 @@ AddResource(XID id, RESTYPE type, void *value) #ifdef XSERVER_DTRACE XSERVER_RESOURCE_ALLOC(id, type, value, TypeNameString(type)); #endif - client = CLIENT_ID(id); + client = dixClientIdForXID(id); rrec = &clientTable[client]; if (!rrec->buckets) { ErrorF("[dix] AddResource(%lx, %x, %lx), client=%d \n", @@ -912,7 +913,7 @@ FreeResource(XID id, RESTYPE skipDeleteFuncType) int *eltptr; int elements; - if (((cid = CLIENT_ID(id)) < LimitClients) && clientTable[cid].buckets) { + if (((cid = dixClientIdForXID(id)) < LimitClients) && clientTable[cid].buckets) { head = &clientTable[cid].resources[HashResourceID(id, clientTable[cid].hashsize)]; eltptr = &clientTable[cid].elements; @@ -946,7 +947,7 @@ FreeResourceByType(XID id, RESTYPE type, Bool skipFree) ResourcePtr res; ResourcePtr *prev, *head; - if (((cid = CLIENT_ID(id)) < LimitClients) && clientTable[cid].buckets) { + if (((cid = dixClientIdForXID(id)) < LimitClients) && clientTable[cid].buckets) { head = &clientTable[cid].resources[HashResourceID(id, clientTable[cid].hashsize)]; prev = head; @@ -981,7 +982,7 @@ ChangeResourceValue(XID id, RESTYPE rtype, void *value) int cid; ResourcePtr res; - if (((cid = CLIENT_ID(id)) < LimitClients) && clientTable[cid].buckets) { + if (((cid = dixClientIdForXID(id)) < LimitClients) && clientTable[cid].buckets) { res = clientTable[cid].resources[HashResourceID(id, clientTable[cid].hashsize)]; for (; res; res = res->next) @@ -1212,7 +1213,7 @@ int dixLookupResourceByType(void **result, XID id, RESTYPE rtype, ClientPtr client, Mask mode) { - int cid = CLIENT_ID(id); + int cid = dixClientIdForXID(id); ResourcePtr res = NULL; *result = NULL; @@ -1249,7 +1250,7 @@ int dixLookupResourceByClass(void **result, XID id, RESTYPE rclass, ClientPtr client, Mask mode) { - int cid = CLIENT_ID(id); + int cid = dixClientIdForXID(id); ResourcePtr res = NULL; *result = NULL; diff --git a/dix/resource_priv.h b/dix/resource_priv.h index ee12b0ede..35b6b3ec8 100644 --- a/dix/resource_priv.h +++ b/dix/resource_priv.h @@ -51,4 +51,19 @@ ClientPtr dixClientForInputClients(InputClientsPtr pInputClients); */ ClientPtr dixClientForOtherClients(OtherClientsPtr pOtherClients); +/* + * @brief extract client ID from XID + * + * XIDs carry the ID of the client who created/owns the resource in upper bits. + * (every client so is assigned a range of XIDs it may use for resource creation) + * + * This ID is frequently used as table index, eg. for client or resource lookup. + * + * @param XID the ID of the resource whose client is retrieved + * @return index of the client (within client or resource table) + */ +static inline int dixClientIdForXID(XID xid) { + return ((int)(CLIENT_BITS(xid) >> CLIENTOFFSET)); +} + #endif /* _XSERVER_DIX_RESOURCE_PRIV_H */ diff --git a/dix/touch.c b/dix/touch.c index 1c0204cb8..6f4688a68 100644 --- a/dix/touch.c +++ b/dix/touch.c @@ -31,6 +31,7 @@ #include "dix/eventconvert.h" #include "dix/exevents_priv.h" #include "dix/input_priv.h" +#include "dix/resource_priv.h" #include "mi/mi_priv.h" #include "os/bug_priv.h" @@ -994,7 +995,7 @@ TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode, } for (i = 0; i < ti->num_listeners; i++) { - if (CLIENT_ID(ti->listeners[i].listener) == client->index && + if (dixClientIdForXID(ti->listeners[i].listener) == client->index && ti->listeners[i].window->drawable.id == grab_window) break; } diff --git a/glx/glxcmds.c b/glx/glxcmds.c index 4123bcd4b..eb0aebcc5 100644 --- a/glx/glxcmds.c +++ b/glx/glxcmds.c @@ -36,6 +36,7 @@ #include #include "dix/dix_priv.h" +#include "dix/resource_priv.h" #include "os/bug_priv.h" #include "glxserver.h" @@ -2504,7 +2505,7 @@ void __glXsendSwapEvent(__GLXdrawable *drawable, int type, CARD64 ust, CARD64 msc, CARD32 sbc) { - ClientPtr client = clients[CLIENT_ID(drawable->drawId)]; + ClientPtr client = clients[dixClientIdForXID(drawable->drawId)]; xGLXBufferSwapComplete2 wire = { .type = __glXEventBase + GLX_BufferSwapComplete diff --git a/hw/xwayland/xwayland-pixmap.h b/hw/xwayland/xwayland-pixmap.h index 036b532ef..b4b26c886 100644 --- a/hw/xwayland/xwayland-pixmap.h +++ b/hw/xwayland/xwayland-pixmap.h @@ -29,6 +29,8 @@ #include #include +#include "dix/resource_priv.h" + #include "pixmapstr.h" /* This is an opaque structure implemented in the different backends */ @@ -48,7 +50,7 @@ Bool xwl_pixmap_init(void); static inline Bool xwl_is_client_pixmap(PixmapPtr pixmap) { - return clients[CLIENT_ID(pixmap->drawable.id)] != serverClient; + return clients[dixClientIdForXID(pixmap->drawable.id)] != serverClient; } #endif /* XWAYLAND_PIXMAP_H */ diff --git a/hw/xwayland/xwayland-window.c b/hw/xwayland/xwayland-window.c index 2ce2ed045..717129fa9 100644 --- a/hw/xwayland/xwayland-window.c +++ b/hw/xwayland/xwayland-window.c @@ -471,7 +471,7 @@ window_is_wm_window(WindowPtr window) { struct xwl_screen *xwl_screen = xwl_screen_get(window->drawable.pScreen); - return CLIENT_ID(window->drawable.id) == xwl_screen->wm_client_id; + return dixClientIdForXID(window->drawable.id) == xwl_screen->wm_client_id; } static WindowPtr @@ -1787,7 +1787,7 @@ xwl_change_window_attributes(WindowPtr window, unsigned long mask) for (others = wOtherClients(window); others; others = others->next) { if (others->mask & (SubstructureRedirectMask | ResizeRedirectMask)) - xwl_screen->wm_client_id = CLIENT_ID(others->resource); + xwl_screen->wm_client_id = dixClientIdForXID(others->resource); } return ret; diff --git a/include/resource.h b/include/resource.h index 5e990bf53..92ff04437 100644 --- a/include/resource.h +++ b/include/resource.h @@ -110,8 +110,6 @@ extern _X_EXPORT unsigned int ResourceClientBits(void); #define RESOURCE_CLIENT_MASK (((1 << RESOURCE_CLIENT_BITS) - 1) << CLIENTOFFSET) /* extract the client mask from an XID */ #define CLIENT_BITS(id) ((id) & RESOURCE_CLIENT_MASK) -/* extract the client id from an XID */ -#define CLIENT_ID(id) ((int)(CLIENT_BITS(id) >> CLIENTOFFSET)) /* * Resource IDs having that bit set still belonging to some client, diff --git a/record/record.c b/record/record.c index 428a70e5c..9c029a004 100644 --- a/record/record.c +++ b/record/record.c @@ -37,6 +37,7 @@ and Jim Haggerty of Metheus. #include "dix/cursor_priv.h" #include "dix/eventconvert.h" #include "dix/input_priv.h" +#include "dix/resource_priv.h" #include "os/client_priv.h" #include "dixstruct.h" @@ -865,7 +866,7 @@ RecordInstallHooks(RecordClientsAndProtocolPtr pRCAP, XID oneclient) if (pRCAP->pRequestMajorOpSet) { RecordSetIteratePtr pIter = NULL; RecordSetInterval interval; - ClientPtr pClient = clients[CLIENT_ID(client)]; + ClientPtr pClient = clients[dixClientIdForXID(client)]; if (pClient && !RecordClientPrivate(pClient)) { RecordClientPrivatePtr pClientPriv; @@ -948,7 +949,7 @@ RecordUninstallHooks(RecordClientsAndProtocolPtr pRCAP, XID oneclient) while (client) { if (client != XRecordFutureClients) { if (pRCAP->pRequestMajorOpSet) { - ClientPtr pClient = clients[CLIENT_ID(client)]; + ClientPtr pClient = clients[dixClientIdForXID(client)]; int c; Bool otherRCAPwantsProcVector = FALSE; RecordClientPrivatePtr pClientPriv = NULL; @@ -1153,7 +1154,7 @@ RecordSanityCheckClientSpecifiers(ClientPtr client, XID *clientspecs, continue; if (errorspec && (CLIENT_BITS(clientspecs[i]) == errorspec)) return BadMatch; - clientIndex = CLIENT_ID(clientspecs[i]); + clientIndex = dixClientIdForXID(clientspecs[i]); if (clientIndex && clients[clientIndex] && clients[clientIndex]->clientState == ClientStateRunning) { if (clientspecs[i] == clients[clientIndex]->clientAsMask)