[PATCH 2/3] dix: more lookup function consolidation, macro removal
Eamon Walsh
ewalsh at tycho.nsa.gov
Tue Jan 30 14:49:25 PST 2007
Keith Packard wrote:
> On Mon, 2007-01-29 at 20:04 -0500, Eamon Walsh wrote:
>
>
>> +_X_EXPORT int
>> +dixLookupResource(pointer *result, XID id, RESTYPE rtype,
>> + ClientPtr client, Mask mode)
>>
>
> I'm not entirely comfortable with this change; it doesn't make the old
> distinction between looking up by type and by class very clear, instead
> hiding it in the magic of the resource type bits:
>
>
>> + int istype = rtype & (RC_LASTPREDEF - 1);
>>
>
>
I made a mistake here upon review. The proper test should be:
int istype = (rtype & TypeMask) && (rtype != RC_ANY);
From a user perspective, it seems intuitive to me: pass whatever type
or class you're interested in. Maybe the distinction could be made
clear in the comments and documentation, such as the following which
would be in the Xserver-spec document?
Looking Up Resources
To look up a resource from its resource ID, use the following:
int dixLookupResource(
pointer *result,
XID id,
RESTYPE rtype,
ClientPtr client,
Mask access_mode);
The id parameter is the resource ID being looked up. The rtype
parameter may be set to either a resource type value or a resource class
value. The resource being looked up must be of the given type (if a
type value is passed) or belong to the given class (if a class value is
passed). Resource type/class values are discussed in Section X above.
The final two parameters are used for security and auditing purposes.
The client parameter should refer to the client on whose behalf the
lookup operation is being performed. Typically, this is the client that
sent the protocol request being processed by the calling code. If there
is no such client and the lookup is being performed on behalf of the
server itself, pass serverClient. The access_mode parameter should be
set to one of the access type constants defined in resource.h:
DixReadAccess for read access to the resource, DixWriteAccess for write
access, and so forth. These constants can be bitwise-or'ed together.
If the lookup operation is successful, the return value will be Success
and the result parameter will be set to the resource data. If the
lookup operation fails, the return value will be set to one of the error
codes defined in X.h. BadValue indicates that no resource with the
given id and type/class was found. BadAccess indicates a permission denial.
--
Eamon Walsh <ewalsh at tycho.nsa.gov>
National Security Agency
More information about the xorg
mailing list