XQuartz: appledri: Allow byte swapped requests
Even though it's only valid when local, it is possible for a local client and the server to not match endianness, such as when running a ppc application under Rosetta. Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
This commit is contained in:
parent
14205ade0c
commit
1c8bda798b
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
|
Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
|
||||||
Copyright 2000 VA Linux Systems, Inc.
|
Copyright 2000 VA Linux Systems, Inc.
|
||||||
Copyright (c) 2002, 2009 Apple Computer, Inc.
|
Copyright (c) 2002, 2009-2011 Apple Inc.
|
||||||
All Rights Reserved.
|
All Rights Reserved.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
@ -409,6 +409,77 @@ SProcAppleDRIQueryVersion(
|
||||||
return ProcAppleDRIQueryVersion(client);
|
return ProcAppleDRIQueryVersion(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
SProcAppleDRIQueryDirectRenderingCapable(
|
||||||
|
register ClientPtr client
|
||||||
|
)
|
||||||
|
{
|
||||||
|
REQUEST(xAppleDRIQueryDirectRenderingCapableReq);
|
||||||
|
swaps(&stuff->length);
|
||||||
|
swapl(&stuff->screen);
|
||||||
|
return ProcAppleDRIQueryDirectRenderingCapable(client);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
SProcAppleDRIAuthConnection(
|
||||||
|
register ClientPtr client
|
||||||
|
)
|
||||||
|
{
|
||||||
|
REQUEST(xAppleDRIAuthConnectionReq);
|
||||||
|
swaps(&stuff->length);
|
||||||
|
swapl(&stuff->screen);
|
||||||
|
swapl(&stuff->magic);
|
||||||
|
return ProcAppleDRIAuthConnection(client);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
SProcAppleDRICreateSurface(
|
||||||
|
register ClientPtr client
|
||||||
|
)
|
||||||
|
{
|
||||||
|
REQUEST(xAppleDRICreateSurfaceReq);
|
||||||
|
swaps(&stuff->length);
|
||||||
|
swapl(&stuff->screen);
|
||||||
|
swapl(&stuff->drawable);
|
||||||
|
swapl(&stuff->client_id);
|
||||||
|
return ProcAppleDRICreateSurface(client);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
SProcAppleDRIDestroySurface(
|
||||||
|
register ClientPtr client
|
||||||
|
)
|
||||||
|
{
|
||||||
|
REQUEST(xAppleDRIDestroySurfaceReq);
|
||||||
|
swaps(&stuff->length);
|
||||||
|
swapl(&stuff->screen);
|
||||||
|
swapl(&stuff->drawable);
|
||||||
|
return ProcAppleDRIDestroySurface(client);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
SProcAppleDRICreatePixmap(
|
||||||
|
register ClientPtr client
|
||||||
|
)
|
||||||
|
{
|
||||||
|
REQUEST(xAppleDRICreatePixmapReq);
|
||||||
|
swaps(&stuff->length);
|
||||||
|
swapl(&stuff->screen);
|
||||||
|
swapl(&stuff->drawable);
|
||||||
|
return ProcAppleDRICreatePixmap(client);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
SProcAppleDRIDestroyPixmap(
|
||||||
|
register ClientPtr client
|
||||||
|
)
|
||||||
|
{
|
||||||
|
REQUEST(xAppleDRIDestroyPixmapReq);
|
||||||
|
swaps(&stuff->length);
|
||||||
|
swapl(&stuff->drawable);
|
||||||
|
return ProcAppleDRIDestroyPixmap(client);
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
SProcAppleDRIDispatch (
|
SProcAppleDRIDispatch (
|
||||||
register ClientPtr client
|
register ClientPtr client
|
||||||
|
@ -416,15 +487,30 @@ SProcAppleDRIDispatch (
|
||||||
{
|
{
|
||||||
REQUEST(xReq);
|
REQUEST(xReq);
|
||||||
|
|
||||||
/* It is bound to be non-local when there is byte swapping */
|
|
||||||
if (!LocalClient(client))
|
|
||||||
return DRIErrorBase + AppleDRIClientNotLocal;
|
|
||||||
|
|
||||||
/* only local clients are allowed DRI access */
|
|
||||||
switch (stuff->data)
|
switch (stuff->data)
|
||||||
{
|
{
|
||||||
case X_AppleDRIQueryVersion:
|
case X_AppleDRIQueryVersion:
|
||||||
return SProcAppleDRIQueryVersion(client);
|
return SProcAppleDRIQueryVersion(client);
|
||||||
|
case X_AppleDRIQueryDirectRenderingCapable:
|
||||||
|
return SProcAppleDRIQueryDirectRenderingCapable(client);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!LocalClient(client))
|
||||||
|
return DRIErrorBase + AppleDRIClientNotLocal;
|
||||||
|
|
||||||
|
switch (stuff->data)
|
||||||
|
{
|
||||||
|
case X_AppleDRIAuthConnection:
|
||||||
|
return SProcAppleDRIAuthConnection(client);
|
||||||
|
case X_AppleDRICreateSurface:
|
||||||
|
return SProcAppleDRICreateSurface(client);
|
||||||
|
case X_AppleDRIDestroySurface:
|
||||||
|
return SProcAppleDRIDestroySurface(client);
|
||||||
|
case X_AppleDRICreatePixmap:
|
||||||
|
return SProcAppleDRICreatePixmap(client);
|
||||||
|
case X_AppleDRIDestroyPixmap:
|
||||||
|
return SProcAppleDRIDestroyPixmap(client);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return BadRequest;
|
return BadRequest;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue