diff options
author | marha <marha@users.sourceforge.net> | 2009-09-02 21:09:13 +0000 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2009-09-02 21:09:13 +0000 |
commit | 8fedf58693f42869528b41408ac4d6012839e973 (patch) | |
tree | 62a817bea7dfc71050292d302ba94f5e349c67a7 /xorg-server/dix/resource.c | |
parent | ac14083f465166b298162a57fff0bad90e528fff (diff) | |
parent | 6f25a23db1df27e992c34f6fd4c82e83c44fc2e2 (diff) | |
download | vcxsrv-8fedf58693f42869528b41408ac4d6012839e973.tar.gz vcxsrv-8fedf58693f42869528b41408ac4d6012839e973.tar.bz2 vcxsrv-8fedf58693f42869528b41408ac4d6012839e973.zip |
svn merge https://vcxsrv.svn.sourceforge.net/svnroot/vcxsrv/branches/released .
Diffstat (limited to 'xorg-server/dix/resource.c')
-rw-r--r-- | xorg-server/dix/resource.c | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/xorg-server/dix/resource.c b/xorg-server/dix/resource.c index 7b0441ee9..7b133cae4 100644 --- a/xorg-server/dix/resource.c +++ b/xorg-server/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) |