Introduce a consistent coding style

This is strictly the application of the script 'x-indent-all.sh'
from util/modular. Compared to the patch that Daniel posted in
January, I've added a few indent flags:

	-bap
	-psl
	-T PrivatePtr
	-T pmWait
	-T _XFUNCPROTOBEGIN
	-T _XFUNCPROTOEND
	-T _X_EXPORT

The typedefs were needed to make the output of sdksyms.sh match the
previous output, otherwise, the code is formatted badly enough that
sdksyms.sh generates incorrect output.

The generated code was compared with the previous version and found to
be essentially identical -- "assert" line numbers and BUILD_TIME were
the only differences found.

The comparison was done with this script:

dir1=$1
dir2=$2

for dir in $dir1 $dir2; do
	(cd $dir && find . -name '*.o' | while read file; do
		dir=`dirname $file`
		base=`basename $file .o`
		dump=$dir/$base.dump
		objdump -d $file > $dump
	done)
done

find $dir1 -name '*.dump' | while read dump; do
	otherdump=`echo $dump | sed "s;$dir1;$dir2;"`
	diff -u $dump $otherdump
done

Signed-off-by: Keith Packard <keithp@keithp.com>
Acked-by: Daniel Stone <daniel@fooishbar.org>
Acked-by: Alan Coopersmith <alan.coopersmith@oracle.com>
This commit is contained in:
Keith Packard 2012-03-21 12:55:09 -07:00
parent 75199129c6
commit 9838b7032e
1258 changed files with 257574 additions and 252857 deletions

View File

@ -43,7 +43,7 @@ from The Open Group.
void BigReqExtensionInit(INITARGS); void BigReqExtensionInit(INITARGS);
static int static int
ProcBigReqDispatch (ClientPtr client) ProcBigReqDispatch(ClientPtr client)
{ {
REQUEST(xBigReqEnableReq); REQUEST(xBigReqEnableReq);
xBigReqEnableReply rep; xBigReqEnableReply rep;
@ -64,7 +64,7 @@ ProcBigReqDispatch (ClientPtr client)
swaps(&rep.sequenceNumber); swaps(&rep.sequenceNumber);
swapl(&rep.max_request_size); swapl(&rep.max_request_size);
} }
WriteToClient(client, sizeof(xBigReqEnableReply), (char *)&rep); WriteToClient(client, sizeof(xBigReqEnableReply), (char *) &rep);
return Success; return Success;
} }

View File

@ -59,7 +59,7 @@ ProcDPMSGetVersion(ClientPtr client)
swaps(&rep.majorVersion); swaps(&rep.majorVersion);
swaps(&rep.minorVersion); swaps(&rep.minorVersion);
} }
WriteToClient(client, sizeof(xDPMSGetVersionReply), (char *)&rep); WriteToClient(client, sizeof(xDPMSGetVersionReply), (char *) &rep);
return Success; return Success;
} }
@ -79,7 +79,7 @@ ProcDPMSCapable(ClientPtr client)
if (client->swapped) { if (client->swapped) {
swaps(&rep.sequenceNumber); swaps(&rep.sequenceNumber);
} }
WriteToClient(client, sizeof(xDPMSCapableReply), (char *)&rep); WriteToClient(client, sizeof(xDPMSCapableReply), (char *) &rep);
return Success; return Success;
} }
@ -104,7 +104,7 @@ ProcDPMSGetTimeouts(ClientPtr client)
swaps(&rep.suspend); swaps(&rep.suspend);
swaps(&rep.off); swaps(&rep.off);
} }
WriteToClient(client, sizeof(xDPMSGetTimeoutsReply), (char *)&rep); WriteToClient(client, sizeof(xDPMSGetTimeoutsReply), (char *) &rep);
return Success; return Success;
} }
@ -115,13 +115,11 @@ ProcDPMSSetTimeouts(ClientPtr client)
REQUEST_SIZE_MATCH(xDPMSSetTimeoutsReq); REQUEST_SIZE_MATCH(xDPMSSetTimeoutsReq);
if ((stuff->off != 0)&&(stuff->off < stuff->suspend)) if ((stuff->off != 0) && (stuff->off < stuff->suspend)) {
{
client->errorValue = stuff->off; client->errorValue = stuff->off;
return BadValue; return BadValue;
} }
if ((stuff->suspend != 0)&&(stuff->suspend < stuff->standby)) if ((stuff->suspend != 0) && (stuff->suspend < stuff->standby)) {
{
client->errorValue = stuff->suspend; client->errorValue = stuff->suspend;
return BadValue; return BadValue;
} }
@ -176,8 +174,7 @@ ProcDPMSForceLevel(ClientPtr client)
if (stuff->level != DPMSModeOn && if (stuff->level != DPMSModeOn &&
stuff->level != DPMSModeStandby && stuff->level != DPMSModeStandby &&
stuff->level != DPMSModeSuspend && stuff->level != DPMSModeSuspend && stuff->level != DPMSModeOff) {
stuff->level != DPMSModeOff) {
client->errorValue = stuff->level; client->errorValue = stuff->level;
return BadValue; return BadValue;
} }
@ -205,17 +202,16 @@ ProcDPMSInfo(ClientPtr client)
swaps(&rep.sequenceNumber); swaps(&rep.sequenceNumber);
swaps(&rep.power_level); swaps(&rep.power_level);
} }
WriteToClient(client, sizeof(xDPMSInfoReply), (char *)&rep); WriteToClient(client, sizeof(xDPMSInfoReply), (char *) &rep);
return Success; return Success;
} }
static int static int
ProcDPMSDispatch (ClientPtr client) ProcDPMSDispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
switch (stuff->data) switch (stuff->data) {
{
case X_DPMSGetVersion: case X_DPMSGetVersion:
return ProcDPMSGetVersion(client); return ProcDPMSGetVersion(client);
case X_DPMSCapable: case X_DPMSCapable:
@ -332,11 +328,10 @@ SProcDPMSInfo(ClientPtr client)
} }
static int static int
SProcDPMSDispatch (ClientPtr client) SProcDPMSDispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
switch (stuff->data) switch (stuff->data) {
{
case X_DPMSGetVersion: case X_DPMSGetVersion:
return SProcDPMSGetVersion(client); return SProcDPMSGetVersion(client);
case X_DPMSCapable: case X_DPMSCapable:

View File

@ -34,12 +34,14 @@ Equipment Corporation.
#define FALSE 0 #define FALSE 0
Bool DPMSSupported(void) Bool
DPMSSupported(void)
{ {
return FALSE; return FALSE;
} }
int DPMSSet(ClientPtr client, int level) int
DPMSSet(ClientPtr client, int level)
{ {
return Success; return Success;
} }

View File

@ -46,7 +46,7 @@ static const int version_requests[] = {
}; };
/* Forward declarations */ /* Forward declarations */
static void SGEGenericEvent(xEvent* from, xEvent* to); static void SGEGenericEvent(xEvent *from, xEvent *to);
#define NUM_VERSION_REQUESTS (sizeof (version_requests) / sizeof (version_requests[0])) #define NUM_VERSION_REQUESTS (sizeof (version_requests) / sizeof (version_requests[0]))
#define EXT_MASK(ext) ((ext) & 0x7F) #define EXT_MASK(ext) ((ext) & 0x7F)
@ -60,6 +60,7 @@ ProcGEQueryVersion(ClientPtr client)
{ {
GEClientInfoPtr pGEClient = GEGetClient(client); GEClientInfoPtr pGEClient = GEGetClient(client);
xGEQueryVersionReply rep; xGEQueryVersionReply rep;
REQUEST(xGEQueryVersionReq); REQUEST(xGEQueryVersionReq);
REQUEST_SIZE_MATCH(xGEQueryVersionReq); REQUEST_SIZE_MATCH(xGEQueryVersionReq);
@ -77,22 +78,20 @@ ProcGEQueryVersion(ClientPtr client)
pGEClient->major_version = stuff->majorVersion; pGEClient->major_version = stuff->majorVersion;
pGEClient->minor_version = stuff->minorVersion; pGEClient->minor_version = stuff->minorVersion;
if (client->swapped) if (client->swapped) {
{
swaps(&rep.sequenceNumber); swaps(&rep.sequenceNumber);
swapl(&rep.length); swapl(&rep.length);
swaps(&rep.majorVersion); swaps(&rep.majorVersion);
swaps(&rep.minorVersion); swaps(&rep.minorVersion);
} }
WriteToClient(client, sizeof(xGEQueryVersionReply), (char*)&rep); WriteToClient(client, sizeof(xGEQueryVersionReply), (char *) &rep);
return Success; return Success;
} }
int (*ProcGEVector[GENumberRequests])(ClientPtr) = { int (*ProcGEVector[GENumberRequests]) (ClientPtr) = {
/* Version 1.0 */ /* Version 1.0 */
ProcGEQueryVersion ProcGEQueryVersion};
};
/************************************************************/ /************************************************************/
/* swapped request handlers */ /* swapped request handlers */
@ -106,14 +105,12 @@ SProcGEQueryVersion(ClientPtr client)
REQUEST_SIZE_MATCH(xGEQueryVersionReq); REQUEST_SIZE_MATCH(xGEQueryVersionReq);
swaps(&stuff->majorVersion); swaps(&stuff->majorVersion);
swaps(&stuff->minorVersion); swaps(&stuff->minorVersion);
return(*ProcGEVector[stuff->ReqType])(client); return (*ProcGEVector[stuff->ReqType]) (client);
} }
int (*SProcGEVector[GENumberRequests])(ClientPtr) = { int (*SProcGEVector[GENumberRequests]) (ClientPtr) = {
/* Version 1.0 */ /* Version 1.0 */
SProcGEQueryVersion SProcGEQueryVersion};
};
/************************************************************/ /************************************************************/
/* callbacks */ /* callbacks */
@ -124,6 +121,7 @@ static int
ProcGEDispatch(ClientPtr client) ProcGEDispatch(ClientPtr client)
{ {
GEClientInfoPtr pGEClient = GEGetClient(client); GEClientInfoPtr pGEClient = GEGetClient(client);
REQUEST(xGEReq); REQUEST(xGEReq);
if (pGEClient->major_version >= NUM_VERSION_REQUESTS) if (pGEClient->major_version >= NUM_VERSION_REQUESTS)
@ -131,7 +129,7 @@ ProcGEDispatch(ClientPtr client)
if (stuff->ReqType > version_requests[pGEClient->major_version]) if (stuff->ReqType > version_requests[pGEClient->major_version])
return BadRequest; return BadRequest;
return (ProcGEVector[stuff->ReqType])(client); return (ProcGEVector[stuff->ReqType]) (client);
} }
/* dispatch swapped requests */ /* dispatch swapped requests */
@ -141,7 +139,7 @@ SProcGEDispatch(ClientPtr client)
REQUEST(xGEReq); REQUEST(xGEReq);
if (stuff->ReqType >= GENumberRequests) if (stuff->ReqType >= GENumberRequests)
return BadRequest; return BadRequest;
return (*SProcGEVector[stuff->ReqType])(client); return (*SProcGEVector[stuff->ReqType]) (client);
} }
/** /**
@ -151,9 +149,7 @@ SProcGEDispatch(ClientPtr client)
* used in the furture for versioning support. * used in the furture for versioning support.
*/ */
static void static void
GEClientCallback(CallbackListPtr *list, GEClientCallback(CallbackListPtr *list, pointer closure, pointer data)
pointer closure,
pointer data)
{ {
NewClientInfoRec *clientinfo = (NewClientInfoRec *) data; NewClientInfoRec *clientinfo = (NewClientInfoRec *) data;
ClientPtr pClient = clientinfo->client; ClientPtr pClient = clientinfo->client;
@ -165,7 +161,7 @@ GEClientCallback(CallbackListPtr *list,
/* Reset extension. Called on server shutdown. */ /* Reset extension. Called on server shutdown. */
static void static void
GEResetProc(ExtensionEntry *extEntry) GEResetProc(ExtensionEntry * extEntry)
{ {
DeleteCallback(&ClientStateCallback, GEClientCallback, 0); DeleteCallback(&ClientStateCallback, GEClientCallback, 0);
EventSwapVector[GenericEvent] = NotImplemented; EventSwapVector[GenericEvent] = NotImplemented;
@ -179,13 +175,12 @@ GEResetProc(ExtensionEntry *extEntry)
* work. * work.
*/ */
static void static void
SGEGenericEvent(xEvent* from, xEvent* to) SGEGenericEvent(xEvent *from, xEvent *to)
{ {
xGenericEvent* gefrom = (xGenericEvent*)from; xGenericEvent *gefrom = (xGenericEvent *) from;
xGenericEvent* geto = (xGenericEvent*)to; xGenericEvent *geto = (xGenericEvent *) to;
if ((gefrom->extension & 0x7f) > MAXEXTENSIONS) if ((gefrom->extension & 0x7f) > MAXEXTENSIONS) {
{
ErrorF("GE: Invalid extension offset for event.\n"); ErrorF("GE: Invalid extension offset for event.\n");
return; return;
} }
@ -203,23 +198,23 @@ GEExtensionInit(void)
{ {
ExtensionEntry *extEntry; ExtensionEntry *extEntry;
if (!dixRegisterPrivateKey(&GEClientPrivateKeyRec, PRIVATE_CLIENT, sizeof(GEClientInfoRec))) if (!dixRegisterPrivateKey
(&GEClientPrivateKeyRec, PRIVATE_CLIENT, sizeof(GEClientInfoRec)))
FatalError("GEExtensionInit: GE private request failed.\n"); FatalError("GEExtensionInit: GE private request failed.\n");
if(!AddCallback(&ClientStateCallback, GEClientCallback, 0)) if (!AddCallback(&ClientStateCallback, GEClientCallback, 0)) {
{
FatalError("GEExtensionInit: register client callback failed.\n"); FatalError("GEExtensionInit: register client callback failed.\n");
} }
if((extEntry = AddExtension(GE_NAME, if ((extEntry = AddExtension(GE_NAME,
0, GENumberErrors, 0, GENumberErrors,
ProcGEDispatch, SProcGEDispatch, ProcGEDispatch, SProcGEDispatch,
GEResetProc, StandardMinorOpcode)) != 0) GEResetProc, StandardMinorOpcode)) != 0) {
{
memset(GEExtensions, 0, sizeof(GEExtensions)); memset(GEExtensions, 0, sizeof(GEExtensions));
EventSwapVector[GenericEvent] = (EventSwapPtr) SGEGenericEvent; EventSwapVector[GenericEvent] = (EventSwapPtr) SGEGenericEvent;
} else { }
else {
FatalError("GEInit: AddExtensions failed.\n"); FatalError("GEInit: AddExtensions failed.\n");
} }
@ -238,7 +233,7 @@ GEExtensionInit(void)
*/ */
void void
GERegisterExtension(int extension, GERegisterExtension(int extension,
void (*ev_swap)(xGenericEvent* from, xGenericEvent* to)) void (*ev_swap) (xGenericEvent *from, xGenericEvent *to))
{ {
if (EXT_MASK(extension) >= MAXEXTENSIONS) if (EXT_MASK(extension) >= MAXEXTENSIONS)
FatalError("GE: extension > MAXEXTENSIONS. This should not happen.\n"); FatalError("GE: extension > MAXEXTENSIONS. This should not happen.\n");
@ -247,15 +242,13 @@ GERegisterExtension(int extension,
GEExtensions[EXT_MASK(extension)].evswap = ev_swap; GEExtensions[EXT_MASK(extension)].evswap = ev_swap;
} }
/* Sets type and extension field for a generic event. This is just an /* Sets type and extension field for a generic event. This is just an
* auxiliary function, extensions could do it manually too. * auxiliary function, extensions could do it manually too.
*/ */
void void
GEInitEvent(xGenericEvent* ev, int extension) GEInitEvent(xGenericEvent *ev, int extension)
{ {
ev->type = GenericEvent; ev->type = GenericEvent;
ev->extension = extension; ev->extension = extension;
ev->length = 0; ev->length = 0;
} }

View File

@ -37,10 +37,9 @@ from the author.
/** Struct to keep information about registered extensions */ /** Struct to keep information about registered extensions */
typedef struct _GEExtension { typedef struct _GEExtension {
/** Event swapping routine */ /** Event swapping routine */
void (*evswap)(xGenericEvent* from, xGenericEvent* to); void (*evswap) (xGenericEvent *from, xGenericEvent *to);
} GEExtension, *GEExtensionPtr; } GEExtension, *GEExtensionPtr;
/* All registered extensions and their handling functions. */ /* All registered extensions and their handling functions. */
extern _X_EXPORT GEExtension GEExtensions[MAXEXTENSIONS]; extern _X_EXPORT GEExtension GEExtensions[MAXEXTENSIONS];
@ -70,13 +69,14 @@ extern _X_EXPORT GEExtension GEExtensions[MAXEXTENSIONS];
GEEXT(ev) == (ext) && \ GEEXT(ev) == (ext) && \
GEV(ev)->evtype == (ev_type)) GEV(ev)->evtype == (ev_type))
/* Interface for other extensions */ /* Interface for other extensions */
extern _X_EXPORT void GERegisterExtension( extern _X_EXPORT void GERegisterExtension(int extension,
int extension, void (*ev_dispatch) (xGenericEvent
void (*ev_dispatch)(xGenericEvent* from, xGenericEvent* to)); *from,
xGenericEvent
*to));
extern _X_EXPORT void GEInitEvent(xGenericEvent* ev, int extension); extern _X_EXPORT void GEInitEvent(xGenericEvent *ev, int extension);
extern _X_EXPORT void GEExtensionInit(void); extern _X_EXPORT void GEExtensionInit(void);

View File

@ -38,6 +38,7 @@
#include <X11/extensions/geproto.h> #include <X11/extensions/geproto.h>
extern _X_EXPORT DevPrivateKeyRec GEClientPrivateKeyRec; extern _X_EXPORT DevPrivateKeyRec GEClientPrivateKeyRec;
#define GEClientPrivateKey (&GEClientPrivateKeyRec) #define GEClientPrivateKey (&GEClientPrivateKeyRec)
typedef struct _GEClientInfo { typedef struct _GEClientInfo {
@ -47,7 +48,7 @@ typedef struct _GEClientInfo {
#define GEGetClient(pClient) ((GEClientInfoPtr)(dixLookupPrivate(&((pClient)->devPrivates), GEClientPrivateKey))) #define GEGetClient(pClient) ((GEClientInfoPtr)(dixLookupPrivate(&((pClient)->devPrivates), GEClientPrivateKey)))
extern _X_EXPORT int (*ProcGEVector[/*GENumRequests*/])(ClientPtr); extern _X_EXPORT int (*ProcGEVector[ /*GENumRequests */ ]) (ClientPtr);
extern _X_EXPORT int (*SProcGEVector[/*GENumRequests*/])(ClientPtr); extern _X_EXPORT int (*SProcGEVector[ /*GENumRequests */ ]) (ClientPtr);
#endif /* _GEINT_H_ */ #endif /* _GEINT_H_ */

View File

@ -64,8 +64,7 @@ Equipment Corporation.
#ifdef GLXPROXY #ifdef GLXPROXY
extern VisualPtr glxMatchVisual(ScreenPtr pScreen, extern VisualPtr glxMatchVisual(ScreenPtr pScreen,
VisualPtr pVisual, VisualPtr pVisual, ScreenPtr pMatchScreen);
ScreenPtr pMatchScreen);
#endif #endif
/* /*
@ -76,7 +75,7 @@ int PanoramiXPixWidth = 0;
int PanoramiXPixHeight = 0; int PanoramiXPixHeight = 0;
int PanoramiXNumScreens = 0; int PanoramiXNumScreens = 0;
static RegionRec PanoramiXScreenRegion = {{0, 0, 0, 0}, NULL}; static RegionRec PanoramiXScreenRegion = { {0, 0, 0, 0}, NULL };
static int PanoramiXNumDepths; static int PanoramiXNumDepths;
static DepthPtr PanoramiXDepths; static DepthPtr PanoramiXDepths;
@ -99,7 +98,7 @@ XineramaVisualsEqualProcPtr XineramaVisualsEqualPtr = &VisualsEqual;
static int panoramiXGeneration; static int panoramiXGeneration;
static int ProcPanoramiXDispatch(ClientPtr client); static int ProcPanoramiXDispatch(ClientPtr client);
static void PanoramiXResetProc(ExtensionEntry*); static void PanoramiXResetProc(ExtensionEntry *);
/* /*
* External references for functions and data variables * External references for functions and data variables
@ -107,11 +106,14 @@ static void PanoramiXResetProc(ExtensionEntry*);
#include "panoramiXh.h" #include "panoramiXh.h"
int (* SavedProcVector[256]) (ClientPtr client) = { NULL, }; int (*SavedProcVector[256]) (ClientPtr client) = {
NULL,};
static DevPrivateKeyRec PanoramiXGCKeyRec; static DevPrivateKeyRec PanoramiXGCKeyRec;
#define PanoramiXGCKey (&PanoramiXGCKeyRec) #define PanoramiXGCKey (&PanoramiXGCKeyRec)
static DevPrivateKeyRec PanoramiXScreenKeyRec; static DevPrivateKeyRec PanoramiXScreenKeyRec;
#define PanoramiXScreenKey (&PanoramiXScreenKeyRec) #define PanoramiXScreenKey (&PanoramiXScreenKeyRec)
typedef struct { typedef struct {
@ -147,9 +149,8 @@ static GCFuncs XineramaGCFuncs = {
pGCPriv->wrapFuncs = (pGC)->funcs;\ pGCPriv->wrapFuncs = (pGC)->funcs;\
(pGC)->funcs = &XineramaGCFuncs; (pGC)->funcs = &XineramaGCFuncs;
static Bool static Bool
XineramaCloseScreen (int i, ScreenPtr pScreen) XineramaCloseScreen(int i, ScreenPtr pScreen)
{ {
PanoramiXScreenPtr pScreenPriv = (PanoramiXScreenPtr) PanoramiXScreenPtr pScreenPriv = (PanoramiXScreenPtr)
dixLookupPrivate(&pScreen->devPrivates, PanoramiXScreenKey); dixLookupPrivate(&pScreen->devPrivates, PanoramiXScreenKey);
@ -174,7 +175,7 @@ XineramaCreateGC(GCPtr pGC)
Bool ret; Bool ret;
pScreen->CreateGC = pScreenPriv->CreateGC; pScreen->CreateGC = pScreenPriv->CreateGC;
if((ret = (*pScreen->CreateGC)(pGC))) { if ((ret = (*pScreen->CreateGC) (pGC))) {
PanoramiXGCPtr pGCPriv = (PanoramiXGCPtr) PanoramiXGCPtr pGCPriv = (PanoramiXGCPtr)
dixLookupPrivate(&pGC->devPrivates, PanoramiXGCKey); dixLookupPrivate(&pGC->devPrivates, PanoramiXGCKey);
@ -192,139 +193,129 @@ XineramaCreateGC(GCPtr pGC)
} }
static void static void
XineramaValidateGC( XineramaValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDraw)
GCPtr pGC, {
unsigned long changes, Xinerama_GC_FUNC_PROLOGUE(pGC);
DrawablePtr pDraw
){
Xinerama_GC_FUNC_PROLOGUE (pGC);
if((pDraw->type == DRAWABLE_WINDOW) && !(((WindowPtr)pDraw)->parent)) { if ((pDraw->type == DRAWABLE_WINDOW) && !(((WindowPtr) pDraw)->parent)) {
/* the root window */ /* the root window */
int x_off = pGC->pScreen->x; int x_off = pGC->pScreen->x;
int y_off = pGC->pScreen->y; int y_off = pGC->pScreen->y;
int new_val; int new_val;
new_val = pGCPriv->clipOrg.x - x_off; new_val = pGCPriv->clipOrg.x - x_off;
if(pGC->clipOrg.x != new_val) { if (pGC->clipOrg.x != new_val) {
pGC->clipOrg.x = new_val; pGC->clipOrg.x = new_val;
changes |= GCClipXOrigin; changes |= GCClipXOrigin;
} }
new_val = pGCPriv->clipOrg.y - y_off; new_val = pGCPriv->clipOrg.y - y_off;
if(pGC->clipOrg.y != new_val) { if (pGC->clipOrg.y != new_val) {
pGC->clipOrg.y = new_val; pGC->clipOrg.y = new_val;
changes |= GCClipYOrigin; changes |= GCClipYOrigin;
} }
new_val = pGCPriv->patOrg.x - x_off; new_val = pGCPriv->patOrg.x - x_off;
if(pGC->patOrg.x != new_val) { if (pGC->patOrg.x != new_val) {
pGC->patOrg.x = new_val; pGC->patOrg.x = new_val;
changes |= GCTileStipXOrigin; changes |= GCTileStipXOrigin;
} }
new_val = pGCPriv->patOrg.y - y_off; new_val = pGCPriv->patOrg.y - y_off;
if(pGC->patOrg.y != new_val) { if (pGC->patOrg.y != new_val) {
pGC->patOrg.y = new_val; pGC->patOrg.y = new_val;
changes |= GCTileStipYOrigin; changes |= GCTileStipYOrigin;
} }
} else { }
if(pGC->clipOrg.x != pGCPriv->clipOrg.x) { else {
if (pGC->clipOrg.x != pGCPriv->clipOrg.x) {
pGC->clipOrg.x = pGCPriv->clipOrg.x; pGC->clipOrg.x = pGCPriv->clipOrg.x;
changes |= GCClipXOrigin; changes |= GCClipXOrigin;
} }
if(pGC->clipOrg.y != pGCPriv->clipOrg.y) { if (pGC->clipOrg.y != pGCPriv->clipOrg.y) {
pGC->clipOrg.y = pGCPriv->clipOrg.y; pGC->clipOrg.y = pGCPriv->clipOrg.y;
changes |= GCClipYOrigin; changes |= GCClipYOrigin;
} }
if(pGC->patOrg.x != pGCPriv->patOrg.x) { if (pGC->patOrg.x != pGCPriv->patOrg.x) {
pGC->patOrg.x = pGCPriv->patOrg.x; pGC->patOrg.x = pGCPriv->patOrg.x;
changes |= GCTileStipXOrigin; changes |= GCTileStipXOrigin;
} }
if(pGC->patOrg.y != pGCPriv->patOrg.y) { if (pGC->patOrg.y != pGCPriv->patOrg.y) {
pGC->patOrg.y = pGCPriv->patOrg.y; pGC->patOrg.y = pGCPriv->patOrg.y;
changes |= GCTileStipYOrigin; changes |= GCTileStipYOrigin;
} }
} }
(*pGC->funcs->ValidateGC)(pGC, changes, pDraw); (*pGC->funcs->ValidateGC) (pGC, changes, pDraw);
Xinerama_GC_FUNC_EPILOGUE (pGC); Xinerama_GC_FUNC_EPILOGUE(pGC);
} }
static void static void
XineramaDestroyGC(GCPtr pGC) XineramaDestroyGC(GCPtr pGC)
{ {
Xinerama_GC_FUNC_PROLOGUE (pGC); Xinerama_GC_FUNC_PROLOGUE(pGC);
(*pGC->funcs->DestroyGC)(pGC); (*pGC->funcs->DestroyGC) (pGC);
Xinerama_GC_FUNC_EPILOGUE (pGC); Xinerama_GC_FUNC_EPILOGUE(pGC);
} }
static void static void
XineramaChangeGC ( XineramaChangeGC(GCPtr pGC, unsigned long mask)
GCPtr pGC, {
unsigned long mask Xinerama_GC_FUNC_PROLOGUE(pGC);
){
Xinerama_GC_FUNC_PROLOGUE (pGC);
if(mask & GCTileStipXOrigin) if (mask & GCTileStipXOrigin)
pGCPriv->patOrg.x = pGC->patOrg.x; pGCPriv->patOrg.x = pGC->patOrg.x;
if(mask & GCTileStipYOrigin) if (mask & GCTileStipYOrigin)
pGCPriv->patOrg.y = pGC->patOrg.y; pGCPriv->patOrg.y = pGC->patOrg.y;
if(mask & GCClipXOrigin) if (mask & GCClipXOrigin)
pGCPriv->clipOrg.x = pGC->clipOrg.x; pGCPriv->clipOrg.x = pGC->clipOrg.x;
if(mask & GCClipYOrigin) if (mask & GCClipYOrigin)
pGCPriv->clipOrg.y = pGC->clipOrg.y; pGCPriv->clipOrg.y = pGC->clipOrg.y;
(*pGC->funcs->ChangeGC) (pGC, mask); (*pGC->funcs->ChangeGC) (pGC, mask);
Xinerama_GC_FUNC_EPILOGUE (pGC); Xinerama_GC_FUNC_EPILOGUE(pGC);
} }
static void static void
XineramaCopyGC ( XineramaCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst)
GCPtr pGCSrc, {
unsigned long mask,
GCPtr pGCDst
){
PanoramiXGCPtr pSrcPriv = (PanoramiXGCPtr) PanoramiXGCPtr pSrcPriv = (PanoramiXGCPtr)
dixLookupPrivate(&pGCSrc->devPrivates, PanoramiXGCKey); dixLookupPrivate(&pGCSrc->devPrivates, PanoramiXGCKey);
Xinerama_GC_FUNC_PROLOGUE (pGCDst);
if(mask & GCTileStipXOrigin) Xinerama_GC_FUNC_PROLOGUE(pGCDst);
if (mask & GCTileStipXOrigin)
pGCPriv->patOrg.x = pSrcPriv->patOrg.x; pGCPriv->patOrg.x = pSrcPriv->patOrg.x;
if(mask & GCTileStipYOrigin) if (mask & GCTileStipYOrigin)
pGCPriv->patOrg.y = pSrcPriv->patOrg.y; pGCPriv->patOrg.y = pSrcPriv->patOrg.y;
if(mask & GCClipXOrigin) if (mask & GCClipXOrigin)
pGCPriv->clipOrg.x = pSrcPriv->clipOrg.x; pGCPriv->clipOrg.x = pSrcPriv->clipOrg.x;
if(mask & GCClipYOrigin) if (mask & GCClipYOrigin)
pGCPriv->clipOrg.y = pSrcPriv->clipOrg.y; pGCPriv->clipOrg.y = pSrcPriv->clipOrg.y;
(*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst); (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
Xinerama_GC_FUNC_EPILOGUE (pGCDst); Xinerama_GC_FUNC_EPILOGUE(pGCDst);
} }
static void static void
XineramaChangeClip ( XineramaChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects)
GCPtr pGC, {
int type, Xinerama_GC_FUNC_PROLOGUE(pGC);
pointer pvalue,
int nrects
){
Xinerama_GC_FUNC_PROLOGUE (pGC);
(*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects); (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
Xinerama_GC_FUNC_EPILOGUE (pGC); Xinerama_GC_FUNC_EPILOGUE(pGC);
} }
static void static void
XineramaCopyClip(GCPtr pgcDst, GCPtr pgcSrc) XineramaCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
{ {
Xinerama_GC_FUNC_PROLOGUE (pgcDst); Xinerama_GC_FUNC_PROLOGUE(pgcDst);
(* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc); (*pgcDst->funcs->CopyClip) (pgcDst, pgcSrc);
Xinerama_GC_FUNC_EPILOGUE (pgcDst); Xinerama_GC_FUNC_EPILOGUE(pgcDst);
} }
static void static void
XineramaDestroyClip(GCPtr pGC) XineramaDestroyClip(GCPtr pGC)
{ {
Xinerama_GC_FUNC_PROLOGUE (pGC); Xinerama_GC_FUNC_PROLOGUE(pGC);
(* pGC->funcs->DestroyClip)(pGC); (*pGC->funcs->DestroyClip) (pGC);
Xinerama_GC_FUNC_EPILOGUE (pGC); Xinerama_GC_FUNC_EPILOGUE(pGC);
} }
int int
@ -342,8 +333,8 @@ typedef struct {
static Bool static Bool
XineramaFindIDByScrnum(pointer resource, XID id, pointer privdata) XineramaFindIDByScrnum(pointer resource, XID id, pointer privdata)
{ {
PanoramiXRes *res = (PanoramiXRes*)resource; PanoramiXRes *res = (PanoramiXRes *) resource;
PanoramiXSearchData *data = (PanoramiXSearchData*)privdata; PanoramiXSearchData *data = (PanoramiXSearchData *) privdata;
return res->info[data->screen].id == data->id; return res->info[data->screen].id == data->id;
} }
@ -354,7 +345,7 @@ PanoramiXFindIDByScrnum(RESTYPE type, XID id, int screen)
PanoramiXSearchData data; PanoramiXSearchData data;
pointer val; pointer val;
if(!screen) { if (!screen) {
dixLookupResourceByType(&val, id, type, serverClient, DixReadAccess); dixLookupResourceByType(&val, id, type, serverClient, DixReadAccess);
return val; return val;
} }
@ -367,18 +358,18 @@ PanoramiXFindIDByScrnum(RESTYPE type, XID id, int screen)
} }
typedef struct _connect_callback_list { typedef struct _connect_callback_list {
void (*func)(void); void (*func) (void);
struct _connect_callback_list *next; struct _connect_callback_list *next;
} XineramaConnectionCallbackList; } XineramaConnectionCallbackList;
static XineramaConnectionCallbackList *ConnectionCallbackList = NULL; static XineramaConnectionCallbackList *ConnectionCallbackList = NULL;
Bool Bool
XineramaRegisterConnectionBlockCallback(void (*func)(void)) XineramaRegisterConnectionBlockCallback(void (*func) (void))
{ {
XineramaConnectionCallbackList *newlist; XineramaConnectionCallbackList *newlist;
if(!(newlist = malloc(sizeof(XineramaConnectionCallbackList)))) if (!(newlist = malloc(sizeof(XineramaConnectionCallbackList))))
return FALSE; return FALSE;
newlist->next = ConnectionCallbackList; newlist->next = ConnectionCallbackList;
@ -388,7 +379,8 @@ XineramaRegisterConnectionBlockCallback(void (*func)(void))
return TRUE; return TRUE;
} }
static void XineramaInitData(void) static void
XineramaInitData(void)
{ {
int i, w, h; int i, w, h;
@ -411,10 +403,12 @@ static void XineramaInitData(void)
} }
PanoramiXPixWidth = screenInfo.screens[0]->x + screenInfo.screens[0]->width; PanoramiXPixWidth = screenInfo.screens[0]->x + screenInfo.screens[0]->width;
PanoramiXPixHeight = screenInfo.screens[0]->y + screenInfo.screens[0]->height; PanoramiXPixHeight =
screenInfo.screens[0]->y + screenInfo.screens[0]->height;
FOR_NSCREENS_FORWARD_SKIP(i) { FOR_NSCREENS_FORWARD_SKIP(i) {
ScreenPtr pScreen = screenInfo.screens[i]; ScreenPtr pScreen = screenInfo.screens[i];
w = pScreen->x + pScreen->width; w = pScreen->x + pScreen->width;
h = pScreen->y + pScreen->height; h = pScreen->y + pScreen->height;
@ -425,7 +419,8 @@ static void XineramaInitData(void)
} }
} }
void XineramaReinitData(void) void
XineramaReinitData(void)
{ {
RegionUninit(&PanoramiXScreenRegion); RegionUninit(&PanoramiXScreenRegion);
XineramaInitData(); XineramaInitData();
@ -438,7 +433,8 @@ void XineramaReinitData(void)
* Initialize global variables. * Initialize global variables.
*/ */
void PanoramiXExtensionInit(int argc, char *argv[]) void
PanoramiXExtensionInit(int argc, char *argv[])
{ {
int i; int i;
Bool success = FALSE; Bool success = FALSE;
@ -454,7 +450,8 @@ void PanoramiXExtensionInit(int argc, char *argv[])
return; return;
} }
if (!dixRegisterPrivateKey(&PanoramiXGCKeyRec, PRIVATE_GC, sizeof(PanoramiXGCRec))) { if (!dixRegisterPrivateKey
(&PanoramiXGCKeyRec, PRIVATE_GC, sizeof(PanoramiXGCRec))) {
noPanoramiXExtension = TRUE; noPanoramiXExtension = TRUE;
return; return;
} }
@ -466,7 +463,7 @@ void PanoramiXExtensionInit(int argc, char *argv[])
} }
while (panoramiXGeneration != serverGeneration) { while (panoramiXGeneration != serverGeneration) {
extEntry = AddExtension(PANORAMIX_PROTOCOL_NAME, 0,0, extEntry = AddExtension(PANORAMIX_PROTOCOL_NAME, 0, 0,
ProcPanoramiXDispatch, ProcPanoramiXDispatch,
SProcPanoramiXDispatch, PanoramiXResetProc, SProcPanoramiXDispatch, PanoramiXResetProc,
StandardMinorOpcode); StandardMinorOpcode);
@ -483,7 +480,7 @@ void PanoramiXExtensionInit(int argc, char *argv[])
pScreenPriv = malloc(sizeof(PanoramiXScreenRec)); pScreenPriv = malloc(sizeof(PanoramiXScreenRec));
dixSetPrivate(&pScreen->devPrivates, PanoramiXScreenKey, dixSetPrivate(&pScreen->devPrivates, PanoramiXScreenKey,
pScreenPriv); pScreenPriv);
if(!pScreenPriv) { if (!pScreenPriv) {
noPanoramiXExtension = TRUE; noPanoramiXExtension = TRUE;
return; return;
} }
@ -504,8 +501,7 @@ void PanoramiXExtensionInit(int argc, char *argv[])
"XineramaPixmap"); "XineramaPixmap");
if (XRT_PIXMAP) if (XRT_PIXMAP)
XRT_PIXMAP |= XRC_DRAWABLE; XRT_PIXMAP |= XRC_DRAWABLE;
XRT_GC = CreateNewResourceType(XineramaDeleteResource, XRT_GC = CreateNewResourceType(XineramaDeleteResource, "XineramaGC");
"XineramaGC");
XRT_COLORMAP = CreateNewResourceType(XineramaDeleteResource, XRT_COLORMAP = CreateNewResourceType(XineramaDeleteResource,
"XineramaColormap"); "XineramaColormap");
@ -531,7 +527,7 @@ void PanoramiXExtensionInit(int argc, char *argv[])
* Put our processes into the ProcVector * Put our processes into the ProcVector
*/ */
for (i = 256; i--; ) for (i = 256; i--;)
SavedProcVector[i] = ProcVector[i]; SavedProcVector[i] = ProcVector[i];
ProcVector[X_CreateWindow] = PanoramiXCreateWindow; ProcVector[X_CreateWindow] = PanoramiXCreateWindow;
@ -586,19 +582,20 @@ void PanoramiXExtensionInit(int argc, char *argv[])
ProcVector[X_StoreColors] = PanoramiXStoreColors; ProcVector[X_StoreColors] = PanoramiXStoreColors;
ProcVector[X_StoreNamedColor] = PanoramiXStoreNamedColor; ProcVector[X_StoreNamedColor] = PanoramiXStoreNamedColor;
PanoramiXRenderInit (); PanoramiXRenderInit();
#ifdef XFIXES #ifdef XFIXES
PanoramiXFixesInit (); PanoramiXFixesInit();
#endif #endif
#ifdef COMPOSITE #ifdef COMPOSITE
PanoramiXCompositeInit (); PanoramiXCompositeInit();
#endif #endif
} }
extern Bool CreateConnectionBlock(void); extern Bool CreateConnectionBlock(void);
Bool PanoramiXCreateConnectionBlock(void) Bool
PanoramiXCreateConnectionBlock(void)
{ {
int i, j, length; int i, j, length;
Bool disableBackingStore = FALSE; Bool disableBackingStore = FALSE;
@ -614,18 +611,19 @@ Bool PanoramiXCreateConnectionBlock(void)
* Do normal CreateConnectionBlock but faking it for only one screen * Do normal CreateConnectionBlock but faking it for only one screen
*/ */
if(!PanoramiXNumDepths) { if (!PanoramiXNumDepths) {
ErrorF("Xinerama error: No common visuals\n"); ErrorF("Xinerama error: No common visuals\n");
return FALSE; return FALSE;
} }
for(i = 1; i < screenInfo.numScreens; i++) { for (i = 1; i < screenInfo.numScreens; i++) {
pScreen = screenInfo.screens[i]; pScreen = screenInfo.screens[i];
if(pScreen->rootDepth != screenInfo.screens[0]->rootDepth) { if (pScreen->rootDepth != screenInfo.screens[0]->rootDepth) {
ErrorF("Xinerama error: Root window depths differ\n"); ErrorF("Xinerama error: Root window depths differ\n");
return FALSE; return FALSE;
} }
if(pScreen->backingStoreSupport != screenInfo.screens[0]->backingStoreSupport) if (pScreen->backingStoreSupport !=
screenInfo.screens[0]->backingStoreSupport)
disableBackingStore = TRUE; disableBackingStore = TRUE;
} }
@ -656,15 +654,13 @@ Bool PanoramiXCreateConnectionBlock(void)
depth->depth = PanoramiXDepths[i].depth; depth->depth = PanoramiXDepths[i].depth;
depth->nVisuals = PanoramiXDepths[i].numVids; depth->nVisuals = PanoramiXDepths[i].numVids;
length += sizeof(xDepth); length += sizeof(xDepth);
visual = (xVisualType *)(ConnectionInfo + length); visual = (xVisualType *) (ConnectionInfo + length);
for (j = 0; j < depth->nVisuals; j++, visual++) { for (j = 0; j < depth->nVisuals; j++, visual++) {
visual->visualID = PanoramiXDepths[i].vids[j]; visual->visualID = PanoramiXDepths[i].vids[j];
for (pVisual = PanoramiXVisuals; for (pVisual = PanoramiXVisuals;
pVisual->vid != visual->visualID; pVisual->vid != visual->visualID; pVisual++);
pVisual++)
;
visual->class = pVisual->class; visual->class = pVisual->class;
visual->bitsPerRGB = pVisual->bitsPerRGBValue; visual->bitsPerRGB = pVisual->bitsPerRGBValue;
@ -698,11 +694,11 @@ Bool PanoramiXCreateConnectionBlock(void)
root->mmWidth *= width_mult; root->mmWidth *= width_mult;
root->mmHeight *= height_mult; root->mmHeight *= height_mult;
while(ConnectionCallbackList) { while (ConnectionCallbackList) {
pointer tmp; pointer tmp;
tmp = (pointer)ConnectionCallbackList; tmp = (pointer) ConnectionCallbackList;
(*ConnectionCallbackList->func)(); (*ConnectionCallbackList->func) ();
ConnectionCallbackList = ConnectionCallbackList->next; ConnectionCallbackList = ConnectionCallbackList->next;
free(tmp); free(tmp);
} }
@ -760,7 +756,7 @@ PanoramiXMaybeAddDepth(DepthPtr pDepth)
PanoramiXDepths[j].depth = pDepth->depth; PanoramiXDepths[j].depth = pDepth->depth;
PanoramiXDepths[j].numVids = 0; PanoramiXDepths[j].numVids = 0;
/* XXX suboptimal, should grow these dynamically */ /* XXX suboptimal, should grow these dynamically */
if(pDepth->numVids) if (pDepth->numVids)
PanoramiXDepths[j].vids = malloc(sizeof(VisualID) * pDepth->numVids); PanoramiXDepths[j].vids = malloc(sizeof(VisualID) * pDepth->numVids);
else else
PanoramiXDepths[j].vids = NULL; PanoramiXDepths[j].vids = NULL;
@ -780,7 +776,7 @@ PanoramiXMaybeAddVisual(VisualPtr pVisual)
for (k = 0; k < pScreen->numVisuals; k++) { for (k = 0; k < pScreen->numVisuals; k++) {
VisualPtr candidate = &pScreen->visuals[k]; VisualPtr candidate = &pScreen->visuals[k];
if ((*XineramaVisualsEqualPtr)(pVisual, pScreen, candidate) if ((*XineramaVisualsEqualPtr) (pVisual, pScreen, candidate)
#ifdef GLXPROXY #ifdef GLXPROXY
&& glxMatchVisual(screenInfo.screens[0], pVisual, pScreen) && glxMatchVisual(screenInfo.screens[0], pVisual, pScreen)
#endif #endif
@ -838,6 +834,7 @@ PanoramiXConsolidate(void)
FOR_NSCREENS(i) { FOR_NSCREENS(i) {
ScreenPtr pScreen = screenInfo.screens[i]; ScreenPtr pScreen = screenInfo.screens[i];
root->info[i].id = pScreen->root->drawable.id; root->info[i].id = pScreen->root->drawable.id;
root->u.win.class = InputOutput; root->u.win.class = InputOutput;
root->u.win.root = TRUE; root->u.win.root = TRUE;
@ -877,40 +874,39 @@ PanoramiXTranslateVisualID(int screen, VisualID orig)
for (i = 0; i < pOtherScreen->numVisuals; i++) { for (i = 0; i < pOtherScreen->numVisuals; i++) {
VisualPtr pOtherVisual = &pOtherScreen->visuals[i]; VisualPtr pOtherVisual = &pOtherScreen->visuals[i];
if ((*XineramaVisualsEqualPtr)(pVisual, pOtherScreen, pOtherVisual)) if ((*XineramaVisualsEqualPtr) (pVisual, pOtherScreen, pOtherVisual))
return pOtherVisual->vid; return pOtherVisual->vid;
} }
return 0; return 0;
} }
/* /*
* PanoramiXResetProc() * PanoramiXResetProc()
* Exit, deallocating as needed. * Exit, deallocating as needed.
*/ */
static void PanoramiXResetProc(ExtensionEntry* extEntry) static void
PanoramiXResetProc(ExtensionEntry * extEntry)
{ {
int i; int i;
PanoramiXRenderReset (); PanoramiXRenderReset();
#ifdef XFIXES #ifdef XFIXES
PanoramiXFixesReset (); PanoramiXFixesReset();
#endif #endif
screenInfo.numScreens = PanoramiXNumScreens; screenInfo.numScreens = PanoramiXNumScreens;
for (i = 256; i--; ) for (i = 256; i--;)
ProcVector[i] = SavedProcVector[i]; ProcVector[i] = SavedProcVector[i];
} }
int int
ProcPanoramiXQueryVersion (ClientPtr client) ProcPanoramiXQueryVersion(ClientPtr client)
{ {
/* REQUEST(xPanoramiXQueryVersionReq); */ /* REQUEST(xPanoramiXQueryVersionReq); */
xPanoramiXQueryVersionReply rep; xPanoramiXQueryVersionReply rep;
REQUEST_SIZE_MATCH (xPanoramiXQueryVersionReq); REQUEST_SIZE_MATCH(xPanoramiXQueryVersionReq);
rep.type = X_Reply; rep.type = X_Reply;
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
@ -922,7 +918,7 @@ ProcPanoramiXQueryVersion (ClientPtr client)
swaps(&rep.majorVersion); swaps(&rep.majorVersion);
swaps(&rep.minorVersion); swaps(&rep.minorVersion);
} }
WriteToClient(client, sizeof (xPanoramiXQueryVersionReply), (char *)&rep); WriteToClient(client, sizeof(xPanoramiXQueryVersionReply), (char *) &rep);
return Success; return Success;
} }
@ -949,7 +945,7 @@ ProcPanoramiXGetState(ClientPtr client)
swapl(&rep.length); swapl(&rep.length);
swapl(&rep.window); swapl(&rep.window);
} }
WriteToClient (client, sizeof (xPanoramiXGetStateReply), (char *) &rep); WriteToClient(client, sizeof(xPanoramiXGetStateReply), (char *) &rep);
return Success; return Success;
} }
@ -977,7 +973,7 @@ ProcPanoramiXGetScreenCount(ClientPtr client)
swapl(&rep.length); swapl(&rep.length);
swapl(&rep.window); swapl(&rep.window);
} }
WriteToClient (client, sizeof (xPanoramiXGetScreenCountReply), (char *) &rep); WriteToClient(client, sizeof(xPanoramiXGetScreenCountReply), (char *) &rep);
return Success; return Success;
} }
@ -1013,11 +1009,10 @@ ProcPanoramiXGetScreenSize(ClientPtr client)
swapl(&rep.window); swapl(&rep.window);
swapl(&rep.screen); swapl(&rep.screen);
} }
WriteToClient (client, sizeof (xPanoramiXGetScreenSizeReply), (char *) &rep); WriteToClient(client, sizeof(xPanoramiXGetScreenSizeReply), (char *) &rep);
return Success; return Success;
} }
int int
ProcXineramaIsActive(ClientPtr client) ProcXineramaIsActive(ClientPtr client)
{ {
@ -1043,11 +1038,10 @@ ProcXineramaIsActive(ClientPtr client)
swapl(&rep.length); swapl(&rep.length);
swapl(&rep.state); swapl(&rep.state);
} }
WriteToClient (client, sizeof (xXineramaIsActiveReply), (char *) &rep); WriteToClient(client, sizeof(xXineramaIsActiveReply), (char *) &rep);
return Success; return Success;
} }
int int
ProcXineramaQueryScreens(ClientPtr client) ProcXineramaQueryScreens(ClientPtr client)
{ {
@ -1065,9 +1059,9 @@ ProcXineramaQueryScreens(ClientPtr client)
swapl(&rep.length); swapl(&rep.length);
swapl(&rep.number); swapl(&rep.number);
} }
WriteToClient (client, sizeof (xXineramaQueryScreensReply), (char *) &rep); WriteToClient(client, sizeof(xXineramaQueryScreensReply), (char *) &rep);
if(!noPanoramiXExtension) { if (!noPanoramiXExtension) {
xXineramaScreenInfo scratch; xXineramaScreenInfo scratch;
int i; int i;
@ -1077,25 +1071,24 @@ ProcXineramaQueryScreens(ClientPtr client)
scratch.width = screenInfo.screens[i]->width; scratch.width = screenInfo.screens[i]->width;
scratch.height = screenInfo.screens[i]->height; scratch.height = screenInfo.screens[i]->height;
if(client->swapped) { if (client->swapped) {
swaps(&scratch.x_org); swaps(&scratch.x_org);
swaps(&scratch.y_org); swaps(&scratch.y_org);
swaps(&scratch.width); swaps(&scratch.width);
swaps(&scratch.height); swaps(&scratch.height);
} }
WriteToClient (client, sz_XineramaScreenInfo, (char *) &scratch); WriteToClient(client, sz_XineramaScreenInfo, (char *) &scratch);
} }
} }
return Success; return Success;
} }
static int static int
ProcPanoramiXDispatch (ClientPtr client) ProcPanoramiXDispatch(ClientPtr client)
{ REQUEST(xReq); {
switch (stuff->data) REQUEST(xReq);
{ switch (stuff->data) {
case X_PanoramiXQueryVersion: case X_PanoramiXQueryVersion:
return ProcPanoramiXQueryVersion(client); return ProcPanoramiXQueryVersion(client);
case X_PanoramiXGetState: case X_PanoramiXGetState:
@ -1112,7 +1105,6 @@ ProcPanoramiXDispatch (ClientPtr client)
return BadRequest; return BadRequest;
} }
#if X_BYTE_ORDER == X_LITTLE_ENDIAN #if X_BYTE_ORDER == X_LITTLE_ENDIAN
#define SHIFT_L(v,s) (v) << (s) #define SHIFT_L(v,s) (v) << (s)
#define SHIFT_R(v,s) (v) >> (s) #define SHIFT_R(v,s) (v) >> (s)
@ -1127,31 +1119,28 @@ CopyBits(char *dst, int shiftL, char *src, int bytes)
/* Just get it to work. Worry about speed later */ /* Just get it to work. Worry about speed later */
int shiftR = 8 - shiftL; int shiftR = 8 - shiftL;
while(bytes--) { while (bytes--) {
*dst |= SHIFT_L(*src, shiftL); *dst |= SHIFT_L(*src, shiftL);
*(dst + 1) |= SHIFT_R(*src, shiftR); *(dst + 1) |= SHIFT_R(*src, shiftR);
dst++; src++; dst++;
src++;
} }
} }
/* Caution. This doesn't support 2 and 4 bpp formats. We expect /* Caution. This doesn't support 2 and 4 bpp formats. We expect
1 bpp and planar data to be already cleared when presented 1 bpp and planar data to be already cleared when presented
to this function */ to this function */
void void
XineramaGetImageData( XineramaGetImageData(DrawablePtr *pDrawables,
DrawablePtr *pDrawables,
int left, int left,
int top, int top,
int width, int width,
int height, int height,
unsigned int format, unsigned int format,
unsigned long planemask, unsigned long planemask,
char *data, char *data, int pitch, Bool isRoot)
int pitch, {
Bool isRoot
){
RegionRec SrcRegion, ScreenRegion, GrabRegion; RegionRec SrcRegion, ScreenRegion, GrabRegion;
BoxRec SrcBox, *pbox; BoxRec SrcBox, *pbox;
int x, y, w, h, i, j, nbox, size, sizeNeeded, ScratchPitch, inOut, depth; int x, y, w, h, i, j, nbox, size, sizeNeeded, ScratchPitch, inOut, depth;
@ -1163,7 +1152,7 @@ XineramaGetImageData(
/* find box in logical screen space */ /* find box in logical screen space */
SrcBox.x1 = left; SrcBox.x1 = left;
SrcBox.y1 = top; SrcBox.y1 = top;
if(!isRoot) { if (!isRoot) {
SrcBox.x1 += pDraw->x + screenInfo.screens[0]->x; SrcBox.x1 += pDraw->x + screenInfo.screens[0]->x;
SrcBox.y1 += pDraw->y + screenInfo.screens[0]->y; SrcBox.y1 += pDraw->y + screenInfo.screens[0]->y;
} }
@ -1178,6 +1167,7 @@ XineramaGetImageData(
FOR_NSCREENS(i) { FOR_NSCREENS(i) {
BoxRec TheBox; BoxRec TheBox;
ScreenPtr pScreen; ScreenPtr pScreen;
pDraw = pDrawables[i]; pDraw = pDrawables[i];
pScreen = pDraw->pScreen; pScreen = pDraw->pScreen;
@ -1188,34 +1178,38 @@ XineramaGetImageData(
RegionInit(&ScreenRegion, &TheBox, 1); RegionInit(&ScreenRegion, &TheBox, 1);
inOut = RegionContainsRect(&ScreenRegion, &SrcBox); inOut = RegionContainsRect(&ScreenRegion, &SrcBox);
if(inOut == rgnPART) if (inOut == rgnPART)
RegionIntersect(&GrabRegion, &SrcRegion, &ScreenRegion); RegionIntersect(&GrabRegion, &SrcRegion, &ScreenRegion);
RegionUninit(&ScreenRegion); RegionUninit(&ScreenRegion);
if(inOut == rgnIN) { if (inOut == rgnIN) {
(*pScreen->GetImage)(pDraw, (*pScreen->GetImage) (pDraw,
SrcBox.x1 - pDraw->x - screenInfo.screens[i]->x, SrcBox.x1 - pDraw->x -
SrcBox.y1 - pDraw->y - screenInfo.screens[i]->y, screenInfo.screens[i]->x,
width, height, format, planemask, data); SrcBox.y1 - pDraw->y -
screenInfo.screens[i]->y, width, height,
format, planemask, data);
break; break;
} else if (inOut == rgnOUT) }
else if (inOut == rgnOUT)
continue; continue;
nbox = RegionNumRects(&GrabRegion); nbox = RegionNumRects(&GrabRegion);
if(nbox) { if (nbox) {
pbox = RegionRects(&GrabRegion); pbox = RegionRects(&GrabRegion);
while(nbox--) { while (nbox--) {
w = pbox->x2 - pbox->x1; w = pbox->x2 - pbox->x1;
h = pbox->y2 - pbox->y1; h = pbox->y2 - pbox->y1;
ScratchPitch = PixmapBytePad(w, depth); ScratchPitch = PixmapBytePad(w, depth);
sizeNeeded = ScratchPitch * h; sizeNeeded = ScratchPitch * h;
if(sizeNeeded > size) { if (sizeNeeded > size) {
char *tmpdata = ScratchMem; char *tmpdata = ScratchMem;
ScratchMem = realloc(ScratchMem, sizeNeeded); ScratchMem = realloc(ScratchMem, sizeNeeded);
if(ScratchMem) if (ScratchMem)
size = sizeNeeded; size = sizeNeeded;
else { else {
ScratchMem = tmpdata; ScratchMem = tmpdata;
@ -1226,12 +1220,12 @@ XineramaGetImageData(
x = pbox->x1 - pDraw->x - screenInfo.screens[i]->x; x = pbox->x1 - pDraw->x - screenInfo.screens[i]->x;
y = pbox->y1 - pDraw->y - screenInfo.screens[i]->y; y = pbox->y1 - pDraw->y - screenInfo.screens[i]->y;
(*pScreen->GetImage)(pDraw, x, y, w, h, (*pScreen->GetImage) (pDraw, x, y, w, h,
format, planemask, ScratchMem); format, planemask, ScratchMem);
/* copy the memory over */ /* copy the memory over */
if(depth == 1) { if (depth == 1) {
int k, shift, leftover, index, index2; int k, shift, leftover, index, index2;
x = pbox->x1 - SrcBox.x1; x = pbox->x1 - SrcBox.x1;
@ -1242,38 +1236,40 @@ XineramaGetImageData(
w >>= 3; w >>= 3;
/* clean up the edge */ /* clean up the edge */
if(leftover) { if (leftover) {
int mask = (1 << leftover) - 1; int mask = (1 << leftover) - 1;
for(j = h, k = w; j--; k += ScratchPitch)
for (j = h, k = w; j--; k += ScratchPitch)
ScratchMem[k] &= mask; ScratchMem[k] &= mask;
} }
for(j = 0, index = (pitch * y) + x, index2 = 0; j < h; for (j = 0, index = (pitch * y) + x, index2 = 0; j < h;
j++, index += pitch, index2 += ScratchPitch) j++, index += pitch, index2 += ScratchPitch) {
{ if (w) {
if(w) { if (!shift)
if(!shift)
memcpy(data + index, ScratchMem + index2, w); memcpy(data + index, ScratchMem + index2, w);
else else
CopyBits(data + index, shift, CopyBits(data + index, shift,
ScratchMem + index2, w); ScratchMem + index2, w);
} }
if(leftover) { if (leftover) {
data[index + w] |= data[index + w] |=
SHIFT_L(ScratchMem[index2 + w], shift); SHIFT_L(ScratchMem[index2 + w], shift);
if((shift + leftover) > 8) if ((shift + leftover) > 8)
data[index + w + 1] |= data[index + w + 1] |=
SHIFT_R(ScratchMem[index2 + w],(8 - shift)); SHIFT_R(ScratchMem[index2 + w],
(8 - shift));
} }
} }
} else { }
else {
j = BitsPerPixel(depth) >> 3; j = BitsPerPixel(depth) >> 3;
x = (pbox->x1 - SrcBox.x1) * j; x = (pbox->x1 - SrcBox.x1) * j;
y = pbox->y1 - SrcBox.y1; y = pbox->y1 - SrcBox.y1;
w *= j; w *= j;
for(j = 0; j < h; j++) { for (j = 0; j < h; j++) {
memcpy(data + (pitch * (y + j)) + x, memcpy(data + (pitch * (y + j)) + x,
ScratchMem + (ScratchPitch * j), w); ScratchMem + (ScratchPitch * j), w);
} }
@ -1282,7 +1278,7 @@ XineramaGetImageData(
} }
RegionSubtract(&SrcRegion, &SrcRegion, &GrabRegion); RegionSubtract(&SrcRegion, &SrcRegion, &GrabRegion);
if(!RegionNotEmpty(&SrcRegion)) if (!RegionNotEmpty(&SrcRegion))
break; break;
} }

View File

@ -26,7 +26,6 @@ Equipment Corporation.
******************************************************************/ ******************************************************************/
/* THIS IS NOT AN X PROJECT TEAM SPECIFICATION */ /* THIS IS NOT AN X PROJECT TEAM SPECIFICATION */
/* /*
@ -47,7 +46,7 @@ Equipment Corporation.
#include "dixstruct.h" #include "dixstruct.h"
typedef struct _PanoramiXInfo { typedef struct _PanoramiXInfo {
XID id ; XID id;
} PanoramiXInfo; } PanoramiXInfo;
typedef struct { typedef struct {

View File

@ -48,12 +48,12 @@ Equipment Corporation.
#include "panoramiXh.h" #include "panoramiXh.h"
static int static int
SProcPanoramiXQueryVersion (ClientPtr client) SProcPanoramiXQueryVersion(ClientPtr client)
{ {
REQUEST(xPanoramiXQueryVersionReq); REQUEST(xPanoramiXQueryVersionReq);
swaps(&stuff->length); swaps(&stuff->length);
REQUEST_SIZE_MATCH (xPanoramiXQueryVersionReq); REQUEST_SIZE_MATCH(xPanoramiXQueryVersionReq);
return ProcPanoramiXQueryVersion(client); return ProcPanoramiXQueryVersion(client);
} }
@ -91,7 +91,6 @@ SProcPanoramiXGetScreenSize(ClientPtr client)
return ProcPanoramiXGetScreenSize(client); return ProcPanoramiXGetScreenSize(client);
} }
static int static int
SProcXineramaIsActive(ClientPtr client) SProcXineramaIsActive(ClientPtr client)
{ {
@ -102,7 +101,6 @@ SProcXineramaIsActive(ClientPtr client)
return ProcXineramaIsActive(client); return ProcXineramaIsActive(client);
} }
static int static int
SProcXineramaQueryScreens(ClientPtr client) SProcXineramaQueryScreens(ClientPtr client)
{ {
@ -113,12 +111,11 @@ SProcXineramaQueryScreens(ClientPtr client)
return ProcXineramaQueryScreens(client); return ProcXineramaQueryScreens(client);
} }
int int
SProcPanoramiXDispatch (ClientPtr client) SProcPanoramiXDispatch(ClientPtr client)
{ REQUEST(xReq); {
switch (stuff->data) REQUEST(xReq);
{ switch (stuff->data) {
case X_PanoramiXQueryVersion: case X_PanoramiXQueryVersion:
return SProcPanoramiXQueryVersion(client); return SProcPanoramiXQueryVersion(client);
case X_PanoramiXGetState: case X_PanoramiXGetState:

View File

@ -70,4 +70,4 @@ extern int SProcPanoramiXDispatch(ClientPtr client);
extern int connBlockScreenStart; extern int connBlockScreenStart;
extern xConnSetupPrefix connSetupPrefix; extern xConnSetupPrefix connSetupPrefix;
extern int (* SavedProcVector[256]) (ClientPtr client); extern int (*SavedProcVector[256]) (ClientPtr client);

File diff suppressed because it is too large Load Diff

View File

@ -15,8 +15,9 @@ extern _X_EXPORT int PanoramiXPixHeight;
extern _X_EXPORT VisualID PanoramiXTranslateVisualID(int screen, VisualID orig); extern _X_EXPORT VisualID PanoramiXTranslateVisualID(int screen, VisualID orig);
extern _X_EXPORT void PanoramiXConsolidate(void); extern _X_EXPORT void PanoramiXConsolidate(void);
extern _X_EXPORT Bool PanoramiXCreateConnectionBlock(void); extern _X_EXPORT Bool PanoramiXCreateConnectionBlock(void);
extern _X_EXPORT PanoramiXRes * PanoramiXFindIDByScrnum(RESTYPE, XID, int); extern _X_EXPORT PanoramiXRes *PanoramiXFindIDByScrnum(RESTYPE, XID, int);
extern _X_EXPORT Bool XineramaRegisterConnectionBlockCallback(void (*func)(void)); extern _X_EXPORT Bool
XineramaRegisterConnectionBlockCallback(void (*func) (void));
extern _X_EXPORT int XineramaDeleteResource(pointer, XID); extern _X_EXPORT int XineramaDeleteResource(pointer, XID);
extern _X_EXPORT void XineramaReinitData(void); extern _X_EXPORT void XineramaReinitData(void);
@ -35,24 +36,20 @@ extern _X_EXPORT RESTYPE XRT_PICTURE;
* layers agree that the visuals are equal. The first visual is always from * layers agree that the visuals are equal. The first visual is always from
* screen 0. * screen 0.
*/ */
typedef Bool (*XineramaVisualsEqualProcPtr)(VisualPtr, ScreenPtr, VisualPtr); typedef Bool (*XineramaVisualsEqualProcPtr) (VisualPtr, ScreenPtr, VisualPtr);
extern _X_EXPORT XineramaVisualsEqualProcPtr XineramaVisualsEqualPtr; extern _X_EXPORT XineramaVisualsEqualProcPtr XineramaVisualsEqualPtr;
extern _X_EXPORT void XineramaGetImageData( extern _X_EXPORT void XineramaGetImageData(DrawablePtr *pDrawables,
DrawablePtr *pDrawables,
int left, int left,
int top, int top,
int width, int width,
int height, int height,
unsigned int format, unsigned int format,
unsigned long planemask, unsigned long planemask,
char *data, char *data, int pitch, Bool isRoot);
int pitch,
Bool isRoot
);
static inline void panoramix_setup_ids(PanoramiXRes *resource, static inline void
ClientPtr client, XID base_id) panoramix_setup_ids(PanoramiXRes * resource, ClientPtr client, XID base_id)
{ {
int j; int j;

File diff suppressed because it is too large Load Diff

View File

@ -52,6 +52,7 @@ static CallbackListPtr SecurityValidateGroupCallback = NULL;
/* Private state record */ /* Private state record */
static DevPrivateKeyRec stateKeyRec; static DevPrivateKeyRec stateKeyRec;
#define stateKey (&stateKeyRec) #define stateKey (&stateKeyRec)
/* This is what we store as client security state */ /* This is what we store as client security state */
@ -84,7 +85,6 @@ static const Mask SecurityDeviceMask =
static const Mask SecurityServerMask = DixGetAttrAccess | DixGrabAccess; static const Mask SecurityServerMask = DixGetAttrAccess | DixGrabAccess;
static const Mask SecurityClientMask = DixGetAttrAccess; static const Mask SecurityClientMask = DixGetAttrAccess;
/* SecurityAudit /* SecurityAudit
* *
* Arguments: * Arguments:
@ -97,7 +97,8 @@ static const Mask SecurityClientMask = DixGetAttrAccess;
* Writes the message to the log file if security logging is on. * Writes the message to the log file if security logging is on.
*/ */
static void _X_ATTRIBUTE_PRINTF(1,2) static void
_X_ATTRIBUTE_PRINTF(1, 2)
SecurityAudit(const char *format, ...) SecurityAudit(const char *format, ...)
{ {
va_list args; va_list args;
@ -113,7 +114,7 @@ SecurityAudit(const char *format, ...)
* Performs a Security permission check. * Performs a Security permission check.
*/ */
static int static int
SecurityDoCheck(SecurityStateRec *subj, SecurityStateRec *obj, SecurityDoCheck(SecurityStateRec * subj, SecurityStateRec * obj,
Mask requested, Mask allowed) Mask requested, Mask allowed)
{ {
if (!subj->haveState || !obj->haveState) if (!subj->haveState || !obj->haveState)
@ -151,7 +152,6 @@ SecurityLookupRequestName(ClientPtr client)
return LookupRequestName(client->majorOp, client->minorOp); return LookupRequestName(client->majorOp, client->minorOp);
} }
/* SecurityDeleteAuthorization /* SecurityDeleteAuthorization
* *
* Arguments: * Arguments:
@ -165,11 +165,9 @@ SecurityLookupRequestName(ClientPtr client)
*/ */
static int static int
SecurityDeleteAuthorization( SecurityDeleteAuthorization(pointer value, XID id)
pointer value,
XID id)
{ {
SecurityAuthorizationPtr pAuth = (SecurityAuthorizationPtr)value; SecurityAuthorizationPtr pAuth = (SecurityAuthorizationPtr) value;
unsigned short name_len, data_len; unsigned short name_len, data_len;
const char *name; const char *name;
char *data; char *data;
@ -179,34 +177,35 @@ SecurityDeleteAuthorization(
/* Remove the auth using the os layer auth manager */ /* Remove the auth using the os layer auth manager */
status = AuthorizationFromID(pAuth->id, &name_len, &name, status = AuthorizationFromID(pAuth->id, &name_len, &name, &data_len, &data);
&data_len, &data);
assert(status); assert(status);
status = RemoveAuthorization(name_len, name, data_len, data); status = RemoveAuthorization(name_len, name, data_len, data);
assert(status); assert(status);
(void)status; (void) status;
/* free the auth timer if there is one */ /* free the auth timer if there is one */
if (pAuth->timer) TimerFree(pAuth->timer); if (pAuth->timer)
TimerFree(pAuth->timer);
/* send revoke events */ /* send revoke events */
while ((pEventClient = pAuth->eventClients)) while ((pEventClient = pAuth->eventClients)) {
{
/* send revocation event event */ /* send revocation event event */
xSecurityAuthorizationRevokedEvent are; xSecurityAuthorizationRevokedEvent are;
are.type = SecurityEventBase + XSecurityAuthorizationRevoked; are.type = SecurityEventBase + XSecurityAuthorizationRevoked;
are.authId = pAuth->id; are.authId = pAuth->id;
WriteEventsToClient(rClient(pEventClient), 1, (xEvent *)&are); WriteEventsToClient(rClient(pEventClient), 1, (xEvent *) &are);
FreeResource(pEventClient->resource, RT_NONE); FreeResource(pEventClient->resource, RT_NONE);
} }
/* kill all clients using this auth */ /* kill all clients using this auth */
for (i = 1; i<currentMaxClients; i++) for (i = 1; i < currentMaxClients; i++)
if (clients[i]) { if (clients[i]) {
SecurityStateRec *state; SecurityStateRec *state;
state = dixLookupPrivate(&clients[i]->devPrivates, stateKey); state = dixLookupPrivate(&clients[i]->devPrivates, stateKey);
if (state->haveState && state->authId == pAuth->id) if (state->haveState && state->authId == pAuth->id)
CloseDownClient(clients[i]); CloseDownClient(clients[i]);
@ -218,22 +217,16 @@ SecurityDeleteAuthorization(
} /* SecurityDeleteAuthorization */ } /* SecurityDeleteAuthorization */
/* resource delete function for RTEventClient */ /* resource delete function for RTEventClient */
static int static int
SecurityDeleteAuthorizationEventClient( SecurityDeleteAuthorizationEventClient(pointer value, XID id)
pointer value,
XID id)
{ {
OtherClientsPtr pEventClient, prev = NULL; OtherClientsPtr pEventClient, prev = NULL;
SecurityAuthorizationPtr pAuth = (SecurityAuthorizationPtr)value; SecurityAuthorizationPtr pAuth = (SecurityAuthorizationPtr) value;
for (pEventClient = pAuth->eventClients; for (pEventClient = pAuth->eventClients;
pEventClient; pEventClient; pEventClient = pEventClient->next) {
pEventClient = pEventClient->next) if (pEventClient->resource == id) {
{
if (pEventClient->resource == id)
{
if (prev) if (prev)
prev->next = pEventClient->next; prev->next = pEventClient->next;
else else
@ -243,11 +236,9 @@ SecurityDeleteAuthorizationEventClient(
} }
prev = pEventClient; prev = pEventClient;
} }
/*NOTREACHED*/ /*NOTREACHED*/ return -1; /* make compiler happy */
return -1; /* make compiler happy */
} /* SecurityDeleteAuthorizationEventClient */ } /* SecurityDeleteAuthorizationEventClient */
/* SecurityComputeAuthorizationTimeout /* SecurityComputeAuthorizationTimeout
* *
* Arguments: * Arguments:
@ -263,22 +254,19 @@ SecurityDeleteAuthorizationEventClient(
*/ */
static CARD32 static CARD32
SecurityComputeAuthorizationTimeout( SecurityComputeAuthorizationTimeout(SecurityAuthorizationPtr pAuth,
SecurityAuthorizationPtr pAuth,
unsigned int seconds) unsigned int seconds)
{ {
/* maxSecs is the number of full seconds that can be expressed in /* maxSecs is the number of full seconds that can be expressed in
* 32 bits worth of milliseconds * 32 bits worth of milliseconds
*/ */
CARD32 maxSecs = (CARD32)(~0) / (CARD32)MILLI_PER_SECOND; CARD32 maxSecs = (CARD32) (~0) / (CARD32) MILLI_PER_SECOND;
if (seconds > maxSecs) if (seconds > maxSecs) { /* only come here if we want to wait more than 49 days */
{ /* only come here if we want to wait more than 49 days */
pAuth->secondsRemaining = seconds - maxSecs; pAuth->secondsRemaining = seconds - maxSecs;
return maxSecs * MILLI_PER_SECOND; return maxSecs * MILLI_PER_SECOND;
} }
else else { /* by far the common case */
{ /* by far the common case */
pAuth->secondsRemaining = 0; pAuth->secondsRemaining = 0;
return seconds * MILLI_PER_SECOND; return seconds * MILLI_PER_SECOND;
} }
@ -304,22 +292,17 @@ SecurityComputeAuthorizationTimeout(
*/ */
static CARD32 static CARD32
SecurityAuthorizationExpired( SecurityAuthorizationExpired(OsTimerPtr timer, CARD32 time, pointer pval)
OsTimerPtr timer,
CARD32 time,
pointer pval)
{ {
SecurityAuthorizationPtr pAuth = (SecurityAuthorizationPtr)pval; SecurityAuthorizationPtr pAuth = (SecurityAuthorizationPtr) pval;
assert(pAuth->timer == timer); assert(pAuth->timer == timer);
if (pAuth->secondsRemaining) if (pAuth->secondsRemaining) {
{
return SecurityComputeAuthorizationTimeout(pAuth, return SecurityComputeAuthorizationTimeout(pAuth,
pAuth->secondsRemaining); pAuth->secondsRemaining);
} }
else else {
{
FreeResource(pAuth->id, RT_NONE); FreeResource(pAuth->id, RT_NONE);
return 0; return 0;
} }
@ -339,22 +322,20 @@ SecurityAuthorizationExpired(
*/ */
static void static void
SecurityStartAuthorizationTimer( SecurityStartAuthorizationTimer(SecurityAuthorizationPtr pAuth)
SecurityAuthorizationPtr pAuth)
{ {
pAuth->timer = TimerSet(pAuth->timer, 0, pAuth->timer = TimerSet(pAuth->timer, 0,
SecurityComputeAuthorizationTimeout(pAuth, pAuth->timeout), SecurityComputeAuthorizationTimeout(pAuth,
pAuth->timeout),
SecurityAuthorizationExpired, pAuth); SecurityAuthorizationExpired, pAuth);
} /* SecurityStartAuthorizationTimer */ } /* SecurityStartAuthorizationTimer */
/* Proc functions all take a client argument, execute the request in /* Proc functions all take a client argument, execute the request in
* client->requestBuffer, and return a protocol error status. * client->requestBuffer, and return a protocol error status.
*/ */
static int static int
ProcSecurityQueryVersion( ProcSecurityQueryVersion(ClientPtr client)
ClientPtr client)
{ {
/* REQUEST(xSecurityQueryVersionReq); */ /* REQUEST(xSecurityQueryVersionReq); */
xSecurityQueryVersionReply rep; xSecurityQueryVersionReply rep;
@ -365,32 +346,25 @@ ProcSecurityQueryVersion(
rep.length = 0; rep.length = 0;
rep.majorVersion = SERVER_SECURITY_MAJOR_VERSION; rep.majorVersion = SERVER_SECURITY_MAJOR_VERSION;
rep.minorVersion = SERVER_SECURITY_MINOR_VERSION; rep.minorVersion = SERVER_SECURITY_MINOR_VERSION;
if(client->swapped) if (client->swapped) {
{
swaps(&rep.sequenceNumber); swaps(&rep.sequenceNumber);
swaps(&rep.majorVersion); swaps(&rep.majorVersion);
swaps(&rep.minorVersion); swaps(&rep.minorVersion);
} }
(void)WriteToClient(client, SIZEOF(xSecurityQueryVersionReply), (void) WriteToClient(client, SIZEOF(xSecurityQueryVersionReply),
(char *)&rep); (char *) &rep);
return Success; return Success;
} /* ProcSecurityQueryVersion */ } /* ProcSecurityQueryVersion */
static int static int
SecurityEventSelectForAuthorization( SecurityEventSelectForAuthorization(SecurityAuthorizationPtr pAuth,
SecurityAuthorizationPtr pAuth, ClientPtr client, Mask mask)
ClientPtr client,
Mask mask)
{ {
OtherClients *pEventClient; OtherClients *pEventClient;
for (pEventClient = pAuth->eventClients; for (pEventClient = pAuth->eventClients;
pEventClient; pEventClient; pEventClient = pEventClient->next) {
pEventClient = pEventClient->next) if (SameClient(pEventClient, client)) {
{
if (SameClient(pEventClient, client))
{
if (mask == 0) if (mask == 0)
FreeResource(pEventClient->resource, RT_NONE); FreeResource(pEventClient->resource, RT_NONE);
else else
@ -405,9 +379,7 @@ SecurityEventSelectForAuthorization(
pEventClient->mask = mask; pEventClient->mask = mask;
pEventClient->resource = FakeClientID(client->index); pEventClient->resource = FakeClientID(client->index);
pEventClient->next = pAuth->eventClients; pEventClient->next = pAuth->eventClients;
if (!AddResource(pEventClient->resource, RTEventClient, if (!AddResource(pEventClient->resource, RTEventClient, (pointer) pAuth)) {
(pointer)pAuth))
{
free(pEventClient); free(pEventClient);
return BadAlloc; return BadAlloc;
} }
@ -416,13 +388,11 @@ SecurityEventSelectForAuthorization(
return Success; return Success;
} /* SecurityEventSelectForAuthorization */ } /* SecurityEventSelectForAuthorization */
static int static int
ProcSecurityGenerateAuthorization( ProcSecurityGenerateAuthorization(ClientPtr client)
ClientPtr client)
{ {
REQUEST(xSecurityGenerateAuthorizationReq); REQUEST(xSecurityGenerateAuthorizationReq);
int len; /* request length in CARD32s*/ int len; /* request length in CARD32s */
Bool removeAuth = FALSE; /* if bailout, call RemoveAuthorization? */ Bool removeAuth = FALSE; /* if bailout, call RemoveAuthorization? */
SecurityAuthorizationPtr pAuth = NULL; /* auth we are creating */ SecurityAuthorizationPtr pAuth = NULL; /* auth we are creating */
int err; /* error to return from this function */ int err; /* error to return from this function */
@ -444,33 +414,29 @@ ProcSecurityGenerateAuthorization(
len = bytes_to_int32(SIZEOF(xSecurityGenerateAuthorizationReq)); len = bytes_to_int32(SIZEOF(xSecurityGenerateAuthorizationReq));
len += bytes_to_int32(stuff->nbytesAuthProto); len += bytes_to_int32(stuff->nbytesAuthProto);
len += bytes_to_int32(stuff->nbytesAuthData); len += bytes_to_int32(stuff->nbytesAuthData);
values = ((CARD32 *)stuff) + len; values = ((CARD32 *) stuff) + len;
len += Ones(stuff->valueMask); len += Ones(stuff->valueMask);
if (client->req_len != len) if (client->req_len != len)
return BadLength; return BadLength;
/* check valuemask */ /* check valuemask */
if (stuff->valueMask & ~XSecurityAllAuthorizationAttributes) if (stuff->valueMask & ~XSecurityAllAuthorizationAttributes) {
{
client->errorValue = stuff->valueMask; client->errorValue = stuff->valueMask;
return BadValue; return BadValue;
} }
/* check timeout */ /* check timeout */
timeout = 60; timeout = 60;
if (stuff->valueMask & XSecurityTimeout) if (stuff->valueMask & XSecurityTimeout) {
{
timeout = *values++; timeout = *values++;
} }
/* check trustLevel */ /* check trustLevel */
trustLevel = XSecurityClientUntrusted; trustLevel = XSecurityClientUntrusted;
if (stuff->valueMask & XSecurityTrustLevel) if (stuff->valueMask & XSecurityTrustLevel) {
{
trustLevel = *values++; trustLevel = *values++;
if (trustLevel != XSecurityClientTrusted && if (trustLevel != XSecurityClientTrusted &&
trustLevel != XSecurityClientUntrusted) trustLevel != XSecurityClientUntrusted) {
{
client->errorValue = trustLevel; client->errorValue = trustLevel;
return BadValue; return BadValue;
} }
@ -478,20 +444,18 @@ ProcSecurityGenerateAuthorization(
/* check group */ /* check group */
group = None; group = None;
if (stuff->valueMask & XSecurityGroup) if (stuff->valueMask & XSecurityGroup) {
{
group = *values++; group = *values++;
if (SecurityValidateGroupCallback) if (SecurityValidateGroupCallback) {
{
SecurityValidateGroupInfoRec vgi; SecurityValidateGroupInfoRec vgi;
vgi.group = group; vgi.group = group;
vgi.valid = FALSE; vgi.valid = FALSE;
CallCallbacks(&SecurityValidateGroupCallback, (pointer)&vgi); CallCallbacks(&SecurityValidateGroupCallback, (pointer) &vgi);
/* if nobody said they recognized it, it's an error */ /* if nobody said they recognized it, it's an error */
if (!vgi.valid) if (!vgi.valid) {
{
client->errorValue = group; client->errorValue = group;
return BadValue; return BadValue;
} }
@ -500,17 +464,15 @@ ProcSecurityGenerateAuthorization(
/* check event mask */ /* check event mask */
eventMask = 0; eventMask = 0;
if (stuff->valueMask & XSecurityEventMask) if (stuff->valueMask & XSecurityEventMask) {
{
eventMask = *values++; eventMask = *values++;
if (eventMask & ~XSecurityAllEventMasks) if (eventMask & ~XSecurityAllEventMasks) {
{
client->errorValue = eventMask; client->errorValue = eventMask;
return BadValue; return BadValue;
} }
} }
protoname = (char *)&stuff[1]; protoname = (char *) &stuff[1];
protodata = protoname + bytes_to_int32(stuff->nbytesAuthProto); protodata = protoname + bytes_to_int32(stuff->nbytesAuthProto);
/* call os layer to generate the authorization */ /* call os layer to generate the authorization */
@ -518,8 +480,7 @@ ProcSecurityGenerateAuthorization(
authId = GenerateAuthorization(stuff->nbytesAuthProto, protoname, authId = GenerateAuthorization(stuff->nbytesAuthProto, protoname,
stuff->nbytesAuthData, protodata, stuff->nbytesAuthData, protodata,
&authdata_len, &pAuthdata); &authdata_len, &pAuthdata);
if ((XID) ~0L == authId) if ((XID) ~0L == authId) {
{
err = SecurityErrorBase + XSecurityBadAuthorizationProtocol; err = SecurityErrorBase + XSecurityBadAuthorizationProtocol;
goto bailout; goto bailout;
} }
@ -532,8 +493,7 @@ ProcSecurityGenerateAuthorization(
/* associate additional information with this auth ID */ /* associate additional information with this auth ID */
pAuth = malloc(sizeof(SecurityAuthorizationRec)); pAuth = malloc(sizeof(SecurityAuthorizationRec));
if (!pAuth) if (!pAuth) {
{
err = BadAlloc; err = BadAlloc;
goto bailout; goto bailout;
} }
@ -550,15 +510,13 @@ ProcSecurityGenerateAuthorization(
pAuth->eventClients = NULL; pAuth->eventClients = NULL;
/* handle event selection */ /* handle event selection */
if (eventMask) if (eventMask) {
{
err = SecurityEventSelectForAuthorization(pAuth, client, eventMask); err = SecurityEventSelectForAuthorization(pAuth, client, eventMask);
if (err != Success) if (err != Success)
goto bailout; goto bailout;
} }
if (!AddResource(authId, SecurityAuthorizationResType, pAuth)) if (!AddResource(authId, SecurityAuthorizationResType, pAuth)) {
{
err = BadAlloc; err = BadAlloc;
goto bailout; goto bailout;
} }
@ -576,8 +534,7 @@ ProcSecurityGenerateAuthorization(
rep.authId = authId; rep.authId = authId;
rep.dataLength = authdata_len; rep.dataLength = authdata_len;
if (client->swapped) if (client->swapped) {
{
swapl(&rep.length); swapl(&rep.length);
swaps(&rep.sequenceNumber); swaps(&rep.sequenceNumber);
swapl(&rep.authId); swapl(&rep.authId);
@ -585,17 +542,18 @@ ProcSecurityGenerateAuthorization(
} }
WriteToClient(client, SIZEOF(xSecurityGenerateAuthorizationReply), WriteToClient(client, SIZEOF(xSecurityGenerateAuthorizationReply),
(char *)&rep); (char *) &rep);
WriteToClient(client, authdata_len, pAuthdata); WriteToClient(client, authdata_len, pAuthdata);
SecurityAudit("client %d generated authorization %d trust %d timeout %d group %d events %d\n", SecurityAudit
("client %d generated authorization %d trust %d timeout %d group %d events %d\n",
client->index, pAuth->id, pAuth->trustLevel, pAuth->timeout, client->index, pAuth->id, pAuth->trustLevel, pAuth->timeout,
pAuth->group, eventMask); pAuth->group, eventMask);
/* the request succeeded; don't call RemoveAuthorization or free pAuth */ /* the request succeeded; don't call RemoveAuthorization or free pAuth */
return Success; return Success;
bailout: bailout:
if (removeAuth) if (removeAuth)
RemoveAuthorization(stuff->nbytesAuthProto, protoname, RemoveAuthorization(stuff->nbytesAuthProto, protoname,
authdata_len, pAuthdata); authdata_len, pAuthdata);
@ -605,8 +563,7 @@ bailout:
} /* ProcSecurityGenerateAuthorization */ } /* ProcSecurityGenerateAuthorization */
static int static int
ProcSecurityRevokeAuthorization( ProcSecurityRevokeAuthorization(ClientPtr client)
ClientPtr client)
{ {
REQUEST(xSecurityRevokeAuthorizationReq); REQUEST(xSecurityRevokeAuthorizationReq);
SecurityAuthorizationPtr pAuth; SecurityAuthorizationPtr pAuth;
@ -614,7 +571,7 @@ ProcSecurityRevokeAuthorization(
REQUEST_SIZE_MATCH(xSecurityRevokeAuthorizationReq); REQUEST_SIZE_MATCH(xSecurityRevokeAuthorizationReq);
rc = dixLookupResourceByType((pointer *)&pAuth, stuff->authId, rc = dixLookupResourceByType((pointer *) &pAuth, stuff->authId,
SecurityAuthorizationResType, client, SecurityAuthorizationResType, client,
DixDestroyAccess); DixDestroyAccess);
if (rc != Success) if (rc != Success)
@ -624,15 +581,12 @@ ProcSecurityRevokeAuthorization(
return Success; return Success;
} /* ProcSecurityRevokeAuthorization */ } /* ProcSecurityRevokeAuthorization */
static int static int
ProcSecurityDispatch( ProcSecurityDispatch(ClientPtr client)
ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
switch (stuff->data) switch (stuff->data) {
{
case X_SecurityQueryVersion: case X_SecurityQueryVersion:
return ProcSecurityQueryVersion(client); return ProcSecurityQueryVersion(client);
case X_SecurityGenerateAuthorization: case X_SecurityGenerateAuthorization:
@ -645,8 +599,7 @@ ProcSecurityDispatch(
} /* ProcSecurityDispatch */ } /* ProcSecurityDispatch */
static int static int
SProcSecurityQueryVersion( SProcSecurityQueryVersion(ClientPtr client)
ClientPtr client)
{ {
REQUEST(xSecurityQueryVersionReq); REQUEST(xSecurityQueryVersionReq);
@ -657,10 +610,8 @@ SProcSecurityQueryVersion(
return ProcSecurityQueryVersion(client); return ProcSecurityQueryVersion(client);
} /* SProcSecurityQueryVersion */ } /* SProcSecurityQueryVersion */
static int static int
SProcSecurityGenerateAuthorization( SProcSecurityGenerateAuthorization(ClientPtr client)
ClientPtr client)
{ {
REQUEST(xSecurityGenerateAuthorizationReq); REQUEST(xSecurityGenerateAuthorizationReq);
CARD32 *values; CARD32 *values;
@ -677,16 +628,14 @@ SProcSecurityGenerateAuthorization(
if (values_offset > if (values_offset >
stuff->length - bytes_to_int32(sz_xSecurityGenerateAuthorizationReq)) stuff->length - bytes_to_int32(sz_xSecurityGenerateAuthorizationReq))
return BadLength; return BadLength;
values = (CARD32 *)(&stuff[1]) + values_offset; values = (CARD32 *) (&stuff[1]) + values_offset;
nvalues = (((CARD32 *)stuff) + stuff->length) - values; nvalues = (((CARD32 *) stuff) + stuff->length) - values;
SwapLongs(values, nvalues); SwapLongs(values, nvalues);
return ProcSecurityGenerateAuthorization(client); return ProcSecurityGenerateAuthorization(client);
} /* SProcSecurityGenerateAuthorization */ } /* SProcSecurityGenerateAuthorization */
static int static int
SProcSecurityRevokeAuthorization( SProcSecurityRevokeAuthorization(ClientPtr client)
ClientPtr client)
{ {
REQUEST(xSecurityRevokeAuthorizationReq); REQUEST(xSecurityRevokeAuthorizationReq);
@ -696,15 +645,12 @@ SProcSecurityRevokeAuthorization(
return ProcSecurityRevokeAuthorization(client); return ProcSecurityRevokeAuthorization(client);
} /* SProcSecurityRevokeAuthorization */ } /* SProcSecurityRevokeAuthorization */
static int static int
SProcSecurityDispatch( SProcSecurityDispatch(ClientPtr client)
ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
switch (stuff->data) switch (stuff->data) {
{
case X_SecurityQueryVersion: case X_SecurityQueryVersion:
return SProcSecurityQueryVersion(client); return SProcSecurityQueryVersion(client);
case X_SecurityGenerateAuthorization: case X_SecurityGenerateAuthorization:
@ -717,9 +663,8 @@ SProcSecurityDispatch(
} /* SProcSecurityDispatch */ } /* SProcSecurityDispatch */
static void static void
SwapSecurityAuthorizationRevokedEvent( SwapSecurityAuthorizationRevokedEvent(xSecurityAuthorizationRevokedEvent * from,
xSecurityAuthorizationRevokedEvent *from, xSecurityAuthorizationRevokedEvent * to)
xSecurityAuthorizationRevokedEvent *to)
{ {
to->type = from->type; to->type = from->type;
to->detail = from->detail; to->detail = from->detail;
@ -801,7 +746,7 @@ SecurityResource(CallbackListPtr *pcbl, pointer unused, pointer calldata)
/* disable background None for untrusted windows */ /* disable background None for untrusted windows */
if ((requested & DixCreateAccess) && (rec->rtype == RT_WINDOW)) if ((requested & DixCreateAccess) && (rec->rtype == RT_WINDOW))
if (subj->haveState && subj->trustLevel != XSecurityClientTrusted) if (subj->haveState && subj->trustLevel != XSecurityClientTrusted)
((WindowPtr)rec->res)->forcedBG = TRUE; ((WindowPtr) rec->res)->forcedBG = TRUE;
/* additional permissions for specific resource types */ /* additional permissions for specific resource types */
if (rec->rtype == RT_WINDOW) if (rec->rtype == RT_WINDOW)
@ -835,7 +780,6 @@ SecurityResource(CallbackListPtr *pcbl, pointer unused, pointer calldata)
rec->status = BadAccess; /* deny access */ rec->status = BadAccess; /* deny access */
} }
static void static void
SecurityExtension(CallbackListPtr *pcbl, pointer unused, pointer calldata) SecurityExtension(CallbackListPtr *pcbl, pointer unused, pointer calldata)
{ {
@ -1011,7 +955,7 @@ SecurityClientState(CallbackListPtr *pcbl, pointer unused, pointer calldata)
case ClientStateRunning: case ClientStateRunning:
state->authId = AuthorizationIDOfClient(pci->client); state->authId = AuthorizationIDOfClient(pci->client);
rc = dixLookupResourceByType((pointer *)&pAuth, state->authId, rc = dixLookupResourceByType((pointer *) &pAuth, state->authId,
SecurityAuthorizationResType, serverClient, SecurityAuthorizationResType, serverClient,
DixGetAttrAccess); DixGetAttrAccess);
if (rc == Success) { if (rc == Success) {
@ -1026,7 +970,7 @@ SecurityClientState(CallbackListPtr *pcbl, pointer unused, pointer calldata)
case ClientStateGone: case ClientStateGone:
case ClientStateRetained: case ClientStateRetained:
rc = dixLookupResourceByType((pointer *)&pAuth, state->authId, rc = dixLookupResourceByType((pointer *) &pAuth, state->authId,
SecurityAuthorizationResType, serverClient, SecurityAuthorizationResType, serverClient,
DixGetAttrAccess); DixGetAttrAccess);
if (rc == Success) { if (rc == Success) {
@ -1054,8 +998,7 @@ SecurityClientState(CallbackListPtr *pcbl, pointer unused, pointer calldata)
*/ */
static void static void
SecurityResetProc( SecurityResetProc(ExtensionEntry * extEntry)
ExtensionEntry *extEntry)
{ {
/* Unregister callbacks */ /* Unregister callbacks */
DeleteCallback(&ClientStateCallback, SecurityClientState, NULL); DeleteCallback(&ClientStateCallback, SecurityClientState, NULL);
@ -1071,7 +1014,6 @@ SecurityResetProc(
XaceDeleteCallback(XACE_SERVER_ACCESS, SecurityServer, NULL); XaceDeleteCallback(XACE_SERVER_ACCESS, SecurityServer, NULL);
} }
/* SecurityExtensionInit /* SecurityExtensionInit
* *
* Arguments: none. * Arguments: none.
@ -1102,7 +1044,8 @@ SecurityExtensionInit(INITARGS)
RTEventClient |= RC_NEVERRETAIN; RTEventClient |= RC_NEVERRETAIN;
/* Allocate the private storage */ /* Allocate the private storage */
if (!dixRegisterPrivateKey(stateKey, PRIVATE_CLIENT, sizeof(SecurityStateRec))) if (!dixRegisterPrivateKey
(stateKey, PRIVATE_CLIENT, sizeof(SecurityStateRec)))
FatalError("SecurityExtensionSetup: Can't allocate client private.\n"); FatalError("SecurityExtensionSetup: Can't allocate client private.\n");
/* Register callbacks */ /* Register callbacks */
@ -1131,9 +1074,10 @@ SecurityExtensionInit(INITARGS)
SecurityEventBase = extEntry->eventBase; SecurityEventBase = extEntry->eventBase;
EventSwapVector[SecurityEventBase + XSecurityAuthorizationRevoked] = EventSwapVector[SecurityEventBase + XSecurityAuthorizationRevoked] =
(EventSwapPtr)SwapSecurityAuthorizationRevokedEvent; (EventSwapPtr) SwapSecurityAuthorizationRevokedEvent;
SetResourceTypeErrorValue(SecurityAuthorizationResType, SecurityErrorBase + XSecurityBadAuthorization); SetResourceTypeErrorValue(SecurityAuthorizationResType,
SecurityErrorBase + XSecurityBadAuthorization);
/* Label objects that were created before we could register ourself */ /* Label objects that were created before we could register ourself */
SecurityLabelInitial(); SecurityLabelInitial();

View File

@ -32,26 +32,25 @@ from The Open Group.
/* Allow client side portions of <X11/extensions/security.h> to compile */ /* Allow client side portions of <X11/extensions/security.h> to compile */
#ifndef Status #ifndef Status
# define Status int #define Status int
# define NEED_UNDEF_Status #define NEED_UNDEF_Status
#endif #endif
#ifndef Display #ifndef Display
# define Display void #define Display void
# define NEED_UNDEF_Display #define NEED_UNDEF_Display
#endif #endif
#include <X11/extensions/secur.h> #include <X11/extensions/secur.h>
#ifdef NEED_UNDEF_Status #ifdef NEED_UNDEF_Status
# undef Status #undef Status
# undef NEED_UNDEF_Status #undef NEED_UNDEF_Status
#endif #endif
#ifdef NEED_UNDEF_Display #ifdef NEED_UNDEF_Display
# undef Display #undef Display
# undef NEED_UNDEF_Display #undef NEED_UNDEF_Display
#endif #endif
#include "input.h" /* for DeviceIntPtr */ #include "input.h" /* for DeviceIntPtr */
#include "property.h" /* for PropertyPtr */ #include "property.h" /* for PropertyPtr */
#include "pixmap.h" /* for DrawablePtr */ #include "pixmap.h" /* for DrawablePtr */

File diff suppressed because it is too large Load Diff

View File

@ -26,7 +26,6 @@ in this Software without prior written authorization from The Open Group.
/* THIS IS NOT AN X CONSORTIUM STANDARD OR AN X PROJECT TEAM SPECIFICATION */ /* THIS IS NOT AN X CONSORTIUM STANDARD OR AN X PROJECT TEAM SPECIFICATION */
#define SHM #define SHM
#ifdef HAVE_DIX_CONFIG_H #ifdef HAVE_DIX_CONFIG_H
@ -106,20 +105,16 @@ typedef struct _ShmScrPrivateRec {
} ShmScrPrivateRec; } ShmScrPrivateRec;
static PixmapPtr fbShmCreatePixmap(XSHM_CREATE_PIXMAP_ARGS); static PixmapPtr fbShmCreatePixmap(XSHM_CREATE_PIXMAP_ARGS);
static int ShmDetachSegment( static int ShmDetachSegment(pointer /* value */ ,
pointer /* value */,
XID /* shmseg */ XID /* shmseg */
); );
static void ShmResetProc( static void ShmResetProc(ExtensionEntry * /* extEntry */
ExtensionEntry * /* extEntry */
); );
static void SShmCompletionEvent( static void SShmCompletionEvent(xShmCompletionEvent * /* from */ ,
xShmCompletionEvent * /* from */,
xShmCompletionEvent * /* to */ xShmCompletionEvent * /* to */
); );
static Bool ShmDestroyPixmap (PixmapPtr pPixmap); static Bool ShmDestroyPixmap(PixmapPtr pPixmap);
static unsigned char ShmReqCode; static unsigned char ShmReqCode;
int ShmCompletionCode; int ShmCompletionCode;
@ -128,11 +123,13 @@ RESTYPE ShmSegType;
static ShmDescPtr Shmsegs; static ShmDescPtr Shmsegs;
static Bool sharedPixmaps; static Bool sharedPixmaps;
static DevPrivateKeyRec shmScrPrivateKeyRec; static DevPrivateKeyRec shmScrPrivateKeyRec;
#define shmScrPrivateKey (&shmScrPrivateKeyRec) #define shmScrPrivateKey (&shmScrPrivateKeyRec)
static DevPrivateKeyRec shmPixmapPrivateKeyRec; static DevPrivateKeyRec shmPixmapPrivateKeyRec;
#define shmPixmapPrivateKey (&shmPixmapPrivateKeyRec) #define shmPixmapPrivateKey (&shmPixmapPrivateKeyRec)
static ShmFuncs miFuncs = {NULL, NULL}; static ShmFuncs miFuncs = { NULL, NULL };
static ShmFuncs fbFuncs = {fbShmCreatePixmap, NULL}; static ShmFuncs fbFuncs = { fbShmCreatePixmap, NULL };
#define ShmGetScreenPriv(s) ((ShmScrPrivateRec *)dixLookupPrivate(&(s)->devPrivates, shmScrPrivateKey)) #define ShmGetScreenPriv(s) ((ShmScrPrivateRec *)dixLookupPrivate(&(s)->devPrivates, shmScrPrivateKey))
@ -165,7 +162,6 @@ static ShmFuncs fbFuncs = {fbShmCreatePixmap, NULL};
} \ } \
} }
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__CYGWIN__) || defined(__DragonFly__) #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__CYGWIN__) || defined(__DragonFly__)
#include <sys/signal.h> #include <sys/signal.h>
@ -177,9 +173,10 @@ SigSysHandler(int signo)
badSysCall = TRUE; badSysCall = TRUE;
} }
static Bool CheckForShmSyscall(void) static Bool
CheckForShmSyscall(void)
{ {
void (*oldHandler)(int); void (*oldHandler) (int);
int shmid = -1; int shmid = -1;
/* If no SHM support in the kernel, the bad syscall will generate SIGSYS */ /* If no SHM support in the kernel, the bad syscall will generate SIGSYS */
@ -188,13 +185,11 @@ static Bool CheckForShmSyscall(void)
badSysCall = FALSE; badSysCall = FALSE;
shmid = shmget(IPC_PRIVATE, 4096, IPC_CREAT); shmid = shmget(IPC_PRIVATE, 4096, IPC_CREAT);
if (shmid != -1) if (shmid != -1) {
{
/* Successful allocation - clean up */ /* Successful allocation - clean up */
shmctl(shmid, IPC_RMID, NULL); shmctl(shmid, IPC_RMID, NULL);
} }
else else {
{
/* Allocation failed */ /* Allocation failed */
badSysCall = TRUE; badSysCall = TRUE;
} }
@ -210,6 +205,7 @@ static Bool
ShmCloseScreen(int i, ScreenPtr pScreen) ShmCloseScreen(int i, ScreenPtr pScreen)
{ {
ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen); ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen);
pScreen->CloseScreen = screen_priv->CloseScreen; pScreen->CloseScreen = screen_priv->CloseScreen;
dixSetPrivate(&pScreen->devPrivates, shmScrPrivateKey, NULL); dixSetPrivate(&pScreen->devPrivates, shmScrPrivateKey, NULL);
free(screen_priv); free(screen_priv);
@ -220,9 +216,9 @@ static ShmScrPrivateRec *
ShmInitScreenPriv(ScreenPtr pScreen) ShmInitScreenPriv(ScreenPtr pScreen)
{ {
ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen); ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen);
if (!screen_priv)
{ if (!screen_priv) {
screen_priv = calloc(1, sizeof (ShmScrPrivateRec)); screen_priv = calloc(1, sizeof(ShmScrPrivateRec));
screen_priv->CloseScreen = pScreen->CloseScreen; screen_priv->CloseScreen = pScreen->CloseScreen;
dixSetPrivate(&pScreen->devPrivates, shmScrPrivateKey, screen_priv); dixSetPrivate(&pScreen->devPrivates, shmScrPrivateKey, screen_priv);
pScreen->CloseScreen = ShmCloseScreen; pScreen->CloseScreen = ShmCloseScreen;
@ -240,11 +236,11 @@ ShmRegisterPrivates(void)
return TRUE; return TRUE;
} }
/*ARGSUSED*/ /*ARGSUSED*/ static void
static void ShmResetProc(ExtensionEntry * extEntry)
ShmResetProc(ExtensionEntry *extEntry)
{ {
int i; int i;
for (i = 0; i < screenInfo.numScreens; i++) for (i = 0; i < screenInfo.numScreens; i++)
ShmRegisterFuncs(screenInfo.screens[i], NULL); ShmRegisterFuncs(screenInfo.screens[i], NULL);
} }
@ -258,18 +254,19 @@ ShmRegisterFuncs(ScreenPtr pScreen, ShmFuncsPtr funcs)
} }
static Bool static Bool
ShmDestroyPixmap (PixmapPtr pPixmap) ShmDestroyPixmap(PixmapPtr pPixmap)
{ {
ScreenPtr pScreen = pPixmap->drawable.pScreen; ScreenPtr pScreen = pPixmap->drawable.pScreen;
ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen); ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen);
Bool ret; Bool ret;
if (pPixmap->refcnt == 1)
{ if (pPixmap->refcnt == 1) {
ShmDescPtr shmdesc; ShmDescPtr shmdesc;
shmdesc = (ShmDescPtr)dixLookupPrivate(&pPixmap->devPrivates,
shmdesc = (ShmDescPtr) dixLookupPrivate(&pPixmap->devPrivates,
shmPixmapPrivateKey); shmPixmapPrivateKey);
if (shmdesc) if (shmdesc)
ShmDetachSegment ((pointer) shmdesc, pPixmap->drawable.id); ShmDetachSegment((pointer) shmdesc, pPixmap->drawable.id);
} }
pScreen->DestroyPixmap = screen_priv->destroyPixmap; pScreen->DestroyPixmap = screen_priv->destroyPixmap;
@ -309,7 +306,7 @@ ProcShmQueryVersion(ClientPtr client)
swaps(&rep.uid); swaps(&rep.uid);
swaps(&rep.gid); swaps(&rep.gid);
} }
WriteToClient(client, sizeof(xShmQueryVersionReply), (char *)&rep); WriteToClient(client, sizeof(xShmQueryVersionReply), (char *) &rep);
return Success; return Success;
} }
@ -318,7 +315,7 @@ ProcShmQueryVersion(ClientPtr client)
* using the credentials from the client if available * using the credentials from the client if available
*/ */
static int static int
shm_access(ClientPtr client, SHMPERM_TYPE *perm, int readonly) shm_access(ClientPtr client, SHMPERM_TYPE * perm, int readonly)
{ {
int uid, gid; int uid, gid;
mode_t mask; mode_t mask;
@ -337,7 +334,7 @@ shm_access(ClientPtr client, SHMPERM_TYPE *perm, int readonly)
} }
#if defined(HAVE_GETZONEID) && defined(SHMPERM_ZONEID) #if defined(HAVE_GETZONEID) && defined(SHMPERM_ZONEID)
if ( ((lcc->fieldsSet & LCC_ZID_SET) == 0) || (lcc->zoneid == -1) if (((lcc->fieldsSet & LCC_ZID_SET) == 0) || (lcc->zoneid == -1)
|| (lcc->zoneid != SHMPERM_ZONEID(perm))) { || (lcc->zoneid != SHMPERM_ZONEID(perm))) {
uidset = 0; uidset = 0;
gidset = 0; gidset = 0;
@ -384,35 +381,29 @@ ProcShmAttach(ClientPtr client)
{ {
SHMSTAT_TYPE buf; SHMSTAT_TYPE buf;
ShmDescPtr shmdesc; ShmDescPtr shmdesc;
REQUEST(xShmAttachReq); REQUEST(xShmAttachReq);
REQUEST_SIZE_MATCH(xShmAttachReq); REQUEST_SIZE_MATCH(xShmAttachReq);
LEGAL_NEW_RESOURCE(stuff->shmseg, client); LEGAL_NEW_RESOURCE(stuff->shmseg, client);
if ((stuff->readOnly != xTrue) && (stuff->readOnly != xFalse)) if ((stuff->readOnly != xTrue) && (stuff->readOnly != xFalse)) {
{
client->errorValue = stuff->readOnly; client->errorValue = stuff->readOnly;
return BadValue; return BadValue;
} }
for (shmdesc = Shmsegs; for (shmdesc = Shmsegs;
shmdesc && (shmdesc->shmid != stuff->shmid); shmdesc && (shmdesc->shmid != stuff->shmid); shmdesc = shmdesc->next);
shmdesc = shmdesc->next) if (shmdesc) {
;
if (shmdesc)
{
if (!stuff->readOnly && !shmdesc->writable) if (!stuff->readOnly && !shmdesc->writable)
return BadAccess; return BadAccess;
shmdesc->refcnt++; shmdesc->refcnt++;
} }
else else {
{
shmdesc = malloc(sizeof(ShmDescRec)); shmdesc = malloc(sizeof(ShmDescRec));
if (!shmdesc) if (!shmdesc)
return BadAlloc; return BadAlloc;
shmdesc->addr = shmat(stuff->shmid, 0, shmdesc->addr = shmat(stuff->shmid, 0,
stuff->readOnly ? SHM_RDONLY : 0); stuff->readOnly ? SHM_RDONLY : 0);
if ((shmdesc->addr == ((char *)-1)) || if ((shmdesc->addr == ((char *) -1)) || SHMSTAT(stuff->shmid, &buf)) {
SHMSTAT(stuff->shmid, &buf))
{
free(shmdesc); free(shmdesc);
return BadAccess; return BadAccess;
} }
@ -434,24 +425,22 @@ ProcShmAttach(ClientPtr client)
shmdesc->next = Shmsegs; shmdesc->next = Shmsegs;
Shmsegs = shmdesc; Shmsegs = shmdesc;
} }
if (!AddResource(stuff->shmseg, ShmSegType, (pointer)shmdesc)) if (!AddResource(stuff->shmseg, ShmSegType, (pointer) shmdesc))
return BadAlloc; return BadAlloc;
return Success; return Success;
} }
/*ARGSUSED*/ /*ARGSUSED*/ static int
static int
ShmDetachSegment(pointer value, /* must conform to DeleteType */ ShmDetachSegment(pointer value, /* must conform to DeleteType */
XID shmseg) XID shmseg)
{ {
ShmDescPtr shmdesc = (ShmDescPtr)value; ShmDescPtr shmdesc = (ShmDescPtr) value;
ShmDescPtr *prev; ShmDescPtr *prev;
if (--shmdesc->refcnt) if (--shmdesc->refcnt)
return TRUE; return TRUE;
shmdt(shmdesc->addr); shmdt(shmdesc->addr);
for (prev = &Shmsegs; *prev != shmdesc; prev = &(*prev)->next) for (prev = &Shmsegs; *prev != shmdesc; prev = &(*prev)->next);
;
*prev = shmdesc->next; *prev = shmdesc->next;
free(shmdesc); free(shmdesc);
return Success; return Success;
@ -461,6 +450,7 @@ static int
ProcShmDetach(ClientPtr client) ProcShmDetach(ClientPtr client)
{ {
ShmDescPtr shmdesc; ShmDescPtr shmdesc;
REQUEST(xShmDetachReq); REQUEST(xShmDetachReq);
REQUEST_SIZE_MATCH(xShmDetachReq); REQUEST_SIZE_MATCH(xShmDetachReq);
@ -484,35 +474,38 @@ doShmPutImage(DrawablePtr dst, GCPtr pGC,
if (format == ZPixmap || (format == XYPixmap && depth == 1)) { if (format == ZPixmap || (format == XYPixmap && depth == 1)) {
pPixmap = GetScratchPixmapHeader(dst->pScreen, w, h, depth, pPixmap = GetScratchPixmapHeader(dst->pScreen, w, h, depth,
BitsPerPixel(depth), BitsPerPixel(depth),
PixmapBytePad(w, depth), PixmapBytePad(w, depth), data);
data);
if (!pPixmap) if (!pPixmap)
return; return;
pGC->ops->CopyArea((DrawablePtr)pPixmap, dst, pGC, sx, sy, sw, sh, dx, dy); pGC->ops->CopyArea((DrawablePtr) pPixmap, dst, pGC, sx, sy, sw, sh, dx,
dy);
FreeScratchPixmapHeader(pPixmap); FreeScratchPixmapHeader(pPixmap);
} else { }
else {
GCPtr putGC = GetScratchGC(depth, dst->pScreen); GCPtr putGC = GetScratchGC(depth, dst->pScreen);
if (!putGC) if (!putGC)
return; return;
pPixmap = (*dst->pScreen->CreatePixmap)(dst->pScreen, sw, sh, depth, pPixmap = (*dst->pScreen->CreatePixmap) (dst->pScreen, sw, sh, depth,
CREATE_PIXMAP_USAGE_SCRATCH); CREATE_PIXMAP_USAGE_SCRATCH);
if (!pPixmap) { if (!pPixmap) {
FreeScratchGC(putGC); FreeScratchGC(putGC);
return; return;
} }
ValidateGC(&pPixmap->drawable, putGC); ValidateGC(&pPixmap->drawable, putGC);
(*putGC->ops->PutImage)(&pPixmap->drawable, putGC, depth, -sx, -sy, w, h, 0, (*putGC->ops->PutImage) (&pPixmap->drawable, putGC, depth, -sx, -sy, w,
(format == XYPixmap) ? XYPixmap : ZPixmap, data); h, 0,
(format == XYPixmap) ? XYPixmap : ZPixmap,
data);
FreeScratchGC(putGC); FreeScratchGC(putGC);
if (format == XYBitmap) if (format == XYBitmap)
(void)(*pGC->ops->CopyPlane)(&pPixmap->drawable, dst, pGC, 0, 0, sw, sh, (void) (*pGC->ops->CopyPlane) (&pPixmap->drawable, dst, pGC, 0, 0,
dx, dy, 1L); sw, sh, dx, dy, 1L);
else else
(void)(*pGC->ops->CopyArea)(&pPixmap->drawable, dst, pGC, 0, 0, sw, sh, (void) (*pGC->ops->CopyArea) (&pPixmap->drawable, dst, pGC, 0, 0,
dx, dy); sw, sh, dx, dy);
(*pPixmap->drawable.pScreen->DestroyPixmap)(pPixmap); (*pPixmap->drawable.pScreen->DestroyPixmap) (pPixmap);
} }
} }
@ -523,6 +516,7 @@ ProcShmPutImage(ClientPtr client)
DrawablePtr pDraw; DrawablePtr pDraw;
long length; long length;
ShmDescPtr shmdesc; ShmDescPtr shmdesc;
REQUEST(xShmPutImageReq); REQUEST(xShmPutImageReq);
REQUEST_SIZE_MATCH(xShmPutImageReq); REQUEST_SIZE_MATCH(xShmPutImageReq);
@ -530,27 +524,23 @@ ProcShmPutImage(ClientPtr client)
VERIFY_SHMPTR(stuff->shmseg, stuff->offset, FALSE, shmdesc, client); VERIFY_SHMPTR(stuff->shmseg, stuff->offset, FALSE, shmdesc, client);
if ((stuff->sendEvent != xTrue) && (stuff->sendEvent != xFalse)) if ((stuff->sendEvent != xTrue) && (stuff->sendEvent != xFalse))
return BadValue; return BadValue;
if (stuff->format == XYBitmap) if (stuff->format == XYBitmap) {
{
if (stuff->depth != 1) if (stuff->depth != 1)
return BadMatch; return BadMatch;
length = PixmapBytePad(stuff->totalWidth, 1); length = PixmapBytePad(stuff->totalWidth, 1);
} }
else if (stuff->format == XYPixmap) else if (stuff->format == XYPixmap) {
{
if (pDraw->depth != stuff->depth) if (pDraw->depth != stuff->depth)
return BadMatch; return BadMatch;
length = PixmapBytePad(stuff->totalWidth, 1); length = PixmapBytePad(stuff->totalWidth, 1);
length *= stuff->depth; length *= stuff->depth;
} }
else if (stuff->format == ZPixmap) else if (stuff->format == ZPixmap) {
{
if (pDraw->depth != stuff->depth) if (pDraw->depth != stuff->depth)
return BadMatch; return BadMatch;
length = PixmapBytePad(stuff->totalWidth, stuff->depth); length = PixmapBytePad(stuff->totalWidth, stuff->depth);
} }
else else {
{
client->errorValue = stuff->format; client->errorValue = stuff->format;
return BadValue; return BadValue;
} }
@ -562,27 +552,23 @@ ProcShmPutImage(ClientPtr client)
* the version below ought to avoid it * the version below ought to avoid it
*/ */
if (stuff->totalHeight != 0 && if (stuff->totalHeight != 0 &&
length > (shmdesc->size - stuff->offset)/stuff->totalHeight) { length > (shmdesc->size - stuff->offset) / stuff->totalHeight) {
client->errorValue = stuff->totalWidth; client->errorValue = stuff->totalWidth;
return BadValue; return BadValue;
} }
if (stuff->srcX > stuff->totalWidth) if (stuff->srcX > stuff->totalWidth) {
{
client->errorValue = stuff->srcX; client->errorValue = stuff->srcX;
return BadValue; return BadValue;
} }
if (stuff->srcY > stuff->totalHeight) if (stuff->srcY > stuff->totalHeight) {
{
client->errorValue = stuff->srcY; client->errorValue = stuff->srcY;
return BadValue; return BadValue;
} }
if ((stuff->srcX + stuff->srcWidth) > stuff->totalWidth) if ((stuff->srcX + stuff->srcWidth) > stuff->totalWidth) {
{
client->errorValue = stuff->srcWidth; client->errorValue = stuff->srcWidth;
return BadValue; return BadValue;
} }
if ((stuff->srcY + stuff->srcHeight) > stuff->totalHeight) if ((stuff->srcY + stuff->srcHeight) > stuff->totalHeight) {
{
client->errorValue = stuff->srcHeight; client->errorValue = stuff->srcHeight;
return BadValue; return BadValue;
} }
@ -605,11 +591,9 @@ ProcShmPutImage(ClientPtr client)
stuff->totalWidth, stuff->totalHeight, stuff->totalWidth, stuff->totalHeight,
stuff->srcX, stuff->srcY, stuff->srcX, stuff->srcY,
stuff->srcWidth, stuff->srcHeight, stuff->srcWidth, stuff->srcHeight,
stuff->dstX, stuff->dstY, stuff->dstX, stuff->dstY, shmdesc->addr + stuff->offset);
shmdesc->addr + stuff->offset);
if (stuff->sendEvent) if (stuff->sendEvent) {
{
xShmCompletionEvent ev; xShmCompletionEvent ev;
ev.type = ShmCompletionCode; ev.type = ShmCompletionCode;
@ -637,43 +621,37 @@ ProcShmGetImage(ClientPtr client)
REQUEST(xShmGetImageReq); REQUEST(xShmGetImageReq);
REQUEST_SIZE_MATCH(xShmGetImageReq); REQUEST_SIZE_MATCH(xShmGetImageReq);
if ((stuff->format != XYPixmap) && (stuff->format != ZPixmap)) if ((stuff->format != XYPixmap) && (stuff->format != ZPixmap)) {
{
client->errorValue = stuff->format; client->errorValue = stuff->format;
return BadValue; return BadValue;
} }
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixReadAccess);
DixReadAccess);
if (rc != Success) if (rc != Success)
return rc; return rc;
VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client); VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client);
if (pDraw->type == DRAWABLE_WINDOW) if (pDraw->type == DRAWABLE_WINDOW) {
{ if ( /* check for being viewable */
if( /* check for being viewable */
!((WindowPtr) pDraw)->realized || !((WindowPtr) pDraw)->realized ||
/* check for being on screen */ /* check for being on screen */
pDraw->x + stuff->x < 0 || pDraw->x + stuff->x < 0 ||
pDraw->x + stuff->x + (int)stuff->width > pDraw->pScreen->width || pDraw->x + stuff->x + (int) stuff->width > pDraw->pScreen->width
pDraw->y + stuff->y < 0 || || pDraw->y + stuff->y < 0 ||
pDraw->y + stuff->y + (int)stuff->height > pDraw->pScreen->height || pDraw->y + stuff->y + (int) stuff->height >
pDraw->pScreen->height ||
/* check for being inside of border */ /* check for being inside of border */
stuff->x < - wBorderWidth((WindowPtr)pDraw) || stuff->x < -wBorderWidth((WindowPtr) pDraw) ||
stuff->x + (int)stuff->width > stuff->x + (int) stuff->width >
wBorderWidth((WindowPtr)pDraw) + (int)pDraw->width || wBorderWidth((WindowPtr) pDraw) + (int) pDraw->width ||
stuff->y < -wBorderWidth((WindowPtr)pDraw) || stuff->y < -wBorderWidth((WindowPtr) pDraw) ||
stuff->y + (int)stuff->height > stuff->y + (int) stuff->height >
wBorderWidth((WindowPtr)pDraw) + (int)pDraw->height wBorderWidth((WindowPtr) pDraw) + (int) pDraw->height)
)
return BadMatch; return BadMatch;
xgi.visual = wVisual(((WindowPtr)pDraw)); xgi.visual = wVisual(((WindowPtr) pDraw));
} }
else else {
{
if (stuff->x < 0 || if (stuff->x < 0 ||
stuff->x+(int)stuff->width > pDraw->width || stuff->x + (int) stuff->width > pDraw->width ||
stuff->y < 0 || stuff->y < 0 || stuff->y + (int) stuff->height > pDraw->height)
stuff->y+(int)stuff->height > pDraw->height
)
return BadMatch; return BadMatch;
xgi.visual = None; xgi.visual = None;
} }
@ -681,14 +659,12 @@ ProcShmGetImage(ClientPtr client)
xgi.length = 0; xgi.length = 0;
xgi.sequenceNumber = client->sequence; xgi.sequenceNumber = client->sequence;
xgi.depth = pDraw->depth; xgi.depth = pDraw->depth;
if(stuff->format == ZPixmap) if (stuff->format == ZPixmap) {
{
length = PixmapBytePad(stuff->width, pDraw->depth) * stuff->height; length = PixmapBytePad(stuff->width, pDraw->depth) * stuff->height;
} }
else else {
{
lenPer = PixmapBytePad(stuff->width, 1) * stuff->height; lenPer = PixmapBytePad(stuff->width, 1) * stuff->height;
plane = ((Mask)1) << (pDraw->depth - 1); plane = ((Mask) 1) << (pDraw->depth - 1);
/* only planes asked for */ /* only planes asked for */
length = lenPer * Ones(stuff->planeMask & (plane | (plane - 1))); length = lenPer * Ones(stuff->planeMask & (plane | (plane - 1)));
} }
@ -696,26 +672,21 @@ ProcShmGetImage(ClientPtr client)
VERIFY_SHMSIZE(shmdesc, stuff->offset, length, client); VERIFY_SHMSIZE(shmdesc, stuff->offset, length, client);
xgi.size = length; xgi.size = length;
if (length == 0) if (length == 0) {
{
/* nothing to do */ /* nothing to do */
} }
else if (stuff->format == ZPixmap) else if (stuff->format == ZPixmap) {
{ (*pDraw->pScreen->GetImage) (pDraw, stuff->x, stuff->y,
(*pDraw->pScreen->GetImage)(pDraw, stuff->x, stuff->y,
stuff->width, stuff->height, stuff->width, stuff->height,
stuff->format, stuff->planeMask, stuff->format, stuff->planeMask,
shmdesc->addr + stuff->offset); shmdesc->addr + stuff->offset);
} }
else else {
{
length = stuff->offset; length = stuff->offset;
for (; plane; plane >>= 1) for (; plane; plane >>= 1) {
{ if (stuff->planeMask & plane) {
if (stuff->planeMask & plane) (*pDraw->pScreen->GetImage) (pDraw,
{
(*pDraw->pScreen->GetImage)(pDraw,
stuff->x, stuff->y, stuff->x, stuff->y,
stuff->width, stuff->height, stuff->width, stuff->height,
stuff->format, plane, stuff->format, plane,
@ -731,7 +702,7 @@ ProcShmGetImage(ClientPtr client)
swapl(&xgi.visual); swapl(&xgi.visual);
swapl(&xgi.size); swapl(&xgi.size);
} }
WriteToClient(client, sizeof(xShmGetImageReply), (char *)&xgi); WriteToClient(client, sizeof(xShmGetImageReply), (char *) &xgi);
return Success; return Success;
} }
@ -747,12 +718,12 @@ ProcPanoramiXShmPutImage(ClientPtr client)
REQUEST(xShmPutImageReq); REQUEST(xShmPutImageReq);
REQUEST_SIZE_MATCH(xShmPutImageReq); REQUEST_SIZE_MATCH(xShmPutImageReq);
result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, result = dixLookupResourceByClass((pointer *) &draw, stuff->drawable,
XRC_DRAWABLE, client, DixWriteAccess); XRC_DRAWABLE, client, DixWriteAccess);
if (result != Success) if (result != Success)
return (result == BadValue) ? BadDrawable : result; return (result == BadValue) ? BadDrawable : result;
result = dixLookupResourceByType((pointer *)&gc, stuff->gc, result = dixLookupResourceByType((pointer *) &gc, stuff->gc,
XRT_GC, client, DixReadAccess); XRT_GC, client, DixReadAccess);
if (result != Success) if (result != Success)
return result; return result;
@ -764,7 +735,8 @@ ProcPanoramiXShmPutImage(ClientPtr client)
sendEvent = stuff->sendEvent; sendEvent = stuff->sendEvent;
stuff->sendEvent = 0; stuff->sendEvent = 0;
FOR_NSCREENS(j) { FOR_NSCREENS(j) {
if(!j) stuff->sendEvent = sendEvent; if (!j)
stuff->sendEvent = sendEvent;
stuff->drawable = draw->info[j].id; stuff->drawable = draw->info[j].id;
stuff->gc = gc->info[j].id; stuff->gc = gc->info[j].id;
if (isRoot) { if (isRoot) {
@ -772,7 +744,8 @@ ProcPanoramiXShmPutImage(ClientPtr client)
stuff->dstY = orig_y - screenInfo.screens[j]->y; stuff->dstY = orig_y - screenInfo.screens[j]->y;
} }
result = ProcShmPutImage(client); result = ProcShmPutImage(client);
if(result != Success) break; if (result != Success)
break;
} }
return result; return result;
} }
@ -799,7 +772,7 @@ ProcPanoramiXShmGetImage(ClientPtr client)
return BadValue; return BadValue;
} }
rc = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, rc = dixLookupResourceByClass((pointer *) &draw, stuff->drawable,
XRC_DRAWABLE, client, DixWriteAccess); XRC_DRAWABLE, client, DixWriteAccess);
if (rc != Success) if (rc != Success)
return (rc == BadValue) ? BadDrawable : rc; return (rc == BadValue) ? BadDrawable : rc;
@ -807,8 +780,7 @@ ProcPanoramiXShmGetImage(ClientPtr client)
if (draw->type == XRT_PIXMAP) if (draw->type == XRT_PIXMAP)
return ProcShmGetImage(client); return ProcShmGetImage(client);
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixReadAccess);
DixReadAccess);
if (rc != Success) if (rc != Success)
return rc; return rc;
@ -823,65 +795,69 @@ ProcPanoramiXShmGetImage(ClientPtr client)
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
if(isRoot) { if (isRoot) {
if( /* check for being onscreen */ if ( /* check for being onscreen */
x < 0 || x + w > PanoramiXPixWidth || x < 0 || x + w > PanoramiXPixWidth ||
y < 0 || y + h > PanoramiXPixHeight ) y < 0 || y + h > PanoramiXPixHeight)
return BadMatch; return BadMatch;
} else { }
if( /* check for being onscreen */ else {
if ( /* check for being onscreen */
screenInfo.screens[0]->x + pDraw->x + x < 0 || screenInfo.screens[0]->x + pDraw->x + x < 0 ||
screenInfo.screens[0]->x + pDraw->x + x + w > PanoramiXPixWidth || screenInfo.screens[0]->x + pDraw->x + x + w > PanoramiXPixWidth
screenInfo.screens[0]->y + pDraw->y + y < 0 || || screenInfo.screens[0]->y + pDraw->y + y < 0 ||
screenInfo.screens[0]->y + pDraw->y + y + h > PanoramiXPixHeight || screenInfo.screens[0]->y + pDraw->y + y + h > PanoramiXPixHeight
||
/* check for being inside of border */ /* check for being inside of border */
x < - wBorderWidth((WindowPtr)pDraw) || x < -wBorderWidth((WindowPtr) pDraw) ||
x + w > wBorderWidth((WindowPtr)pDraw) + (int)pDraw->width || x + w > wBorderWidth((WindowPtr) pDraw) + (int) pDraw->width ||
y < -wBorderWidth((WindowPtr)pDraw) || y < -wBorderWidth((WindowPtr) pDraw) ||
y + h > wBorderWidth ((WindowPtr)pDraw) + (int)pDraw->height) y + h > wBorderWidth((WindowPtr) pDraw) + (int) pDraw->height)
return BadMatch; return BadMatch;
} }
drawables = calloc(PanoramiXNumScreens, sizeof(DrawablePtr)); drawables = calloc(PanoramiXNumScreens, sizeof(DrawablePtr));
if(!drawables) if (!drawables)
return BadAlloc; return BadAlloc;
drawables[0] = pDraw; drawables[0] = pDraw;
FOR_NSCREENS_FORWARD_SKIP(i) { FOR_NSCREENS_FORWARD_SKIP(i) {
rc = dixLookupDrawable(drawables+i, draw->info[i].id, client, 0, rc = dixLookupDrawable(drawables + i, draw->info[i].id, client, 0,
DixReadAccess); DixReadAccess);
if (rc != Success) if (rc != Success) {
{
free(drawables); free(drawables);
return rc; return rc;
} }
} }
xgi.visual = wVisual(((WindowPtr)pDraw)); xgi.visual = wVisual(((WindowPtr) pDraw));
xgi.type = X_Reply; xgi.type = X_Reply;
xgi.length = 0; xgi.length = 0;
xgi.sequenceNumber = client->sequence; xgi.sequenceNumber = client->sequence;
xgi.depth = pDraw->depth; xgi.depth = pDraw->depth;
if(format == ZPixmap) { if (format == ZPixmap) {
widthBytesLine = PixmapBytePad(w, pDraw->depth); widthBytesLine = PixmapBytePad(w, pDraw->depth);
length = widthBytesLine * h; length = widthBytesLine * h;
} else { }
else {
widthBytesLine = PixmapBytePad(w, 1); widthBytesLine = PixmapBytePad(w, 1);
lenPer = widthBytesLine * h; lenPer = widthBytesLine * h;
plane = ((Mask)1) << (pDraw->depth - 1); plane = ((Mask) 1) << (pDraw->depth - 1);
length = lenPer * Ones(planemask & (plane | (plane - 1))); length = lenPer * Ones(planemask & (plane | (plane - 1)));
} }
VERIFY_SHMSIZE(shmdesc, stuff->offset, length, client); VERIFY_SHMSIZE(shmdesc, stuff->offset, length, client);
xgi.size = length; xgi.size = length;
if (length == 0) {/* nothing to do */ } if (length == 0) { /* nothing to do */
}
else if (format == ZPixmap) { else if (format == ZPixmap) {
XineramaGetImageData(drawables, x, y, w, h, format, planemask, XineramaGetImageData(drawables, x, y, w, h, format, planemask,
shmdesc->addr + stuff->offset, shmdesc->addr + stuff->offset,
widthBytesLine, isRoot); widthBytesLine, isRoot);
} else { }
else {
length = stuff->offset; length = stuff->offset;
for (; plane; plane >>= 1) { for (; plane; plane >>= 1) {
@ -901,7 +877,7 @@ ProcPanoramiXShmGetImage(ClientPtr client)
swapl(&xgi.visual); swapl(&xgi.visual);
swapl(&xgi.size); swapl(&xgi.size);
} }
WriteToClient(client, sizeof(xShmGetImageReply), (char *)&xgi); WriteToClient(client, sizeof(xShmGetImageReply), (char *) &xgi);
return Success; return Success;
} }
@ -915,6 +891,7 @@ ProcPanoramiXShmCreatePixmap(ClientPtr client)
DepthPtr pDepth; DepthPtr pDepth;
int i, j, result, rc; int i, j, result, rc;
ShmDescPtr shmdesc; ShmDescPtr shmdesc;
REQUEST(xShmCreatePixmapReq); REQUEST(xShmCreatePixmapReq);
unsigned int width, height, depth; unsigned int width, height, depth;
unsigned long size; unsigned long size;
@ -935,25 +912,23 @@ ProcPanoramiXShmCreatePixmap(ClientPtr client)
width = stuff->width; width = stuff->width;
height = stuff->height; height = stuff->height;
depth = stuff->depth; depth = stuff->depth;
if (!width || !height || !depth) if (!width || !height || !depth) {
{
client->errorValue = 0; client->errorValue = 0;
return BadValue; return BadValue;
} }
if (width > 32767 || height > 32767) if (width > 32767 || height > 32767)
return BadAlloc; return BadAlloc;
if (stuff->depth != 1) if (stuff->depth != 1) {
{
pDepth = pDraw->pScreen->allowedDepths; pDepth = pDraw->pScreen->allowedDepths;
for (i=0; i<pDraw->pScreen->numDepths; i++, pDepth++) for (i = 0; i < pDraw->pScreen->numDepths; i++, pDepth++)
if (pDepth->depth == stuff->depth) if (pDepth->depth == stuff->depth)
goto CreatePmap; goto CreatePmap;
client->errorValue = stuff->depth; client->errorValue = stuff->depth;
return BadValue; return BadValue;
} }
CreatePmap: CreatePmap:
size = PixmapBytePad(width, depth) * height; size = PixmapBytePad(width, depth) * height;
if (sizeof(size) == 4 && BitsPerPixel(depth) > 8) { if (sizeof(size) == 4 && BitsPerPixel(depth) > 8) {
if (size < width * height) if (size < width * height)
@ -965,7 +940,7 @@ CreatePmap:
VERIFY_SHMSIZE(shmdesc, stuff->offset, size, client); VERIFY_SHMSIZE(shmdesc, stuff->offset, size, client);
if(!(newPix = malloc(sizeof(PanoramiXRes)))) if (!(newPix = malloc(sizeof(PanoramiXRes))))
return BadAlloc; return BadAlloc;
newPix->type = XRT_PIXMAP; newPix->type = XRT_PIXMAP;
@ -976,33 +951,39 @@ CreatePmap:
FOR_NSCREENS(j) { FOR_NSCREENS(j) {
ShmScrPrivateRec *screen_priv; ShmScrPrivateRec *screen_priv;
pScreen = screenInfo.screens[j]; pScreen = screenInfo.screens[j];
screen_priv = ShmGetScreenPriv(pScreen); screen_priv = ShmGetScreenPriv(pScreen);
pMap = (*screen_priv->shmFuncs->CreatePixmap)(pScreen, pMap = (*screen_priv->shmFuncs->CreatePixmap) (pScreen,
stuff->width, stuff->height, stuff->depth, stuff->width,
shmdesc->addr + stuff->offset); stuff->height,
stuff->depth,
shmdesc->addr +
stuff->offset);
if (pMap) { if (pMap) {
dixSetPrivate(&pMap->devPrivates, shmPixmapPrivateKey, shmdesc); dixSetPrivate(&pMap->devPrivates, shmPixmapPrivateKey, shmdesc);
shmdesc->refcnt++; shmdesc->refcnt++;
pMap->drawable.serialNumber = NEXT_SERIAL_NUMBER; pMap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
pMap->drawable.id = newPix->info[j].id; pMap->drawable.id = newPix->info[j].id;
if (!AddResource(newPix->info[j].id, RT_PIXMAP, (pointer)pMap)) { if (!AddResource(newPix->info[j].id, RT_PIXMAP, (pointer) pMap)) {
result = BadAlloc; result = BadAlloc;
break; break;
} }
} else { }
else {
result = BadAlloc; result = BadAlloc;
break; break;
} }
} }
if(result == BadAlloc) { if (result == BadAlloc) {
while(j--) while (j--)
FreeResource(newPix->info[j].id, RT_NONE); FreeResource(newPix->info[j].id, RT_NONE);
free(newPix); free(newPix);
} else }
else
AddResource(stuff->pid, XRT_PIXMAP, newPix); AddResource(stuff->pid, XRT_PIXMAP, newPix);
return result; return result;
@ -1010,18 +991,20 @@ CreatePmap:
#endif #endif
static PixmapPtr static PixmapPtr
fbShmCreatePixmap (ScreenPtr pScreen, fbShmCreatePixmap(ScreenPtr pScreen,
int width, int height, int depth, char *addr) int width, int height, int depth, char *addr)
{ {
PixmapPtr pPixmap; PixmapPtr pPixmap;
pPixmap = (*pScreen->CreatePixmap)(pScreen, 0, 0, pScreen->rootDepth, 0); pPixmap = (*pScreen->CreatePixmap) (pScreen, 0, 0, pScreen->rootDepth, 0);
if (!pPixmap) if (!pPixmap)
return NullPixmap; return NullPixmap;
if (!(*pScreen->ModifyPixmapHeader)(pPixmap, width, height, depth, if (!(*pScreen->ModifyPixmapHeader) (pPixmap, width, height, depth,
BitsPerPixel(depth), PixmapBytePad(width, depth), (pointer)addr)) { BitsPerPixel(depth),
(*pScreen->DestroyPixmap)(pPixmap); PixmapBytePad(width, depth),
(pointer) addr)) {
(*pScreen->DestroyPixmap) (pPixmap);
return NullPixmap; return NullPixmap;
} }
return pPixmap; return pPixmap;
@ -1036,6 +1019,7 @@ ProcShmCreatePixmap(ClientPtr client)
int i, rc; int i, rc;
ShmDescPtr shmdesc; ShmDescPtr shmdesc;
ShmScrPrivateRec *screen_priv; ShmScrPrivateRec *screen_priv;
REQUEST(xShmCreatePixmapReq); REQUEST(xShmCreatePixmapReq);
unsigned int width, height, depth; unsigned int width, height, depth;
unsigned long size; unsigned long size;
@ -1055,25 +1039,23 @@ ProcShmCreatePixmap(ClientPtr client)
width = stuff->width; width = stuff->width;
height = stuff->height; height = stuff->height;
depth = stuff->depth; depth = stuff->depth;
if (!width || !height || !depth) if (!width || !height || !depth) {
{
client->errorValue = 0; client->errorValue = 0;
return BadValue; return BadValue;
} }
if (width > 32767 || height > 32767) if (width > 32767 || height > 32767)
return BadAlloc; return BadAlloc;
if (stuff->depth != 1) if (stuff->depth != 1) {
{
pDepth = pDraw->pScreen->allowedDepths; pDepth = pDraw->pScreen->allowedDepths;
for (i=0; i<pDraw->pScreen->numDepths; i++, pDepth++) for (i = 0; i < pDraw->pScreen->numDepths; i++, pDepth++)
if (pDepth->depth == stuff->depth) if (pDepth->depth == stuff->depth)
goto CreatePmap; goto CreatePmap;
client->errorValue = stuff->depth; client->errorValue = stuff->depth;
return BadValue; return BadValue;
} }
CreatePmap: CreatePmap:
size = PixmapBytePad(width, depth) * height; size = PixmapBytePad(width, depth) * height;
if (sizeof(size) == 4 && BitsPerPixel(depth) > 8) { if (sizeof(size) == 4 && BitsPerPixel(depth) > 8) {
if (size < width * height) if (size < width * height)
@ -1085,12 +1067,11 @@ CreatePmap:
VERIFY_SHMSIZE(shmdesc, stuff->offset, size, client); VERIFY_SHMSIZE(shmdesc, stuff->offset, size, client);
screen_priv = ShmGetScreenPriv(pDraw->pScreen); screen_priv = ShmGetScreenPriv(pDraw->pScreen);
pMap = (*screen_priv->shmFuncs->CreatePixmap)( pMap = (*screen_priv->shmFuncs->CreatePixmap) (pDraw->pScreen, stuff->width,
pDraw->pScreen, stuff->width,
stuff->height, stuff->depth, stuff->height, stuff->depth,
shmdesc->addr + stuff->offset); shmdesc->addr +
if (pMap) stuff->offset);
{ if (pMap) {
rc = XaceHook(XACE_RESOURCE_ACCESS, client, stuff->pid, RT_PIXMAP, rc = XaceHook(XACE_RESOURCE_ACCESS, client, stuff->pid, RT_PIXMAP,
pMap, RT_NONE, NULL, DixCreateAccess); pMap, RT_NONE, NULL, DixCreateAccess);
if (rc != Success) { if (rc != Success) {
@ -1101,8 +1082,7 @@ CreatePmap:
shmdesc->refcnt++; shmdesc->refcnt++;
pMap->drawable.serialNumber = NEXT_SERIAL_NUMBER; pMap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
pMap->drawable.id = stuff->pid; pMap->drawable.id = stuff->pid;
if (AddResource(stuff->pid, RT_PIXMAP, (pointer)pMap)) if (AddResource(stuff->pid, RT_PIXMAP, (pointer) pMap)) {
{
return Success; return Success;
} }
} }
@ -1110,11 +1090,10 @@ CreatePmap:
} }
static int static int
ProcShmDispatch (ClientPtr client) ProcShmDispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
switch (stuff->data) switch (stuff->data) {
{
case X_ShmQueryVersion: case X_ShmQueryVersion:
return ProcShmQueryVersion(client); return ProcShmQueryVersion(client);
case X_ShmAttach: case X_ShmAttach:
@ -1123,19 +1102,19 @@ ProcShmDispatch (ClientPtr client)
return ProcShmDetach(client); return ProcShmDetach(client);
case X_ShmPutImage: case X_ShmPutImage:
#ifdef PANORAMIX #ifdef PANORAMIX
if ( !noPanoramiXExtension ) if (!noPanoramiXExtension)
return ProcPanoramiXShmPutImage(client); return ProcPanoramiXShmPutImage(client);
#endif #endif
return ProcShmPutImage(client); return ProcShmPutImage(client);
case X_ShmGetImage: case X_ShmGetImage:
#ifdef PANORAMIX #ifdef PANORAMIX
if ( !noPanoramiXExtension ) if (!noPanoramiXExtension)
return ProcPanoramiXShmGetImage(client); return ProcPanoramiXShmGetImage(client);
#endif #endif
return ProcShmGetImage(client); return ProcShmGetImage(client);
case X_ShmCreatePixmap: case X_ShmCreatePixmap:
#ifdef PANORAMIX #ifdef PANORAMIX
if ( !noPanoramiXExtension ) if (!noPanoramiXExtension)
return ProcPanoramiXShmCreatePixmap(client); return ProcPanoramiXShmCreatePixmap(client);
#endif #endif
return ProcShmCreatePixmap(client); return ProcShmCreatePixmap(client);
@ -1145,7 +1124,7 @@ ProcShmDispatch (ClientPtr client)
} }
static void static void
SShmCompletionEvent(xShmCompletionEvent *from, xShmCompletionEvent *to) SShmCompletionEvent(xShmCompletionEvent * from, xShmCompletionEvent * to)
{ {
to->type = from->type; to->type = from->type;
cpswaps(from->sequenceNumber, to->sequenceNumber); cpswaps(from->sequenceNumber, to->sequenceNumber);
@ -1240,11 +1219,10 @@ SProcShmCreatePixmap(ClientPtr client)
} }
static int static int
SProcShmDispatch (ClientPtr client) SProcShmDispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
switch (stuff->data) switch (stuff->data) {
{
case X_ShmQueryVersion: case X_ShmQueryVersion:
return SProcShmQueryVersion(client); return SProcShmQueryVersion(client);
case X_ShmAttach: case X_ShmAttach:
@ -1269,8 +1247,7 @@ ShmExtensionInit(INITARGS)
int i; int i;
#ifdef MUST_CHECK_FOR_SHM_SYSCALL #ifdef MUST_CHECK_FOR_SHM_SYSCALL
if (!CheckForShmSyscall()) if (!CheckForShmSyscall()) {
{
ErrorF("MIT-SHM extension disabled due to lack of kernel support\n"); ErrorF("MIT-SHM extension disabled due to lack of kernel support\n");
return; return;
} }
@ -1282,19 +1259,20 @@ ShmExtensionInit(INITARGS)
sharedPixmaps = xFalse; sharedPixmaps = xFalse;
{ {
sharedPixmaps = xTrue; sharedPixmaps = xTrue;
for (i = 0; i < screenInfo.numScreens; i++) for (i = 0; i < screenInfo.numScreens; i++) {
{ ShmScrPrivateRec *screen_priv =
ShmScrPrivateRec *screen_priv = ShmInitScreenPriv(screenInfo.screens[i]); ShmInitScreenPriv(screenInfo.screens[i]);
if (!screen_priv->shmFuncs) if (!screen_priv->shmFuncs)
screen_priv->shmFuncs = &miFuncs; screen_priv->shmFuncs = &miFuncs;
if (!screen_priv->shmFuncs->CreatePixmap) if (!screen_priv->shmFuncs->CreatePixmap)
sharedPixmaps = xFalse; sharedPixmaps = xFalse;
} }
if (sharedPixmaps) if (sharedPixmaps)
for (i = 0; i < screenInfo.numScreens; i++) for (i = 0; i < screenInfo.numScreens; i++) {
{ ShmScrPrivateRec *screen_priv =
ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(screenInfo.screens[i]); ShmGetScreenPriv(screenInfo.screens[i]);
screen_priv->destroyPixmap = screenInfo.screens[i]->DestroyPixmap; screen_priv->destroyPixmap =
screenInfo.screens[i]->DestroyPixmap;
screenInfo.screens[i]->DestroyPixmap = ShmDestroyPixmap; screenInfo.screens[i]->DestroyPixmap = ShmDestroyPixmap;
} }
} }
@ -1302,9 +1280,8 @@ ShmExtensionInit(INITARGS)
if (ShmSegType && if (ShmSegType &&
(extEntry = AddExtension(SHMNAME, ShmNumberEvents, ShmNumberErrors, (extEntry = AddExtension(SHMNAME, ShmNumberEvents, ShmNumberErrors,
ProcShmDispatch, SProcShmDispatch, ProcShmDispatch, SProcShmDispatch,
ShmResetProc, StandardMinorOpcode))) ShmResetProc, StandardMinorOpcode))) {
{ ShmReqCode = (unsigned char) extEntry->base;
ShmReqCode = (unsigned char)extEntry->base;
ShmCompletionCode = extEntry->eventBase; ShmCompletionCode = extEntry->eventBase;
BadShmSegCode = extEntry->errorBase; BadShmSegCode = extEntry->errorBase;
SetResourceTypeErrorValue(ShmSegType, BadShmSegCode); SetResourceTypeErrorValue(ShmSegType, BadShmSegCode);

View File

@ -52,15 +52,15 @@
char * /* addr */ char * /* addr */
typedef struct _ShmFuncs { typedef struct _ShmFuncs {
PixmapPtr (* CreatePixmap)(XSHM_CREATE_PIXMAP_ARGS); PixmapPtr (*CreatePixmap) (XSHM_CREATE_PIXMAP_ARGS);
void (* PutImage)(XSHM_PUT_IMAGE_ARGS); void (*PutImage) (XSHM_PUT_IMAGE_ARGS);
} ShmFuncs, *ShmFuncsPtr; } ShmFuncs, *ShmFuncsPtr;
extern _X_EXPORT void extern _X_EXPORT void
ShmRegisterFuncs(ScreenPtr pScreen, ShmFuncsPtr funcs); ShmRegisterFuncs(ScreenPtr pScreen, ShmFuncsPtr funcs);
extern _X_EXPORT void extern _X_EXPORT void
ShmRegisterFbFuncs(ScreenPtr pScreen); ShmRegisterFbFuncs(ScreenPtr pScreen);
extern _X_EXPORT RESTYPE ShmSegType; extern _X_EXPORT RESTYPE ShmSegType;
extern _X_EXPORT int ShmCompletionCode; extern _X_EXPORT int ShmCompletionCode;

View File

@ -45,8 +45,7 @@ typedef struct _Sertafied {
TimeStamp revive; TimeStamp revive;
ClientPtr pClient; ClientPtr pClient;
XID id; XID id;
void (*notifyFunc)( void (*notifyFunc) (ClientPtr /* client */ ,
ClientPtr /* client */,
pointer /* closure */ pointer /* closure */
); );
@ -58,71 +57,62 @@ static RESTYPE SertafiedResType;
static Bool BlockHandlerRegistered; static Bool BlockHandlerRegistered;
static int SertafiedGeneration; static int SertafiedGeneration;
static void ClientAwaken( static void ClientAwaken(ClientPtr /* client */ ,
ClientPtr /* client */,
pointer /* closure */ pointer /* closure */
); );
static int SertafiedDelete( static int SertafiedDelete(pointer /* value */ ,
pointer /* value */,
XID /* id */ XID /* id */
); );
static void SertafiedBlockHandler( static void SertafiedBlockHandler(pointer /* data */ ,
pointer /* data */, OSTimePtr /* wt */ ,
OSTimePtr /* wt */,
pointer /* LastSelectMask */ pointer /* LastSelectMask */
); );
static void SertafiedWakeupHandler( static void SertafiedWakeupHandler(pointer /* data */ ,
pointer /* data */, int /* i */ ,
int /* i */,
pointer /* LastSelectMask */ pointer /* LastSelectMask */
); );
int int
ClientSleepUntil (ClientPtr client, ClientSleepUntil(ClientPtr client,
TimeStamp *revive, TimeStamp *revive,
void (*notifyFunc)(ClientPtr, pointer), void (*notifyFunc) (ClientPtr, pointer), pointer closure)
pointer closure)
{ {
SertafiedPtr pRequest, pReq, pPrev; SertafiedPtr pRequest, pReq, pPrev;
if (SertafiedGeneration != serverGeneration) if (SertafiedGeneration != serverGeneration) {
{ SertafiedResType = CreateNewResourceType(SertafiedDelete,
SertafiedResType = CreateNewResourceType (SertafiedDelete,
"ClientSleep"); "ClientSleep");
if (!SertafiedResType) if (!SertafiedResType)
return FALSE; return FALSE;
SertafiedGeneration = serverGeneration; SertafiedGeneration = serverGeneration;
BlockHandlerRegistered = FALSE; BlockHandlerRegistered = FALSE;
} }
pRequest = malloc(sizeof (SertafiedRec)); pRequest = malloc(sizeof(SertafiedRec));
if (!pRequest) if (!pRequest)
return FALSE; return FALSE;
pRequest->pClient = client; pRequest->pClient = client;
pRequest->revive = *revive; pRequest->revive = *revive;
pRequest->id = FakeClientID (client->index); pRequest->id = FakeClientID(client->index);
pRequest->closure = closure; pRequest->closure = closure;
if (!BlockHandlerRegistered) if (!BlockHandlerRegistered) {
{ if (!RegisterBlockAndWakeupHandlers(SertafiedBlockHandler,
if (!RegisterBlockAndWakeupHandlers (SertafiedBlockHandler,
SertafiedWakeupHandler, SertafiedWakeupHandler,
(pointer) 0)) (pointer) 0)) {
{
free(pRequest); free(pRequest);
return FALSE; return FALSE;
} }
BlockHandlerRegistered = TRUE; BlockHandlerRegistered = TRUE;
} }
pRequest->notifyFunc = 0; pRequest->notifyFunc = 0;
if (!AddResource (pRequest->id, SertafiedResType, (pointer) pRequest)) if (!AddResource(pRequest->id, SertafiedResType, (pointer) pRequest))
return FALSE; return FALSE;
if (!notifyFunc) if (!notifyFunc)
notifyFunc = ClientAwaken; notifyFunc = ClientAwaken;
pRequest->notifyFunc = notifyFunc; pRequest->notifyFunc = notifyFunc;
/* Insert into time-ordered queue, with earliest activation time coming first. */ /* Insert into time-ordered queue, with earliest activation time coming first. */
pPrev = 0; pPrev = 0;
for (pReq = pPending; pReq; pReq = pReq->next) for (pReq = pPending; pReq; pReq = pReq->next) {
{ if (CompareTimeStamps(pReq->revive, *revive) == LATER)
if (CompareTimeStamps (pReq->revive, *revive) == LATER)
break; break;
pPrev = pReq; pPrev = pReq;
} }
@ -131,28 +121,26 @@ ClientSleepUntil (ClientPtr client,
else else
pPending = pRequest; pPending = pRequest;
pRequest->next = pReq; pRequest->next = pReq;
IgnoreClient (client); IgnoreClient(client);
return TRUE; return TRUE;
} }
static void static void
ClientAwaken (ClientPtr client, pointer closure) ClientAwaken(ClientPtr client, pointer closure)
{ {
if (!client->clientGone) if (!client->clientGone)
AttendClient (client); AttendClient(client);
} }
static int static int
SertafiedDelete (pointer value, XID id) SertafiedDelete(pointer value, XID id)
{ {
SertafiedPtr pRequest = (SertafiedPtr)value; SertafiedPtr pRequest = (SertafiedPtr) value;
SertafiedPtr pReq, pPrev; SertafiedPtr pReq, pPrev;
pPrev = 0; pPrev = 0;
for (pReq = pPending; pReq; pPrev = pReq, pReq = pReq->next) for (pReq = pPending; pReq; pPrev = pReq, pReq = pReq->next)
if (pReq == pRequest) if (pReq == pRequest) {
{
if (pPrev) if (pPrev)
pPrev->next = pReq->next; pPrev->next = pReq->next;
else else
@ -166,7 +154,7 @@ SertafiedDelete (pointer value, XID id)
} }
static void static void
SertafiedBlockHandler (pointer data, OSTimePtr wt, pointer LastSelectMask) SertafiedBlockHandler(pointer data, OSTimePtr wt, pointer LastSelectMask)
{ {
SertafiedPtr pReq, pNext; SertafiedPtr pReq, pNext;
unsigned long delay; unsigned long delay;
@ -174,52 +162,48 @@ SertafiedBlockHandler (pointer data, OSTimePtr wt, pointer LastSelectMask)
if (!pPending) if (!pPending)
return; return;
now.milliseconds = GetTimeInMillis (); now.milliseconds = GetTimeInMillis();
now.months = currentTime.months; now.months = currentTime.months;
if ((int) (now.milliseconds - currentTime.milliseconds) < 0) if ((int) (now.milliseconds - currentTime.milliseconds) < 0)
now.months++; now.months++;
for (pReq = pPending; pReq; pReq = pNext) for (pReq = pPending; pReq; pReq = pNext) {
{
pNext = pReq->next; pNext = pReq->next;
if (CompareTimeStamps (pReq->revive, now) == LATER) if (CompareTimeStamps(pReq->revive, now) == LATER)
break; break;
FreeResource (pReq->id, RT_NONE); FreeResource(pReq->id, RT_NONE);
/* AttendClient() may have been called via the resource delete /* AttendClient() may have been called via the resource delete
* function so a client may have input to be processed and so * function so a client may have input to be processed and so
* set delay to 0 to prevent blocking in WaitForSomething(). * set delay to 0 to prevent blocking in WaitForSomething().
*/ */
AdjustWaitForDelay (wt, 0); AdjustWaitForDelay(wt, 0);
} }
pReq = pPending; pReq = pPending;
if (!pReq) if (!pReq)
return; return;
delay = pReq->revive.milliseconds - now.milliseconds; delay = pReq->revive.milliseconds - now.milliseconds;
AdjustWaitForDelay (wt, delay); AdjustWaitForDelay(wt, delay);
} }
static void static void
SertafiedWakeupHandler (pointer data, int i, pointer LastSelectMask) SertafiedWakeupHandler(pointer data, int i, pointer LastSelectMask)
{ {
SertafiedPtr pReq, pNext; SertafiedPtr pReq, pNext;
TimeStamp now; TimeStamp now;
now.milliseconds = GetTimeInMillis (); now.milliseconds = GetTimeInMillis();
now.months = currentTime.months; now.months = currentTime.months;
if ((int) (now.milliseconds - currentTime.milliseconds) < 0) if ((int) (now.milliseconds - currentTime.milliseconds) < 0)
now.months++; now.months++;
for (pReq = pPending; pReq; pReq = pNext) for (pReq = pPending; pReq; pReq = pNext) {
{
pNext = pReq->next; pNext = pReq->next;
if (CompareTimeStamps (pReq->revive, now) == LATER) if (CompareTimeStamps(pReq->revive, now) == LATER)
break; break;
FreeResource (pReq->id, RT_NONE); FreeResource(pReq->id, RT_NONE);
} }
if (!pPending) if (!pPending) {
{ RemoveBlockAndWakeupHandlers(SertafiedBlockHandler,
RemoveBlockAndWakeupHandlers (SertafiedBlockHandler, SertafiedWakeupHandler, (pointer) 0);
SertafiedWakeupHandler,
(pointer) 0);
BlockHandlerRegistered = FALSE; BlockHandlerRegistered = FALSE;
} }
} }

View File

@ -33,14 +33,10 @@
#include "dix.h" #include "dix.h"
extern int ClientSleepUntil( extern int ClientSleepUntil(ClientPtr client,
ClientPtr client,
TimeStamp *revive, TimeStamp *revive,
void (*notifyFunc)( void (*notifyFunc) (ClientPtr /* client */ ,
ClientPtr /* client */,
pointer /* closure */ pointer /* closure */
), ), pointer Closure);
pointer Closure
);
#endif #endif

File diff suppressed because it is too large Load Diff

View File

@ -27,7 +27,7 @@
#include "misync.h" #include "misync.h"
extern _X_EXPORT int extern _X_EXPORT int
SyncVerifyFence(SyncFence **ppFence, XID fid, ClientPtr client, Mask mode); SyncVerifyFence(SyncFence ** ppFence, XID fid, ClientPtr client, Mask mode);
#define VERIFY_SYNC_FENCE(pFence, fid, client, mode) \ #define VERIFY_SYNC_FENCE(pFence, fid, client, mode) \
do { \ do { \
@ -44,4 +44,3 @@ SyncVerifyFence(SyncFence **ppFence, XID fid, ClientPtr client, Mask mode);
} while (0) } while (0)
#endif /* _SYNCSDK_H_ */ #endif /* _SYNCSDK_H_ */

View File

@ -71,19 +71,15 @@ typedef struct _SysCounterInfo {
CARD64 bracket_greater; CARD64 bracket_greater;
CARD64 bracket_less; CARD64 bracket_less;
SyncCounterType counterType; /* how can this counter change */ SyncCounterType counterType; /* how can this counter change */
void (*QueryValue)( void (*QueryValue) (pointer /*pCounter */ ,
pointer /*pCounter*/, CARD64 * /*freshvalue */
CARD64 * /*freshvalue*/ );
); void (*BracketValues) (pointer /*pCounter */ ,
void (*BracketValues)( CARD64 * /*lessthan */ ,
pointer /*pCounter*/, CARD64 * /*greaterthan */
CARD64 * /*lessthan*/, );
CARD64 * /*greaterthan*/
);
} SysCounterInfo; } SysCounterInfo;
typedef struct _SyncAlarmClientList { typedef struct _SyncAlarmClientList {
ClientPtr client; ClientPtr client;
XID delete_id; XID delete_id;
@ -117,28 +113,33 @@ typedef union {
SyncAwait await; SyncAwait await;
} SyncAwaitUnion; } SyncAwaitUnion;
extern pointer SyncCreateSystemCounter( extern pointer SyncCreateSystemCounter(const char * /* name */ ,
const char */* name */, CARD64 /* inital_value */ ,
CARD64 /* inital_value */, CARD64 /* resolution */ ,
CARD64 /* resolution */, SyncCounterType
SyncCounterType /* change characterization */, /* change characterization */ ,
void (* /*QueryValue*/ ) ( void (* /*QueryValue */ )(
pointer /* pCounter */, pointer
CARD64 * /* pValue_return */), /* XXX prototype */ /* pCounter */
void (* /*BracketValues*/) ( ,
pointer /* pCounter */, CARD64 * /* pValue_return */ ), /* XXX prototype */
CARD64 * /* pbracket_less */, void (* /*BracketValues */ )(
CARD64 * /* pbracket_greater */) pointer
); /* pCounter */
,
CARD64 *
/* pbracket_less */
,
CARD64 *
/* pbracket_greater */
)
);
extern void SyncChangeCounter( extern void SyncChangeCounter(SyncCounter * /* pCounter */ ,
SyncCounter * /* pCounter*/,
CARD64 /* new_value */ CARD64 /* new_value */
); );
extern void SyncDestroySystemCounter( extern void SyncDestroySystemCounter(pointer pCounter);
pointer pCounter
);
extern void InitServertime(void); extern void InitServertime(void);

View File

@ -34,11 +34,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <X11/Xtrans/Xtrans.h> #include <X11/Xtrans/Xtrans.h>
#include "../os/osdep.h" #include "../os/osdep.h"
_X_EXPORT CallbackListPtr XaceHooks[XACE_NUM_HOOKS] = {0}; _X_EXPORT CallbackListPtr XaceHooks[XACE_NUM_HOOKS] = { 0 };
/* Special-cased hook functions. Called by Xserver. /* Special-cased hook functions. Called by Xserver.
*/ */
int XaceHookDispatch(ClientPtr client, int major) int
XaceHookDispatch(ClientPtr client, int major)
{ {
/* Call the audit begin callback, there is no return value. */ /* Call the audit begin callback, there is no return value. */
XaceAuditRec rec = { client, 0 }; XaceAuditRec rec = { client, 0 };
@ -49,7 +50,8 @@ int XaceHookDispatch(ClientPtr client, int major)
XaceCoreDispatchRec rec = { client, Success /* default allow */ }; XaceCoreDispatchRec rec = { client, Success /* default allow */ };
CallCallbacks(&XaceHooks[XACE_CORE_DISPATCH], &rec); CallCallbacks(&XaceHooks[XACE_CORE_DISPATCH], &rec);
return rec.status; return rec.status;
} else { }
else {
/* Call the extension dispatch hook */ /* Call the extension dispatch hook */
ExtensionEntry *ext = GetExtensionEntry(major); ExtensionEntry *ext = GetExtensionEntry(major);
XaceExtAccessRec rec = { client, ext, DixUseAccess, Success }; XaceExtAccessRec rec = { client, ext, DixUseAccess, Success };
@ -60,7 +62,8 @@ int XaceHookDispatch(ClientPtr client, int major)
} }
} }
int XaceHookPropertyAccess(ClientPtr client, WindowPtr pWin, int
XaceHookPropertyAccess(ClientPtr client, WindowPtr pWin,
PropertyPtr *ppProp, Mask access_mode) PropertyPtr *ppProp, Mask access_mode)
{ {
XacePropertyAccessRec rec = { client, pWin, ppProp, access_mode, Success }; XacePropertyAccessRec rec = { client, pWin, ppProp, access_mode, Success };
@ -68,15 +71,16 @@ int XaceHookPropertyAccess(ClientPtr client, WindowPtr pWin,
return rec.status; return rec.status;
} }
int XaceHookSelectionAccess(ClientPtr client, int
Selection **ppSel, Mask access_mode) XaceHookSelectionAccess(ClientPtr client, Selection ** ppSel, Mask access_mode)
{ {
XaceSelectionAccessRec rec = { client, ppSel, access_mode, Success }; XaceSelectionAccessRec rec = { client, ppSel, access_mode, Success };
CallCallbacks(&XaceHooks[XACE_SELECTION_ACCESS], &rec); CallCallbacks(&XaceHooks[XACE_SELECTION_ACCESS], &rec);
return rec.status; return rec.status;
} }
void XaceHookAuditEnd(ClientPtr ptr, int result) void
XaceHookAuditEnd(ClientPtr ptr, int result)
{ {
XaceAuditRec rec = { ptr, result }; XaceAuditRec rec = { ptr, result };
/* call callbacks, there is no return value. */ /* call callbacks, there is no return value. */
@ -85,7 +89,8 @@ void XaceHookAuditEnd(ClientPtr ptr, int result)
/* Entry point for hook functions. Called by Xserver. /* Entry point for hook functions. Called by Xserver.
*/ */
int XaceHook(int hook, ...) int
XaceHook(int hook, ...)
{ {
union { union {
XaceResourceAccessRec res; XaceResourceAccessRec res;
@ -112,8 +117,7 @@ int XaceHook(int hook, ...)
* the arguments and integer return parameter, or in some cases just * the arguments and integer return parameter, or in some cases just
* sets calldata directly to a single argument (with no return result) * sets calldata directly to a single argument (with no return result)
*/ */
switch (hook) switch (hook) {
{
case XACE_RESOURCE_ACCESS: case XACE_RESOURCE_ACCESS:
u.res.client = va_arg(ap, ClientPtr); u.res.client = va_arg(ap, ClientPtr);
u.res.id = va_arg(ap, XID); u.res.id = va_arg(ap, XID);
@ -122,6 +126,7 @@ int XaceHook(int hook, ...)
u.res.ptype = va_arg(ap, RESTYPE); u.res.ptype = va_arg(ap, RESTYPE);
u.res.parent = va_arg(ap, pointer); u.res.parent = va_arg(ap, pointer);
u.res.access_mode = va_arg(ap, Mask); u.res.access_mode = va_arg(ap, Mask);
u.res.status = Success; /* default allow */ u.res.status = Success; /* default allow */
prv = &u.res.status; prv = &u.res.status;
break; break;
@ -129,6 +134,7 @@ int XaceHook(int hook, ...)
u.dev.client = va_arg(ap, ClientPtr); u.dev.client = va_arg(ap, ClientPtr);
u.dev.dev = va_arg(ap, DeviceIntPtr); u.dev.dev = va_arg(ap, DeviceIntPtr);
u.dev.access_mode = va_arg(ap, Mask); u.dev.access_mode = va_arg(ap, Mask);
u.dev.status = Success; /* default allow */ u.dev.status = Success; /* default allow */
prv = &u.dev.status; prv = &u.dev.status;
break; break;
@ -136,16 +142,20 @@ int XaceHook(int hook, ...)
u.send.client = va_arg(ap, ClientPtr); u.send.client = va_arg(ap, ClientPtr);
u.send.dev = va_arg(ap, DeviceIntPtr); u.send.dev = va_arg(ap, DeviceIntPtr);
u.send.pWin = va_arg(ap, WindowPtr); u.send.pWin = va_arg(ap, WindowPtr);
u.send.events = va_arg(ap, xEventPtr); u.send.events = va_arg(ap, xEventPtr);
u.send.count = va_arg(ap, int); u.send.count = va_arg(ap, int);
u.send.status = Success; /* default allow */ u.send.status = Success; /* default allow */
prv = &u.send.status; prv = &u.send.status;
break; break;
case XACE_RECEIVE_ACCESS: case XACE_RECEIVE_ACCESS:
u.recv.client = va_arg(ap, ClientPtr); u.recv.client = va_arg(ap, ClientPtr);
u.recv.pWin = va_arg(ap, WindowPtr); u.recv.pWin = va_arg(ap, WindowPtr);
u.recv.events = va_arg(ap, xEventPtr); u.recv.events = va_arg(ap, xEventPtr);
u.recv.count = va_arg(ap, int); u.recv.count = va_arg(ap, int);
u.recv.status = Success; /* default allow */ u.recv.status = Success; /* default allow */
prv = &u.recv.status; prv = &u.recv.status;
break; break;
@ -153,12 +163,14 @@ int XaceHook(int hook, ...)
u.client.client = va_arg(ap, ClientPtr); u.client.client = va_arg(ap, ClientPtr);
u.client.target = va_arg(ap, ClientPtr); u.client.target = va_arg(ap, ClientPtr);
u.client.access_mode = va_arg(ap, Mask); u.client.access_mode = va_arg(ap, Mask);
u.client.status = Success; /* default allow */ u.client.status = Success; /* default allow */
prv = &u.client.status; prv = &u.client.status;
break; break;
case XACE_EXT_ACCESS: case XACE_EXT_ACCESS:
u.ext.client = va_arg(ap, ClientPtr); u.ext.client = va_arg(ap, ClientPtr);
u.ext.ext = va_arg(ap, ExtensionEntry*);
u.ext.ext = va_arg(ap, ExtensionEntry *);
u.ext.access_mode = DixGetAttrAccess; u.ext.access_mode = DixGetAttrAccess;
u.ext.status = Success; /* default allow */ u.ext.status = Success; /* default allow */
prv = &u.ext.status; prv = &u.ext.status;
@ -166,6 +178,7 @@ int XaceHook(int hook, ...)
case XACE_SERVER_ACCESS: case XACE_SERVER_ACCESS:
u.server.client = va_arg(ap, ClientPtr); u.server.client = va_arg(ap, ClientPtr);
u.server.access_mode = va_arg(ap, Mask); u.server.access_mode = va_arg(ap, Mask);
u.server.status = Success; /* default allow */ u.server.status = Success; /* default allow */
prv = &u.server.status; prv = &u.server.status;
break; break;
@ -174,17 +187,20 @@ int XaceHook(int hook, ...)
u.screen.client = va_arg(ap, ClientPtr); u.screen.client = va_arg(ap, ClientPtr);
u.screen.screen = va_arg(ap, ScreenPtr); u.screen.screen = va_arg(ap, ScreenPtr);
u.screen.access_mode = va_arg(ap, Mask); u.screen.access_mode = va_arg(ap, Mask);
u.screen.status = Success; /* default allow */ u.screen.status = Success; /* default allow */
prv = &u.screen.status; prv = &u.screen.status;
break; break;
case XACE_AUTH_AVAIL: case XACE_AUTH_AVAIL:
u.auth.client = va_arg(ap, ClientPtr); u.auth.client = va_arg(ap, ClientPtr);
u.auth.authId = va_arg(ap, XID); u.auth.authId = va_arg(ap, XID);
break; break;
case XACE_KEY_AVAIL: case XACE_KEY_AVAIL:
u.key.event = va_arg(ap, xEventPtr); u.key.event = va_arg(ap, xEventPtr);
u.key.keybd = va_arg(ap, DeviceIntPtr); u.key.keybd = va_arg(ap, DeviceIntPtr);
u.key.count = va_arg(ap, int); u.key.count = va_arg(ap, int);
break; break;
default: default:
va_end(ap); va_end(ap);
@ -218,14 +234,11 @@ int XaceHook(int hook, ...)
* region of the window will be destroyed (overwritten) in pBuf. * region of the window will be destroyed (overwritten) in pBuf.
*/ */
void void
XaceCensorImage( XaceCensorImage(ClientPtr client,
ClientPtr client,
RegionPtr pVisibleRegion, RegionPtr pVisibleRegion,
long widthBytesLine, long widthBytesLine,
DrawablePtr pDraw, DrawablePtr pDraw,
int x, int y, int w, int h, int x, int y, int w, int h, unsigned int format, char *pBuf)
unsigned int format,
char *pBuf)
{ {
RegionRec imageRegion; /* region representing x,y,w,h */ RegionRec imageRegion; /* region representing x,y,w,h */
RegionRec censorRegion; /* region to obliterate */ RegionRec censorRegion; /* region to obliterate */
@ -242,8 +255,7 @@ XaceCensorImage(
/* censorRegion = imageRegion - visibleRegion */ /* censorRegion = imageRegion - visibleRegion */
RegionSubtract(&censorRegion, &imageRegion, pVisibleRegion); RegionSubtract(&censorRegion, &imageRegion, pVisibleRegion);
nRects = RegionNumRects(&censorRegion); nRects = RegionNumRects(&censorRegion);
if (nRects > 0) if (nRects > 0) { /* we have something to censor */
{ /* we have something to censor */
GCPtr pScratchGC = NULL; GCPtr pScratchGC = NULL;
PixmapPtr pPix = NULL; PixmapPtr pPix = NULL;
xRectangle *pRects = NULL; xRectangle *pRects = NULL;
@ -256,15 +268,11 @@ XaceCensorImage(
/* convert region to list-of-rectangles for PolyFillRect */ /* convert region to list-of-rectangles for PolyFillRect */
pRects = malloc(nRects * sizeof(xRectangle)); pRects = malloc(nRects * sizeof(xRectangle));
if (!pRects) if (!pRects) {
{
failed = TRUE; failed = TRUE;
goto failSafe; goto failSafe;
} }
for (pBox = RegionRects(&censorRegion), i = 0; for (pBox = RegionRects(&censorRegion), i = 0; i < nRects; i++, pBox++) {
i < nRects;
i++, pBox++)
{
pRects[i].x = pBox->x1; pRects[i].x = pBox->x1;
pRects[i].y = pBox->y1 - imageBox.y1; pRects[i].y = pBox->y1 - imageBox.y1;
pRects[i].width = pBox->x2 - pBox->x1; pRects[i].width = pBox->x2 - pBox->x1;
@ -273,43 +281,41 @@ XaceCensorImage(
/* use pBuf as a fake pixmap */ /* use pBuf as a fake pixmap */
if (format == ZPixmap) if (format == ZPixmap) {
{
depth = pDraw->depth; depth = pDraw->depth;
bitsPerPixel = pDraw->bitsPerPixel; bitsPerPixel = pDraw->bitsPerPixel;
} }
pPix = GetScratchPixmapHeader(pDraw->pScreen, w, h, pPix = GetScratchPixmapHeader(pDraw->pScreen, w, h,
depth, bitsPerPixel, depth, bitsPerPixel,
widthBytesLine, (pointer)pBuf); widthBytesLine, (pointer) pBuf);
if (!pPix) if (!pPix) {
{
failed = TRUE; failed = TRUE;
goto failSafe; goto failSafe;
} }
pScratchGC = GetScratchGC(depth, pPix->drawable.pScreen); pScratchGC = GetScratchGC(depth, pPix->drawable.pScreen);
if (!pScratchGC) if (!pScratchGC) {
{
failed = TRUE; failed = TRUE;
goto failSafe; goto failSafe;
} }
ValidateGC(&pPix->drawable, pScratchGC); ValidateGC(&pPix->drawable, pScratchGC);
(* pScratchGC->ops->PolyFillRect)(&pPix->drawable, (*pScratchGC->ops->PolyFillRect) (&pPix->drawable,
pScratchGC, nRects, pRects); pScratchGC, nRects, pRects);
failSafe: failSafe:
if (failed) if (failed) {
{
/* Censoring was not completed above. To be safe, wipe out /* Censoring was not completed above. To be safe, wipe out
* all the image data so that nothing trusted gets out. * all the image data so that nothing trusted gets out.
*/ */
memset(pBuf, 0, (int)(widthBytesLine * h)); memset(pBuf, 0, (int) (widthBytesLine * h));
} }
free(pRects); free(pRects);
if (pScratchGC) FreeScratchGC(pScratchGC); if (pScratchGC)
if (pPix) FreeScratchPixmapHeader(pPix); FreeScratchGC(pScratchGC);
if (pPix)
FreeScratchPixmapHeader(pPix);
} }
RegionUninit(&imageRegion); RegionUninit(&imageRegion);
RegionUninit(&censorRegion); RegionUninit(&censorRegion);
@ -318,14 +324,18 @@ XaceCensorImage(
/* /*
* Xtrans wrappers for use by modules * Xtrans wrappers for use by modules
*/ */
int XaceGetConnectionNumber(ClientPtr client) int
XaceGetConnectionNumber(ClientPtr client)
{ {
XtransConnInfo ci = ((OsCommPtr)client->osPrivate)->trans_conn; XtransConnInfo ci = ((OsCommPtr) client->osPrivate)->trans_conn;
return _XSERVTransGetConnectionNumber(ci); return _XSERVTransGetConnectionNumber(ci);
} }
int XaceIsLocal(ClientPtr client) int
XaceIsLocal(ClientPtr client)
{ {
XtransConnInfo ci = ((OsCommPtr)client->osPrivate)->trans_conn; XtransConnInfo ci = ((OsCommPtr) client->osPrivate)->trans_conn;
return _XSERVTransIsLocal(ci); return _XSERVTransIsLocal(ci);
} }

View File

@ -61,18 +61,18 @@ extern _X_EXPORT CallbackListPtr XaceHooks[XACE_NUM_HOOKS];
/* Entry point for hook functions. Called by Xserver. /* Entry point for hook functions. Called by Xserver.
* Required by libdbe and libextmod * Required by libdbe and libextmod
*/ */
extern _X_EXPORT int XaceHook( extern _X_EXPORT int XaceHook(int /*hook */ ,
int /*hook*/, ... /*appropriate args for hook */
... /*appropriate args for hook*/
); );
/* Special-cased hook functions /* Special-cased hook functions
*/ */
extern _X_EXPORT int XaceHookDispatch(ClientPtr ptr, int major); extern _X_EXPORT int XaceHookDispatch(ClientPtr ptr, int major);
extern _X_EXPORT int XaceHookPropertyAccess(ClientPtr ptr, WindowPtr pWin, extern _X_EXPORT int XaceHookPropertyAccess(ClientPtr ptr, WindowPtr pWin,
PropertyPtr *ppProp, Mask access_mode); PropertyPtr *ppProp,
extern _X_EXPORT int XaceHookSelectionAccess(ClientPtr ptr, Mask access_mode);
Selection **ppSel, Mask access_mode); extern _X_EXPORT int XaceHookSelectionAccess(ClientPtr ptr, Selection ** ppSel,
Mask access_mode);
extern _X_EXPORT void XaceHookAuditEnd(ClientPtr ptr, int result); extern _X_EXPORT void XaceHookAuditEnd(ClientPtr ptr, int result);
/* Register a callback for a given hook. /* Register a callback for a given hook.
@ -93,15 +93,12 @@ extern _X_EXPORT int XaceIsLocal(ClientPtr ptr);
/* From the original Security extension... /* From the original Security extension...
*/ */
extern _X_EXPORT void XaceCensorImage( extern _X_EXPORT void XaceCensorImage(ClientPtr client,
ClientPtr client,
RegionPtr pVisibleRegion, RegionPtr pVisibleRegion,
long widthBytesLine, long widthBytesLine,
DrawablePtr pDraw, DrawablePtr pDraw,
int x, int y, int w, int h, int x, int y, int w, int h,
unsigned int format, unsigned int format, char *pBuf);
char * pBuf
);
#else /* XACE */ #else /* XACE */

View File

@ -58,7 +58,7 @@ ProcXCMiscGetVersion(ClientPtr client)
swaps(&rep.majorVersion); swaps(&rep.majorVersion);
swaps(&rep.minorVersion); swaps(&rep.minorVersion);
} }
WriteToClient(client, sizeof(xXCMiscGetVersionReply), (char *)&rep); WriteToClient(client, sizeof(xXCMiscGetVersionReply), (char *) &rep);
return Success; return Success;
} }
@ -80,7 +80,7 @@ ProcXCMiscGetXIDRange(ClientPtr client)
swapl(&rep.start_id); swapl(&rep.start_id);
swapl(&rep.count); swapl(&rep.count);
} }
WriteToClient(client, sizeof(xXCMiscGetXIDRangeReply), (char *)&rep); WriteToClient(client, sizeof(xXCMiscGetXIDRangeReply), (char *) &rep);
return Success; return Success;
} }
@ -97,9 +97,8 @@ ProcXCMiscGetXIDList(ClientPtr client)
if (stuff->count > UINT32_MAX / sizeof(XID)) if (stuff->count > UINT32_MAX / sizeof(XID))
return BadAlloc; return BadAlloc;
pids = (XID *)malloc(stuff->count * sizeof(XID)); pids = (XID *) malloc(stuff->count * sizeof(XID));
if (!pids) if (!pids) {
{
return BadAlloc; return BadAlloc;
} }
count = GetXIDList(client, stuff->count, pids); count = GetXIDList(client, stuff->count, pids);
@ -112,9 +111,8 @@ ProcXCMiscGetXIDList(ClientPtr client)
swapl(&rep.length); swapl(&rep.length);
swapl(&rep.count); swapl(&rep.count);
} }
WriteToClient(client, sizeof(xXCMiscGetXIDListReply), (char *)&rep); WriteToClient(client, sizeof(xXCMiscGetXIDListReply), (char *) &rep);
if (count) if (count) {
{
client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write; client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write;
WriteSwappedDataToClient(client, count * sizeof(XID), pids); WriteSwappedDataToClient(client, count * sizeof(XID), pids);
} }
@ -123,11 +121,10 @@ ProcXCMiscGetXIDList(ClientPtr client)
} }
static int static int
ProcXCMiscDispatch (ClientPtr client) ProcXCMiscDispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
switch (stuff->data) switch (stuff->data) {
{
case X_XCMiscGetVersion: case X_XCMiscGetVersion:
return ProcXCMiscGetVersion(client); return ProcXCMiscGetVersion(client);
case X_XCMiscGetXIDRange: case X_XCMiscGetXIDRange:
@ -171,11 +168,10 @@ SProcXCMiscGetXIDList(ClientPtr client)
} }
static int static int
SProcXCMiscDispatch (ClientPtr client) SProcXCMiscDispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
switch (stuff->data) switch (stuff->data) {
{
case X_XCMiscGetVersion: case X_XCMiscGetVersion:
return SProcXCMiscGetVersion(client); return SProcXCMiscGetVersion(client);
case X_XCMiscGetXIDRange: case X_XCMiscGetXIDRange:

View File

@ -76,11 +76,9 @@
#include <X11/extensions/xf86bigfproto.h> #include <X11/extensions/xf86bigfproto.h>
#include "xf86bigfontsrv.h" #include "xf86bigfontsrv.h"
static void XF86BigfontResetProc( static void XF86BigfontResetProc(ExtensionEntry * /* extEntry */
ExtensionEntry * /* extEntry */
); );
#ifdef HAS_SHM #ifdef HAS_SHM
/* A random signature, transmitted to the clients so they can verify that the /* A random signature, transmitted to the clients so they can verify that the
@ -100,8 +98,7 @@ static Bool badSysCall = FALSE;
#include <sys/signal.h> #include <sys/signal.h>
static void static void
SigSysHandler( SigSysHandler(int signo)
int signo)
{ {
badSysCall = TRUE; badSysCall = TRUE;
} }
@ -109,7 +106,7 @@ SigSysHandler(
static Bool static Bool
CheckForShmSyscall(void) CheckForShmSyscall(void)
{ {
void (*oldHandler)(int); void (*oldHandler) (int);
int shmid = -1; int shmid = -1;
/* If no SHM support in the kernel, the bad syscall will generate SIGSYS */ /* If no SHM support in the kernel, the bad syscall will generate SIGSYS */
@ -117,13 +114,11 @@ CheckForShmSyscall(void)
badSysCall = FALSE; badSysCall = FALSE;
shmid = shmget(IPC_PRIVATE, 4096, IPC_CREAT); shmid = shmget(IPC_PRIVATE, 4096, IPC_CREAT);
if (shmid != -1) if (shmid != -1) {
{
/* Successful allocation - clean up */ /* Successful allocation - clean up */
shmctl(shmid, IPC_RMID, NULL); shmctl(shmid, IPC_RMID, NULL);
} }
else else {
{
/* Allocation failed */ /* Allocation failed */
badSysCall = TRUE; badSysCall = TRUE;
} }
@ -158,8 +153,7 @@ typedef struct _ShmDesc {
static ShmDescPtr ShmList = (ShmDescPtr) NULL; static ShmDescPtr ShmList = (ShmDescPtr) NULL;
static ShmDescPtr static ShmDescPtr
shmalloc( shmalloc(unsigned int size)
unsigned int size)
{ {
ShmDescPtr pDesc; ShmDescPtr pDesc;
int shmid; int shmid;
@ -183,7 +177,7 @@ shmalloc(
if (!pDesc) if (!pDesc)
return (ShmDescPtr) NULL; return (ShmDescPtr) NULL;
size = (size + pagesize-1) & -pagesize; size = (size + pagesize - 1) & -pagesize;
shmid = shmget(IPC_PRIVATE, size, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH); shmid = shmget(IPC_PRIVATE, size, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH);
if (shmid == -1) { if (shmid == -1) {
ErrorF(XF86BIGFONTNAME " extension: shmget() failed, size = %u, %s\n", ErrorF(XF86BIGFONTNAME " extension: shmget() failed, size = %u, %s\n",
@ -192,7 +186,7 @@ shmalloc(
return (ShmDescPtr) NULL; return (ShmDescPtr) NULL;
} }
if ((addr = shmat(shmid, 0, 0)) == (char *)-1) { if ((addr = shmat(shmid, 0, 0)) == (char *) -1) {
ErrorF(XF86BIGFONTNAME " extension: shmat() failed, size = %u, %s\n", ErrorF(XF86BIGFONTNAME " extension: shmat() failed, size = %u, %s\n",
size, strerror(errno)); size, strerror(errno));
shmctl(shmid, IPC_RMID, (void *) 0); shmctl(shmid, IPC_RMID, (void *) 0);
@ -206,7 +200,8 @@ shmalloc(
pDesc->shmid = shmid; pDesc->shmid = shmid;
pDesc->attach_addr = addr; pDesc->attach_addr = addr;
if (ShmList) ShmList->prev = &pDesc->next; if (ShmList)
ShmList->prev = &pDesc->next;
pDesc->next = ShmList; pDesc->next = ShmList;
pDesc->prev = &ShmList; pDesc->prev = &ShmList;
ShmList = pDesc; ShmList = pDesc;
@ -215,15 +210,15 @@ shmalloc(
} }
static void static void
shmdealloc( shmdealloc(ShmDescPtr pDesc)
ShmDescPtr pDesc)
{ {
#ifndef EARLY_REMOVE #ifndef EARLY_REMOVE
shmctl(pDesc->shmid, IPC_RMID, (void *) 0); shmctl(pDesc->shmid, IPC_RMID, (void *) 0);
#endif #endif
shmdt(pDesc->attach_addr); shmdt(pDesc->attach_addr);
if (pDesc->next) pDesc->next->prev = pDesc->prev; if (pDesc->next)
pDesc->next->prev = pDesc->prev;
*pDesc->prev = pDesc->next; *pDesc->prev = pDesc->next;
free(pDesc); free(pDesc);
} }
@ -232,8 +227,7 @@ shmdealloc(
/* Called when a font is closed. */ /* Called when a font is closed. */
void void
XF86BigfontFreeFontShm( XF86BigfontFreeFontShm(FontPtr pFont)
FontPtr pFont)
{ {
#ifdef HAS_SHM #ifdef HAS_SHM
ShmDescPtr pDesc; ShmDescPtr pDesc;
@ -262,8 +256,7 @@ XF86BigfontCleanup(void)
/* Called when a server generation dies. */ /* Called when a server generation dies. */
static void static void
XF86BigfontResetProc( XF86BigfontResetProc(ExtensionEntry * extEntry)
ExtensionEntry* extEntry)
{ {
/* This function is normally called from CloseDownExtensions(), called /* This function is normally called from CloseDownExtensions(), called
* from main(). It will be followed by a call to FreeAllResources(), * from main(). It will be followed by a call to FreeAllResources(),
@ -276,12 +269,10 @@ XF86BigfontResetProc(
XF86BigfontCleanup(); XF86BigfontCleanup();
} }
/* ========== Handling of extension specific requests ========== */ /* ========== Handling of extension specific requests ========== */
static int static int
ProcXF86BigfontQueryVersion( ProcXF86BigfontQueryVersion(ClientPtr client)
ClientPtr client)
{ {
xXF86BigfontQueryVersionReply reply; xXF86BigfontQueryVersionReply reply;
@ -307,6 +298,7 @@ ProcXF86BigfontQueryVersion(
; /* may add more bits here in future versions */ ; /* may add more bits here in future versions */
if (client->swapped) { if (client->swapped) {
char tmp; char tmp;
swaps(&reply.sequenceNumber); swaps(&reply.sequenceNumber);
swapl(&reply.length); swapl(&reply.length);
swaps(&reply.majorVersion); swaps(&reply.majorVersion);
@ -316,13 +308,12 @@ ProcXF86BigfontQueryVersion(
swapl(&reply.signature); swapl(&reply.signature);
} }
WriteToClient(client, WriteToClient(client,
sizeof(xXF86BigfontQueryVersionReply), (char *)&reply); sizeof(xXF86BigfontQueryVersionReply), (char *) &reply);
return Success; return Success;
} }
static void static void
swapCharInfo( swapCharInfo(xCharInfo * pCI)
xCharInfo *pCI)
{ {
char tmp; char tmp;
@ -342,24 +333,25 @@ swapCharInfo(
(p->ascent << 11) + (p->descent << 6)) ^ p->attributes) (p->ascent << 11) + (p->descent << 6)) ^ p->attributes)
static int static int
ProcXF86BigfontQueryFont( ProcXF86BigfontQueryFont(ClientPtr client)
ClientPtr client)
{ {
FontPtr pFont; FontPtr pFont;
REQUEST(xXF86BigfontQueryFontReq); REQUEST(xXF86BigfontQueryFontReq);
CARD32 stuff_flags; CARD32 stuff_flags;
xCharInfo* pmax; xCharInfo *pmax;
xCharInfo* pmin; xCharInfo *pmin;
int nCharInfos; int nCharInfos;
int shmid; int shmid;
#ifdef HAS_SHM #ifdef HAS_SHM
ShmDescPtr pDesc = NULL; ShmDescPtr pDesc = NULL;
#else #else
#define pDesc 0 #define pDesc 0
#endif #endif
xCharInfo* pCI; xCharInfo *pCI;
CARD16* pIndex2UniqIndex; CARD16 *pIndex2UniqIndex;
CARD16* pUniqIndex2Index; CARD16 *pUniqIndex2Index;
CARD32 nUniqCharInfos; CARD32 nUniqCharInfos;
#if 0 #if 0
@ -367,7 +359,8 @@ ProcXF86BigfontQueryFont(
#else #else
switch (client->req_len) { switch (client->req_len) {
case 2: /* client with version 1.0 libX11 */ case 2: /* client with version 1.0 libX11 */
stuff_flags = (LocalClient(client) && !client->swapped ? XF86Bigfont_FLAGS_Shm : 0); stuff_flags = (LocalClient(client) &&
!client->swapped ? XF86Bigfont_FLAGS_Shm : 0);
break; break;
case 3: /* client with version 1.1 libX11 */ case 3: /* client with version 1.1 libX11 */
stuff_flags = stuff->flags; stuff_flags = stuff->flags;
@ -376,7 +369,8 @@ ProcXF86BigfontQueryFont(
return BadLength; return BadLength;
} }
#endif #endif
if (dixLookupFontable(&pFont, stuff->id, client, DixGetAttrAccess) != Success) if (dixLookupFontable(&pFont, stuff->id, client, DixGetAttrAccess) !=
Success)
return BadFont; /* procotol spec says only error is BadFont */ return BadFont; /* procotol spec says only error is BadFont */
pmax = FONTINKMAX(pFont); pmax = FONTINKMAX(pFont);
@ -402,14 +396,16 @@ ProcXF86BigfontQueryFont(
pCI = (xCharInfo *) pDesc->attach_addr; pCI = (xCharInfo *) pDesc->attach_addr;
if (stuff_flags & XF86Bigfont_FLAGS_Shm) if (stuff_flags & XF86Bigfont_FLAGS_Shm)
shmid = pDesc->shmid; shmid = pDesc->shmid;
} else { }
else {
if (stuff_flags & XF86Bigfont_FLAGS_Shm && !badSysCall) if (stuff_flags & XF86Bigfont_FLAGS_Shm && !badSysCall)
pDesc = shmalloc(nCharInfos * sizeof(xCharInfo) pDesc = shmalloc(nCharInfos * sizeof(xCharInfo)
+ sizeof(CARD32)); + sizeof(CARD32));
if (pDesc) { if (pDesc) {
pCI = (xCharInfo *) pDesc->attach_addr; pCI = (xCharInfo *) pDesc->attach_addr;
shmid = pDesc->shmid; shmid = pDesc->shmid;
} else { }
else {
#endif #endif
pCI = malloc(nCharInfos * sizeof(xCharInfo)); pCI = malloc(nCharInfos * sizeof(xCharInfo));
if (!pCI) if (!pCI)
@ -419,22 +415,22 @@ ProcXF86BigfontQueryFont(
#endif #endif
/* Fill nCharInfos starting at pCI. */ /* Fill nCharInfos starting at pCI. */
{ {
xCharInfo* prCI = pCI; xCharInfo *prCI = pCI;
int ninfos = 0; int ninfos = 0;
int ncols = pFont->info.lastCol - pFont->info.firstCol + 1; int ncols = pFont->info.lastCol - pFont->info.firstCol + 1;
int row; int row;
for (row = pFont->info.firstRow; for (row = pFont->info.firstRow;
row <= pFont->info.lastRow && ninfos < nCharInfos; row <= pFont->info.lastRow && ninfos < nCharInfos; row++) {
row++) {
unsigned char chars[512]; unsigned char chars[512];
xCharInfo* tmpCharInfos[256]; xCharInfo *tmpCharInfos[256];
unsigned long count; unsigned long count;
int col; int col;
unsigned long i; unsigned long i;
i = 0; i = 0;
for (col = pFont->info.firstCol; for (col = pFont->info.firstCol;
col <= pFont->info.lastCol; col <= pFont->info.lastCol; col++) {
col++) {
chars[i++] = row; chars[i++] = row;
chars[i++] = col; chars[i++] = col;
} }
@ -448,7 +444,7 @@ ProcXF86BigfontQueryFont(
} }
#ifdef HAS_SHM #ifdef HAS_SHM
if (pDesc && !badSysCall) { if (pDesc && !badSysCall) {
*(CARD32 *)(pCI + nCharInfos) = signature; *(CARD32 *) (pCI + nCharInfos) = signature;
if (!FontSetPrivate(pFont, FontShmdescIndex, pDesc)) { if (!FontSetPrivate(pFont, FontShmdescIndex, pDesc)) {
shmdealloc(pDesc); shmdealloc(pDesc);
return BadAlloc; return BadAlloc;
@ -462,29 +458,30 @@ ProcXF86BigfontQueryFont(
/* Note that CARD16 is suitable as index type, because /* Note that CARD16 is suitable as index type, because
nCharInfos <= 0x10000. */ nCharInfos <= 0x10000. */
CARD32 hashModulus; CARD32 hashModulus;
CARD16* pHash2UniqIndex; CARD16 *pHash2UniqIndex;
CARD16* pUniqIndex2NextUniqIndex; CARD16 *pUniqIndex2NextUniqIndex;
CARD32 NextIndex; CARD32 NextIndex;
CARD32 NextUniqIndex; CARD32 NextUniqIndex;
CARD16* tmp; CARD16 *tmp;
CARD32 i, j; CARD32 i, j;
hashModulus = 67; hashModulus = 67;
if (hashModulus > nCharInfos+1) if (hashModulus > nCharInfos + 1)
hashModulus = nCharInfos+1; hashModulus = nCharInfos + 1;
tmp = malloc((4*nCharInfos+1) * sizeof(CARD16)); tmp = malloc((4 * nCharInfos + 1) * sizeof(CARD16));
if (!tmp) { if (!tmp) {
if (!pDesc) free(pCI); if (!pDesc)
free(pCI);
return BadAlloc; return BadAlloc;
} }
pIndex2UniqIndex = tmp; pIndex2UniqIndex = tmp;
/* nCharInfos elements */ /* nCharInfos elements */
pUniqIndex2Index = tmp + nCharInfos; pUniqIndex2Index = tmp + nCharInfos;
/* max. nCharInfos elements */ /* max. nCharInfos elements */
pUniqIndex2NextUniqIndex = tmp + 2*nCharInfos; pUniqIndex2NextUniqIndex = tmp + 2 * nCharInfos;
/* max. nCharInfos elements */ /* max. nCharInfos elements */
pHash2UniqIndex = tmp + 3*nCharInfos; pHash2UniqIndex = tmp + 3 * nCharInfos;
/* hashModulus (<= nCharInfos+1) elements */ /* hashModulus (<= nCharInfos+1) elements */
/* Note that we can use 0xffff as end-of-list indicator, because /* Note that we can use 0xffff as end-of-list indicator, because
@ -493,15 +490,15 @@ ProcXF86BigfontQueryFont(
last element has been inserted, we don't need the hash table last element has been inserted, we don't need the hash table
any more. */ any more. */
for (j = 0; j < hashModulus; j++) for (j = 0; j < hashModulus; j++)
pHash2UniqIndex[j] = (CARD16)(-1); pHash2UniqIndex[j] = (CARD16) (-1);
NextUniqIndex = 0; NextUniqIndex = 0;
for (NextIndex = 0; NextIndex < nCharInfos; NextIndex++) { for (NextIndex = 0; NextIndex < nCharInfos; NextIndex++) {
xCharInfo* p = &pCI[NextIndex]; xCharInfo *p = &pCI[NextIndex];
CARD32 hashCode = hashCI(p) % hashModulus; CARD32 hashCode = hashCI(p) % hashModulus;
for (i = pHash2UniqIndex[hashCode]; for (i = pHash2UniqIndex[hashCode];
i != (CARD16)(-1); i != (CARD16) (-1); i = pUniqIndex2NextUniqIndex[i]) {
i = pUniqIndex2NextUniqIndex[i]) {
j = pUniqIndex2Index[i]; j = pUniqIndex2Index[i];
if (pCI[j].leftSideBearing == p->leftSideBearing if (pCI[j].leftSideBearing == p->leftSideBearing
&& pCI[j].rightSideBearing == p->rightSideBearing && pCI[j].rightSideBearing == p->rightSideBearing
@ -511,26 +508,28 @@ ProcXF86BigfontQueryFont(
&& pCI[j].attributes == p->attributes) && pCI[j].attributes == p->attributes)
break; break;
} }
if (i != (CARD16)(-1)) { if (i != (CARD16) (-1)) {
/* Found *p at Index j, UniqIndex i */ /* Found *p at Index j, UniqIndex i */
pIndex2UniqIndex[NextIndex] = i; pIndex2UniqIndex[NextIndex] = i;
} else { }
else {
/* Allocate a new entry in the Uniq table */ /* Allocate a new entry in the Uniq table */
if (hashModulus <= 2*NextUniqIndex if (hashModulus <= 2 * NextUniqIndex
&& hashModulus < nCharInfos+1) { && hashModulus < nCharInfos + 1) {
/* Time to increate hash table size */ /* Time to increate hash table size */
hashModulus = 2*hashModulus+1; hashModulus = 2 * hashModulus + 1;
if (hashModulus > nCharInfos+1) if (hashModulus > nCharInfos + 1)
hashModulus = nCharInfos+1; hashModulus = nCharInfos + 1;
for (j = 0; j < hashModulus; j++) for (j = 0; j < hashModulus; j++)
pHash2UniqIndex[j] = (CARD16)(-1); pHash2UniqIndex[j] = (CARD16) (-1);
for (i = 0; i < NextUniqIndex; i++) for (i = 0; i < NextUniqIndex; i++)
pUniqIndex2NextUniqIndex[i] = (CARD16)(-1); pUniqIndex2NextUniqIndex[i] = (CARD16) (-1);
for (i = 0; i < NextUniqIndex; i++) { for (i = 0; i < NextUniqIndex; i++) {
j = pUniqIndex2Index[i]; j = pUniqIndex2Index[i];
p = &pCI[j]; p = &pCI[j];
hashCode = hashCI(p) % hashModulus; hashCode = hashCI(p) % hashModulus;
pUniqIndex2NextUniqIndex[i] = pHash2UniqIndex[hashCode]; pUniqIndex2NextUniqIndex[i] =
pHash2UniqIndex[hashCode];
pHash2UniqIndex[hashCode] = i; pHash2UniqIndex[hashCode] = i;
} }
p = &pCI[NextIndex]; p = &pCI[NextIndex];
@ -550,19 +549,21 @@ ProcXF86BigfontQueryFont(
{ {
int nfontprops = pFont->info.nprops; int nfontprops = pFont->info.nprops;
int rlength = int rlength = sizeof(xXF86BigfontQueryFontReply)
sizeof(xXF86BigfontQueryFontReply)
+ nfontprops * sizeof(xFontProp) + nfontprops * sizeof(xFontProp)
+ (nCharInfos > 0 && shmid == -1 + (nCharInfos > 0 && shmid == -1
? nUniqCharInfos * sizeof(xCharInfo) ? nUniqCharInfos * sizeof(xCharInfo)
+ (nCharInfos+1)/2 * 2 * sizeof(CARD16) + (nCharInfos + 1) / 2 * 2 * sizeof(CARD16)
: 0); : 0);
xXF86BigfontQueryFontReply* reply = malloc(rlength); xXF86BigfontQueryFontReply *reply = malloc(rlength);
char* p; char *p;
if (!reply) { if (!reply) {
if (nCharInfos > 0) { if (nCharInfos > 0) {
if (shmid == -1) free(pIndex2UniqIndex); if (shmid == -1)
if (!pDesc) free(pCI); free(pIndex2UniqIndex);
if (!pDesc)
free(pCI);
} }
return BadAlloc; return BadAlloc;
} }
@ -587,6 +588,7 @@ ProcXF86BigfontQueryFont(
reply->shmsegoffset = 0; reply->shmsegoffset = 0;
if (client->swapped) { if (client->swapped) {
char tmp; char tmp;
swaps(&reply->sequenceNumber); swaps(&reply->sequenceNumber);
swapl(&reply->length); swapl(&reply->length);
swapCharInfo(&reply->minBounds); swapCharInfo(&reply->minBounds);
@ -602,56 +604,60 @@ ProcXF86BigfontQueryFont(
swapl(&reply->shmid); swapl(&reply->shmid);
swapl(&reply->shmsegoffset); swapl(&reply->shmsegoffset);
} }
p = (char*) &reply[1]; p = (char *) &reply[1];
{ {
FontPropPtr pFP; FontPropPtr pFP;
xFontProp* prFP; xFontProp *prFP;
int i; int i;
for (i = 0, pFP = pFont->info.props, prFP = (xFontProp *) p; for (i = 0, pFP = pFont->info.props, prFP = (xFontProp *) p;
i < nfontprops; i < nfontprops; i++, pFP++, prFP++) {
i++, pFP++, prFP++) {
prFP->name = pFP->name; prFP->name = pFP->name;
prFP->value = pFP->value; prFP->value = pFP->value;
if (client->swapped) { if (client->swapped) {
char tmp; char tmp;
swapl(&prFP->name); swapl(&prFP->name);
swapl(&prFP->value); swapl(&prFP->value);
} }
} }
p = (char*) prFP; p = (char *) prFP;
} }
if (nCharInfos > 0 && shmid == -1) { if (nCharInfos > 0 && shmid == -1) {
xCharInfo* pci; xCharInfo *pci;
CARD16* ps; CARD16 *ps;
int i, j; int i, j;
pci = (xCharInfo*) p;
pci = (xCharInfo *) p;
for (i = 0; i < nUniqCharInfos; i++, pci++) { for (i = 0; i < nUniqCharInfos; i++, pci++) {
*pci = pCI[pUniqIndex2Index[i]]; *pci = pCI[pUniqIndex2Index[i]];
if (client->swapped) if (client->swapped)
swapCharInfo(pci); swapCharInfo(pci);
} }
ps = (CARD16*) pci; ps = (CARD16 *) pci;
for (j = 0; j < nCharInfos; j++, ps++) { for (j = 0; j < nCharInfos; j++, ps++) {
*ps = pIndex2UniqIndex[j]; *ps = pIndex2UniqIndex[j];
if (client->swapped) { if (client->swapped) {
char tmp; char tmp;
swaps(ps); swaps(ps);
} }
} }
} }
WriteToClient(client, rlength, (char *)reply); WriteToClient(client, rlength, (char *) reply);
free(reply); free(reply);
if (nCharInfos > 0) { if (nCharInfos > 0) {
if (shmid == -1) free(pIndex2UniqIndex); if (shmid == -1)
if (!pDesc) free(pCI); free(pIndex2UniqIndex);
if (!pDesc)
free(pCI);
} }
return Success; return Success;
} }
} }
static int static int
ProcXF86BigfontDispatch( ProcXF86BigfontDispatch(ClientPtr client)
ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
@ -666,8 +672,7 @@ ProcXF86BigfontDispatch(
} }
static int static int
SProcXF86BigfontQueryVersion( SProcXF86BigfontQueryVersion(ClientPtr client)
ClientPtr client)
{ {
REQUEST(xXF86BigfontQueryVersionReq); REQUEST(xXF86BigfontQueryVersionReq);
char tmp; char tmp;
@ -677,8 +682,7 @@ SProcXF86BigfontQueryVersion(
} }
static int static int
SProcXF86BigfontQueryFont( SProcXF86BigfontQueryFont(ClientPtr client)
ClientPtr client)
{ {
REQUEST(xXF86BigfontQueryFontReq); REQUEST(xXF86BigfontQueryFontReq);
char tmp; char tmp;
@ -690,8 +694,7 @@ SProcXF86BigfontQueryFont(
} }
static int static int
SProcXF86BigfontDispatch( SProcXF86BigfontDispatch(ClientPtr client)
ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
@ -713,8 +716,7 @@ XFree86BigfontExtensionInit(void)
XF86BigfontNumberErrors, XF86BigfontNumberErrors,
ProcXF86BigfontDispatch, ProcXF86BigfontDispatch,
SProcXF86BigfontDispatch, SProcXF86BigfontDispatch,
XF86BigfontResetProc, XF86BigfontResetProc, StandardMinorOpcode)) {
StandardMinorOpcode)) {
#ifdef HAS_SHM #ifdef HAS_SHM
#ifdef MUST_CHECK_FOR_SHM_SYSCALL #ifdef MUST_CHECK_FOR_SHM_SYSCALL
/* /*
@ -724,14 +726,15 @@ XFree86BigfontExtensionInit(void)
* when shared memory support is not functional. * when shared memory support is not functional.
*/ */
if (!CheckForShmSyscall()) { if (!CheckForShmSyscall()) {
ErrorF(XF86BIGFONTNAME " extension local-client optimization disabled due to lack of shared memory support in the kernel\n"); ErrorF(XF86BIGFONTNAME
" extension local-client optimization disabled due to lack of shared memory support in the kernel\n");
return; return;
} }
#endif #endif
srand((unsigned int) time(NULL)); srand((unsigned int) time(NULL));
signature = ((unsigned int) (65536.0/(RAND_MAX+1.0) * rand()) << 16) signature = ((unsigned int) (65536.0 / (RAND_MAX + 1.0) * rand()) << 16)
+ (unsigned int) (65536.0/(RAND_MAX+1.0) * rand()); + (unsigned int) (65536.0 / (RAND_MAX + 1.0) * rand());
/* fprintf(stderr, "signature = 0x%08X\n", signature); */ /* fprintf(stderr, "signature = 0x%08X\n", signature); */
FontShmdescIndex = AllocateFontPrivateIndex(); FontShmdescIndex = AllocateFontPrivateIndex();
@ -739,11 +742,11 @@ XFree86BigfontExtensionInit(void)
#if !defined(CSRG_BASED) && !defined(__CYGWIN__) #if !defined(CSRG_BASED) && !defined(__CYGWIN__)
pagesize = SHMLBA; pagesize = SHMLBA;
#else #else
# ifdef _SC_PAGESIZE #ifdef _SC_PAGESIZE
pagesize = sysconf(_SC_PAGESIZE); pagesize = sysconf(_SC_PAGESIZE);
# else #else
pagesize = getpagesize(); pagesize = getpagesize();
# endif #endif
#endif #endif
#endif #endif
} }

View File

@ -24,12 +24,12 @@
#include "protocol-versions.h" #include "protocol-versions.h"
static int static int
ProcXResQueryVersion (ClientPtr client) ProcXResQueryVersion(ClientPtr client)
{ {
REQUEST(xXResQueryVersionReq); REQUEST(xXResQueryVersionReq);
xXResQueryVersionReply rep; xXResQueryVersionReply rep;
REQUEST_SIZE_MATCH (xXResQueryVersionReq); REQUEST_SIZE_MATCH(xXResQueryVersionReq);
rep.type = X_Reply; rep.type = X_Reply;
rep.length = 0; rep.length = 0;
@ -42,12 +42,12 @@ ProcXResQueryVersion (ClientPtr client)
swaps(&rep.server_major); swaps(&rep.server_major);
swaps(&rep.server_minor); swaps(&rep.server_minor);
} }
WriteToClient(client, sizeof (xXResQueryVersionReply), (char *)&rep); WriteToClient(client, sizeof(xXResQueryVersionReply), (char *) &rep);
return Success; return Success;
} }
static int static int
ProcXResQueryClients (ClientPtr client) ProcXResQueryClients(ClientPtr client)
{ {
/* REQUEST(xXResQueryClientsReq); */ /* REQUEST(xXResQueryClientsReq); */
xXResQueryClientsReply rep; xXResQueryClientsReply rep;
@ -59,8 +59,8 @@ ProcXResQueryClients (ClientPtr client)
current_clients = malloc(currentMaxClients * sizeof(int)); current_clients = malloc(currentMaxClients * sizeof(int));
num_clients = 0; num_clients = 0;
for(i = 0; i < currentMaxClients; i++) { for (i = 0; i < currentMaxClients; i++) {
if(clients[i]) { if (clients[i]) {
current_clients[num_clients] = i; current_clients[num_clients] = i;
num_clients++; num_clients++;
} }
@ -75,20 +75,20 @@ ProcXResQueryClients (ClientPtr client)
swapl(&rep.length); swapl(&rep.length);
swapl(&rep.num_clients); swapl(&rep.num_clients);
} }
WriteToClient (client, sizeof (xXResQueryClientsReply), (char *) &rep); WriteToClient(client, sizeof(xXResQueryClientsReply), (char *) &rep);
if(num_clients) { if (num_clients) {
xXResClient scratch; xXResClient scratch;
for(i = 0; i < num_clients; i++) { for (i = 0; i < num_clients; i++) {
scratch.resource_base = clients[current_clients[i]]->clientAsMask; scratch.resource_base = clients[current_clients[i]]->clientAsMask;
scratch.resource_mask = RESOURCE_ID_MASK; scratch.resource_mask = RESOURCE_ID_MASK;
if(client->swapped) { if (client->swapped) {
swapl(&scratch.resource_base); swapl(&scratch.resource_base);
swapl(&scratch.resource_mask); swapl(&scratch.resource_mask);
} }
WriteToClient (client, sz_xXResClient, (char *) &scratch); WriteToClient(client, sz_xXResClient, (char *) &scratch);
} }
} }
@ -97,17 +97,16 @@ ProcXResQueryClients (ClientPtr client)
return Success; return Success;
} }
static void static void
ResFindAllRes (pointer value, XID id, RESTYPE type, pointer cdata) ResFindAllRes(pointer value, XID id, RESTYPE type, pointer cdata)
{ {
int *counts = (int *)cdata; int *counts = (int *) cdata;
counts[(type & TypeMask) - 1]++; counts[(type & TypeMask) - 1]++;
} }
static int static int
ProcXResQueryClientResources (ClientPtr client) ProcXResQueryClientResources(ClientPtr client)
{ {
REQUEST(xXResQueryClientResourcesReq); REQUEST(xXResQueryClientResourcesReq);
xXResQueryClientResourcesReply rep; xXResQueryClientResourcesReply rep;
@ -118,7 +117,7 @@ ProcXResQueryClientResources (ClientPtr client)
clientID = CLIENT_ID(stuff->xid); clientID = CLIENT_ID(stuff->xid);
if((clientID >= currentMaxClients) || !clients[clientID]) { if ((clientID >= currentMaxClients) || !clients[clientID]) {
client->errorValue = stuff->xid; client->errorValue = stuff->xid;
return BadValue; return BadValue;
} }
@ -129,8 +128,9 @@ ProcXResQueryClientResources (ClientPtr client)
num_types = 0; num_types = 0;
for(i = 0; i <= lastResourceType; i++) { for (i = 0; i <= lastResourceType; i++) {
if(counts[i]) num_types++; if (counts[i])
num_types++;
} }
rep.type = X_Reply; rep.type = X_Reply;
@ -143,31 +143,34 @@ ProcXResQueryClientResources (ClientPtr client)
swapl(&rep.num_types); swapl(&rep.num_types);
} }
WriteToClient (client,sizeof(xXResQueryClientResourcesReply),(char*)&rep); WriteToClient(client, sizeof(xXResQueryClientResourcesReply),
(char *) &rep);
if(num_types) { if (num_types) {
xXResType scratch; xXResType scratch;
const char *name; const char *name;
for(i = 0; i < lastResourceType; i++) { for (i = 0; i < lastResourceType; i++) {
if(!counts[i]) continue; if (!counts[i])
continue;
name = LookupResourceName(i + 1); name = LookupResourceName(i + 1);
if (strcmp(name, XREGISTRY_UNKNOWN)) if (strcmp(name, XREGISTRY_UNKNOWN))
scratch.resource_type = MakeAtom(name, strlen(name), TRUE); scratch.resource_type = MakeAtom(name, strlen(name), TRUE);
else { else {
char buf[40]; char buf[40];
snprintf(buf, sizeof(buf), "Unregistered resource %i", i + 1); snprintf(buf, sizeof(buf), "Unregistered resource %i", i + 1);
scratch.resource_type = MakeAtom(buf, strlen(buf), TRUE); scratch.resource_type = MakeAtom(buf, strlen(buf), TRUE);
} }
scratch.count = counts[i]; scratch.count = counts[i];
if(client->swapped) { if (client->swapped) {
swapl(&scratch.resource_type); swapl(&scratch.resource_type);
swapl(&scratch.count); swapl(&scratch.count);
} }
WriteToClient (client, sz_xXResType, (char *) &scratch); WriteToClient(client, sz_xXResType, (char *) &scratch);
} }
} }
@ -177,34 +180,34 @@ ProcXResQueryClientResources (ClientPtr client)
} }
static unsigned long static unsigned long
ResGetApproxPixmapBytes (PixmapPtr pix) ResGetApproxPixmapBytes(PixmapPtr pix)
{ {
unsigned long nPixels; unsigned long nPixels;
int bytesPerPixel; int bytesPerPixel;
bytesPerPixel = pix->drawable.bitsPerPixel>>3; bytesPerPixel = pix->drawable.bitsPerPixel >> 3;
nPixels = pix->drawable.width * pix->drawable.height; nPixels = pix->drawable.width * pix->drawable.height;
/* Divide by refcnt as pixmap could be shared between clients, /* Divide by refcnt as pixmap could be shared between clients,
* so total pixmap mem is shared between these. * so total pixmap mem is shared between these.
*/ */
return ( nPixels * bytesPerPixel ) / pix->refcnt; return (nPixels * bytesPerPixel) / pix->refcnt;
} }
static void static void
ResFindPixmaps (pointer value, XID id, pointer cdata) ResFindPixmaps(pointer value, XID id, pointer cdata)
{ {
unsigned long *bytes = (unsigned long *)cdata; unsigned long *bytes = (unsigned long *) cdata;
PixmapPtr pix = (PixmapPtr)value; PixmapPtr pix = (PixmapPtr) value;
*bytes += ResGetApproxPixmapBytes(pix); *bytes += ResGetApproxPixmapBytes(pix);
} }
static void static void
ResFindWindowPixmaps (pointer value, XID id, pointer cdata) ResFindWindowPixmaps(pointer value, XID id, pointer cdata)
{ {
unsigned long *bytes = (unsigned long *)cdata; unsigned long *bytes = (unsigned long *) cdata;
WindowPtr pWin = (WindowPtr)value; WindowPtr pWin = (WindowPtr) value;
if (pWin->backgroundState == BackgroundPixmap) if (pWin->backgroundState == BackgroundPixmap)
*bytes += ResGetApproxPixmapBytes(pWin->background.pixmap); *bytes += ResGetApproxPixmapBytes(pWin->background.pixmap);
@ -214,10 +217,10 @@ ResFindWindowPixmaps (pointer value, XID id, pointer cdata)
} }
static void static void
ResFindGCPixmaps (pointer value, XID id, pointer cdata) ResFindGCPixmaps(pointer value, XID id, pointer cdata)
{ {
unsigned long *bytes = (unsigned long *)cdata; unsigned long *bytes = (unsigned long *) cdata;
GCPtr pGC = (GCPtr)value; GCPtr pGC = (GCPtr) value;
if (pGC->stipple != NULL) if (pGC->stipple != NULL)
*bytes += ResGetApproxPixmapBytes(pGC->stipple); *bytes += ResGetApproxPixmapBytes(pGC->stipple);
@ -227,7 +230,7 @@ ResFindGCPixmaps (pointer value, XID id, pointer cdata)
} }
static int static int
ProcXResQueryClientPixmapBytes (ClientPtr client) ProcXResQueryClientPixmapBytes(ClientPtr client)
{ {
REQUEST(xXResQueryClientPixmapBytesReq); REQUEST(xXResQueryClientPixmapBytesReq);
xXResQueryClientPixmapBytesReply rep; xXResQueryClientPixmapBytesReply rep;
@ -238,7 +241,7 @@ ProcXResQueryClientPixmapBytes (ClientPtr client)
clientID = CLIENT_ID(stuff->xid); clientID = CLIENT_ID(stuff->xid);
if((clientID >= currentMaxClients) || !clients[clientID]) { if ((clientID >= currentMaxClients) || !clients[clientID]) {
client->errorValue = stuff->xid; client->errorValue = stuff->xid;
return BadValue; return BadValue;
} }
@ -246,21 +249,19 @@ ProcXResQueryClientPixmapBytes (ClientPtr client)
bytes = 0; bytes = 0;
FindClientResourcesByType(clients[clientID], RT_PIXMAP, ResFindPixmaps, FindClientResourcesByType(clients[clientID], RT_PIXMAP, ResFindPixmaps,
(pointer)(&bytes)); (pointer) (&bytes));
/* /*
* Make sure win background pixmaps also held to account. * Make sure win background pixmaps also held to account.
*/ */
FindClientResourcesByType(clients[clientID], RT_WINDOW, FindClientResourcesByType(clients[clientID], RT_WINDOW,
ResFindWindowPixmaps, ResFindWindowPixmaps, (pointer) (&bytes));
(pointer)(&bytes));
/* /*
* GC Tile & Stipple pixmaps too. * GC Tile & Stipple pixmaps too.
*/ */
FindClientResourcesByType(clients[clientID], RT_GC, FindClientResourcesByType(clients[clientID], RT_GC,
ResFindGCPixmaps, ResFindGCPixmaps, (pointer) (&bytes));
(pointer)(&bytes));
#ifdef COMPOSITE #ifdef COMPOSITE
/* FIXME: include composite pixmaps too */ /* FIXME: include composite pixmaps too */
@ -281,13 +282,14 @@ ProcXResQueryClientPixmapBytes (ClientPtr client)
swapl(&rep.bytes); swapl(&rep.bytes);
swapl(&rep.bytes_overflow); swapl(&rep.bytes_overflow);
} }
WriteToClient (client,sizeof(xXResQueryClientPixmapBytesReply),(char*)&rep); WriteToClient(client, sizeof(xXResQueryClientPixmapBytesReply),
(char *) &rep);
return Success; return Success;
} }
static int static int
ProcResDispatch (ClientPtr client) ProcResDispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
switch (stuff->data) { switch (stuff->data) {
@ -299,40 +301,41 @@ ProcResDispatch (ClientPtr client)
return ProcXResQueryClientResources(client); return ProcXResQueryClientResources(client);
case X_XResQueryClientPixmapBytes: case X_XResQueryClientPixmapBytes:
return ProcXResQueryClientPixmapBytes(client); return ProcXResQueryClientPixmapBytes(client);
default: break; default:
break;
} }
return BadRequest; return BadRequest;
} }
static int static int
SProcXResQueryVersion (ClientPtr client) SProcXResQueryVersion(ClientPtr client)
{ {
REQUEST(xXResQueryVersionReq); REQUEST(xXResQueryVersionReq);
REQUEST_SIZE_MATCH (xXResQueryVersionReq); REQUEST_SIZE_MATCH(xXResQueryVersionReq);
return ProcXResQueryVersion(client); return ProcXResQueryVersion(client);
} }
static int static int
SProcXResQueryClientResources (ClientPtr client) SProcXResQueryClientResources(ClientPtr client)
{ {
REQUEST(xXResQueryClientResourcesReq); REQUEST(xXResQueryClientResourcesReq);
REQUEST_SIZE_MATCH (xXResQueryClientResourcesReq); REQUEST_SIZE_MATCH(xXResQueryClientResourcesReq);
swapl(&stuff->xid); swapl(&stuff->xid);
return ProcXResQueryClientResources(client); return ProcXResQueryClientResources(client);
} }
static int static int
SProcXResQueryClientPixmapBytes (ClientPtr client) SProcXResQueryClientPixmapBytes(ClientPtr client)
{ {
REQUEST(xXResQueryClientPixmapBytesReq); REQUEST(xXResQueryClientPixmapBytesReq);
REQUEST_SIZE_MATCH (xXResQueryClientPixmapBytesReq); REQUEST_SIZE_MATCH(xXResQueryClientPixmapBytesReq);
swapl(&stuff->xid); swapl(&stuff->xid);
return ProcXResQueryClientPixmapBytes(client); return ProcXResQueryClientPixmapBytes(client);
} }
static int static int
SProcResDispatch (ClientPtr client) SProcResDispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
swaps(&stuff->length); swaps(&stuff->length);
@ -346,7 +349,8 @@ SProcResDispatch (ClientPtr client)
return SProcXResQueryClientResources(client); return SProcXResQueryClientResources(client);
case X_XResQueryClientPixmapBytes: case X_XResQueryClientPixmapBytes:
return SProcXResQueryClientPixmapBytes(client); return SProcXResQueryClientPixmapBytes(client);
default: break; default:
break;
} }
return BadRequest; return BadRequest;

View File

@ -44,7 +44,6 @@ typedef struct {
CARD32 id; CARD32 id;
} SELinuxListItemRec; } SELinuxListItemRec;
/* /*
* Extension Dispatch * Extension Dispatch
*/ */
@ -53,6 +52,7 @@ static security_context_t
SELinuxCopyContext(char *ptr, unsigned len) SELinuxCopyContext(char *ptr, unsigned len)
{ {
security_context_t copy = malloc(len + 1); security_context_t copy = malloc(len + 1);
if (!copy) if (!copy)
return NULL; return NULL;
strncpy(copy, ptr, len); strncpy(copy, ptr, len);
@ -76,7 +76,7 @@ ProcSELinuxQueryVersion(ClientPtr client)
swaps(&rep.server_major); swaps(&rep.server_major);
swaps(&rep.server_minor); swaps(&rep.server_minor);
} }
WriteToClient(client, sizeof(rep), (char *)&rep); WriteToClient(client, sizeof(rep), (char *) &rep);
return Success; return Success;
} }
@ -104,7 +104,7 @@ SELinuxSendContextReply(ClientPtr client, security_id_t sid)
swapl(&rep.context_len); swapl(&rep.context_len);
} }
WriteToClient(client, sizeof(SELinuxGetContextReply), (char *)&rep); WriteToClient(client, sizeof(SELinuxGetContextReply), (char *) &rep);
WriteToClient(client, len, ctx); WriteToClient(client, len, ctx);
freecon(ctx); freecon(ctx);
return Success; return Success;
@ -123,13 +123,13 @@ ProcSELinuxSetCreateContext(ClientPtr client, unsigned offset)
REQUEST_FIXED_SIZE(SELinuxSetCreateContextReq, stuff->context_len); REQUEST_FIXED_SIZE(SELinuxSetCreateContextReq, stuff->context_len);
if (stuff->context_len > 0) { if (stuff->context_len > 0) {
ctx = SELinuxCopyContext((char *)(stuff + 1), stuff->context_len); ctx = SELinuxCopyContext((char *) (stuff + 1), stuff->context_len);
if (!ctx) if (!ctx)
return BadAlloc; return BadAlloc;
} }
ptr = dixLookupPrivate(privPtr, subjectKey); ptr = dixLookupPrivate(privPtr, subjectKey);
pSid = (security_id_t *)(ptr + offset); pSid = (security_id_t *) (ptr + offset);
*pSid = NULL; *pSid = NULL;
rc = Success; rc = Success;
@ -156,7 +156,7 @@ ProcSELinuxGetCreateContext(ClientPtr client, unsigned offset)
else else
ptr = dixLookupPrivate(&client->devPrivates, subjectKey); ptr = dixLookupPrivate(&client->devPrivates, subjectKey);
pSid = (security_id_t *)(ptr + offset); pSid = (security_id_t *) (ptr + offset);
return SELinuxSendContextReply(client, *pSid); return SELinuxSendContextReply(client, *pSid);
} }
@ -175,7 +175,7 @@ ProcSELinuxSetDeviceContext(ClientPtr client)
if (stuff->context_len < 1) if (stuff->context_len < 1)
return BadLength; return BadLength;
ctx = SELinuxCopyContext((char *)(stuff + 1), stuff->context_len); ctx = SELinuxCopyContext((char *) (stuff + 1), stuff->context_len);
if (!ctx) if (!ctx)
return BadAlloc; return BadAlloc;
@ -195,7 +195,7 @@ ProcSELinuxSetDeviceContext(ClientPtr client)
obj->sid = sid; obj->sid = sid;
rc = Success; rc = Success;
out: out:
free(ctx); free(ctx);
return rc; return rc;
} }
@ -234,9 +234,9 @@ ProcSELinuxGetDrawableContext(ClientPtr client)
return rc; return rc;
if (pDraw->type == DRAWABLE_PIXMAP) if (pDraw->type == DRAWABLE_PIXMAP)
privatePtr = &((PixmapPtr)pDraw)->devPrivates; privatePtr = &((PixmapPtr) pDraw)->devPrivates;
else else
privatePtr = &((WindowPtr)pDraw)->devPrivates; privatePtr = &((WindowPtr) pDraw)->devPrivates;
obj = dixLookupPrivate(privatePtr, objectKey); obj = dixLookupPrivate(privatePtr, objectKey);
return SELinuxSendContextReply(client, obj->sid); return SELinuxSendContextReply(client, obj->sid);
@ -303,7 +303,7 @@ ProcSELinuxGetClientContext(ClientPtr client)
} }
static int static int
SELinuxPopulateItem(SELinuxListItemRec *i, PrivateRec **privPtr, CARD32 id, SELinuxPopulateItem(SELinuxListItemRec * i, PrivateRec ** privPtr, CARD32 id,
int *size) int *size)
{ {
SELinuxObjectRec *obj = dixLookupPrivate(privPtr, objectKey); SELinuxObjectRec *obj = dixLookupPrivate(privPtr, objectKey);
@ -323,9 +323,10 @@ SELinuxPopulateItem(SELinuxListItemRec *i, PrivateRec **privPtr, CARD32 id,
} }
static void static void
SELinuxFreeItems(SELinuxListItemRec *items, int count) SELinuxFreeItems(SELinuxListItemRec * items, int count)
{ {
int k; int k;
for (k = 0; k < count; k++) { for (k = 0; k < count; k++) {
freecon(items[k].octx); freecon(items[k].octx);
freecon(items[k].dctx); freecon(items[k].dctx);
@ -334,7 +335,7 @@ SELinuxFreeItems(SELinuxListItemRec *items, int count)
} }
static int static int
SELinuxSendItemsToClient(ClientPtr client, SELinuxListItemRec *items, SELinuxSendItemsToClient(ClientPtr client, SELinuxListItemRec * items,
int size, int count) int size, int count)
{ {
int rc, k, pos = 0; int rc, k, pos = 0;
@ -364,9 +365,9 @@ SELinuxSendItemsToClient(ClientPtr client, SELinuxListItemRec *items,
swapl(buf + pos); swapl(buf + pos);
pos++; pos++;
memcpy((char *)(buf + pos), items[k].octx, strlen(items[k].octx) + 1); memcpy((char *) (buf + pos), items[k].octx, strlen(items[k].octx) + 1);
pos += items[k].octx_len; pos += items[k].octx_len;
memcpy((char *)(buf + pos), items[k].dctx, strlen(items[k].dctx) + 1); memcpy((char *) (buf + pos), items[k].dctx, strlen(items[k].dctx) + 1);
pos += items[k].dctx_len; pos += items[k].dctx_len;
} }
@ -382,13 +383,13 @@ SELinuxSendItemsToClient(ClientPtr client, SELinuxListItemRec *items,
swapl(&rep.count); swapl(&rep.count);
} }
WriteToClient(client, sizeof(SELinuxListItemsReply), (char *)&rep); WriteToClient(client, sizeof(SELinuxListItemsReply), (char *) &rep);
WriteToClient(client, size * 4, (char *)buf); WriteToClient(client, size * 4, (char *) buf);
/* Free stuff and return */ /* Free stuff and return */
rc = Success; rc = Success;
free(buf); free(buf);
out: out:
SELinuxFreeItems(items, count); SELinuxFreeItems(items, count);
return rc; return rc;
} }
@ -670,13 +671,12 @@ SProcSELinuxDispatch(ClientPtr client)
} }
} }
/* /*
* Extension Setup / Teardown * Extension Setup / Teardown
*/ */
static void static void
SELinuxResetProc(ExtensionEntry *extEntry) SELinuxResetProc(ExtensionEntry * extEntry)
{ {
SELinuxFlaskReset(); SELinuxFlaskReset();
SELinuxLabelReset(); SELinuxLabelReset();

View File

@ -45,7 +45,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define _XSELINUX_NEED_FLASK_MAP #define _XSELINUX_NEED_FLASK_MAP
#include "xselinuxint.h" #include "xselinuxint.h"
/* structure passed to auditing callback */ /* structure passed to auditing callback */
typedef struct { typedef struct {
ClientPtr client; /* client */ ClientPtr client; /* client */
@ -78,15 +77,14 @@ static security_id_t unlabeled_sid;
static void SELinuxScreen(CallbackListPtr *, pointer, pointer); static void SELinuxScreen(CallbackListPtr *, pointer, pointer);
/* "true" pointer value for use as callback data */ /* "true" pointer value for use as callback data */
static pointer truep = (pointer)1; static pointer truep = (pointer) 1;
/* /*
* Performs an SELinux permission check. * Performs an SELinux permission check.
*/ */
static int static int
SELinuxDoCheck(SELinuxSubjectRec *subj, SELinuxObjectRec *obj, SELinuxDoCheck(SELinuxSubjectRec * subj, SELinuxObjectRec * obj,
security_class_t class, Mask mode, SELinuxAuditRec *auditdata) security_class_t class, Mask mode, SELinuxAuditRec * auditdata)
{ {
/* serverClient requests OK */ /* serverClient requests OK */
if (subj->privileged) if (subj->privileged)
@ -133,11 +131,12 @@ SELinuxLabelClient(ClientPtr client)
/* Get cached command name if CLIENTIDS is enabled. */ /* Get cached command name if CLIENTIDS is enabled. */
const char *cmdname = GetClientCmdName(client); const char *cmdname = GetClientCmdName(client);
Bool cached = (cmdname != NULL); Bool cached = (cmdname != NULL);
/* If CLIENTIDS is disabled, figure out the command name from /* If CLIENTIDS is disabled, figure out the command name from
* scratch. */ * scratch. */
if (!cmdname) if (!cmdname) {
{
pid_t pid = DetermineClientPid(client); pid_t pid = DetermineClientPid(client);
if (pid != -1) if (pid != -1)
DetermineClientCmd(pid, &cmdname, NULL); DetermineClientCmd(pid, &cmdname, NULL);
} }
@ -151,7 +150,7 @@ SELinuxLabelClient(ClientPtr client)
free((void *) cmdname); /* const char * */ free((void *) cmdname); /* const char * */
} }
finish: finish:
/* Get a SID from the context */ /* Get a SID from the context */
if (avc_context_to_sid_raw(ctx, &subj->sid) < 0) if (avc_context_to_sid_raw(ctx, &subj->sid) < 0)
FatalError("SELinux: client %d: context_to_sid_raw(%s) failed\n", FatalError("SELinux: client %d: context_to_sid_raw(%s) failed\n",
@ -209,8 +208,8 @@ SELinuxLabelInitial(void)
* Labels new resource objects. * Labels new resource objects.
*/ */
static int static int
SELinuxLabelResource(XaceResourceAccessRec *rec, SELinuxSubjectRec *subj, SELinuxLabelResource(XaceResourceAccessRec * rec, SELinuxSubjectRec * subj,
SELinuxObjectRec *obj, security_class_t class) SELinuxObjectRec * obj, security_class_t class)
{ {
int offset; int offset;
security_id_t tsid; security_id_t tsid;
@ -228,8 +227,10 @@ SELinuxLabelResource(XaceResourceAccessRec *rec, SELinuxSubjectRec *subj,
/* Use the SID of the parent object in the labeling operation */ /* Use the SID of the parent object in the labeling operation */
PrivateRec **privatePtr = DEVPRIV_AT(rec->parent, offset); PrivateRec **privatePtr = DEVPRIV_AT(rec->parent, offset);
SELinuxObjectRec *pobj = dixLookupPrivate(privatePtr, objectKey); SELinuxObjectRec *pobj = dixLookupPrivate(privatePtr, objectKey);
tsid = pobj->sid; tsid = pobj->sid;
} else { }
else {
/* Use the SID of the subject */ /* Use the SID of the subject */
tsid = subj->sid; tsid = subj->sid;
} }
@ -243,16 +244,13 @@ SELinuxLabelResource(XaceResourceAccessRec *rec, SELinuxSubjectRec *subj,
return Success; return Success;
} }
/* /*
* Libselinux Callbacks * Libselinux Callbacks
*/ */
static int static int
SELinuxAudit(void *auditdata, SELinuxAudit(void *auditdata,
security_class_t class, security_class_t class, char *msgbuf, size_t msgbufsize)
char *msgbuf,
size_t msgbufsize)
{ {
SELinuxAuditRec *audit = auditdata; SELinuxAuditRec *audit = auditdata;
ClientPtr client = audit->client; ClientPtr client = audit->client;
@ -333,7 +331,7 @@ SELinuxDevice(CallbackListPtr *pcbl, pointer unused, pointer calldata)
XaceDeviceAccessRec *rec = calldata; XaceDeviceAccessRec *rec = calldata;
SELinuxSubjectRec *subj; SELinuxSubjectRec *subj;
SELinuxObjectRec *obj; SELinuxObjectRec *obj;
SELinuxAuditRec auditdata = { .client = rec->client, .dev = rec->dev }; SELinuxAuditRec auditdata = {.client = rec->client,.dev = rec->dev };
security_class_t cls; security_class_t cls;
int rc; int rc;
@ -343,13 +341,15 @@ SELinuxDevice(CallbackListPtr *pcbl, pointer unused, pointer calldata)
/* If this is a new object that needs labeling, do it now */ /* If this is a new object that needs labeling, do it now */
if (rec->access_mode & DixCreateAccess) { if (rec->access_mode & DixCreateAccess) {
SELinuxSubjectRec *dsubj; SELinuxSubjectRec *dsubj;
dsubj = dixLookupPrivate(&rec->dev->devPrivates, subjectKey); dsubj = dixLookupPrivate(&rec->dev->devPrivates, subjectKey);
if (subj->dev_create_sid) { if (subj->dev_create_sid) {
/* Label the device with the create context */ /* Label the device with the create context */
obj->sid = subj->dev_create_sid; obj->sid = subj->dev_create_sid;
dsubj->sid = subj->dev_create_sid; dsubj->sid = subj->dev_create_sid;
} else { }
else {
/* Label the device directly with the process SID */ /* Label the device directly with the process SID */
obj->sid = subj->sid; obj->sid = subj->sid;
dsubj->sid = subj->sid; dsubj->sid = subj->sid;
@ -368,7 +368,7 @@ SELinuxSend(CallbackListPtr *pcbl, pointer unused, pointer calldata)
XaceSendAccessRec *rec = calldata; XaceSendAccessRec *rec = calldata;
SELinuxSubjectRec *subj; SELinuxSubjectRec *subj;
SELinuxObjectRec *obj, ev_sid; SELinuxObjectRec *obj, ev_sid;
SELinuxAuditRec auditdata = { .client = rec->client, .dev = rec->dev }; SELinuxAuditRec auditdata = {.client = rec->client,.dev = rec->dev };
security_class_t class; security_class_t class;
int rc, i, type; int rc, i, type;
@ -400,7 +400,7 @@ SELinuxSend(CallbackListPtr *pcbl, pointer unused, pointer calldata)
goto err; goto err;
} }
return; return;
err: err:
rec->status = rc; rec->status = rc;
} }
@ -410,7 +410,7 @@ SELinuxReceive(CallbackListPtr *pcbl, pointer unused, pointer calldata)
XaceReceiveAccessRec *rec = calldata; XaceReceiveAccessRec *rec = calldata;
SELinuxSubjectRec *subj; SELinuxSubjectRec *subj;
SELinuxObjectRec *obj, ev_sid; SELinuxObjectRec *obj, ev_sid;
SELinuxAuditRec auditdata = { .client = NULL }; SELinuxAuditRec auditdata = {.client = NULL };
security_class_t class; security_class_t class;
int rc, i, type; int rc, i, type;
@ -438,7 +438,7 @@ SELinuxReceive(CallbackListPtr *pcbl, pointer unused, pointer calldata)
goto err; goto err;
} }
return; return;
err: err:
rec->status = rc; rec->status = rc;
} }
@ -448,7 +448,7 @@ SELinuxExtension(CallbackListPtr *pcbl, pointer unused, pointer calldata)
XaceExtAccessRec *rec = calldata; XaceExtAccessRec *rec = calldata;
SELinuxSubjectRec *subj, *serv; SELinuxSubjectRec *subj, *serv;
SELinuxObjectRec *obj; SELinuxObjectRec *obj;
SELinuxAuditRec auditdata = { .client = rec->client }; SELinuxAuditRec auditdata = {.client = rec->client };
int rc; int rc;
subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey); subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
@ -492,7 +492,7 @@ SELinuxSelection(CallbackListPtr *pcbl, pointer unused, pointer calldata)
Selection *pSel = *rec->ppSel; Selection *pSel = *rec->ppSel;
Atom name = pSel->selection; Atom name = pSel->selection;
Mask access_mode = rec->access_mode; Mask access_mode = rec->access_mode;
SELinuxAuditRec auditdata = { .client = rec->client, .selection = name }; SELinuxAuditRec auditdata = {.client = rec->client,.selection = name };
security_id_t tsid; security_id_t tsid;
int rc; int rc;
@ -551,7 +551,7 @@ SELinuxProperty(CallbackListPtr *pcbl, pointer unused, pointer calldata)
SELinuxObjectRec *obj, *data; SELinuxObjectRec *obj, *data;
PropertyPtr pProp = *rec->ppProp; PropertyPtr pProp = *rec->ppProp;
Atom name = pProp->propertyName; Atom name = pProp->propertyName;
SELinuxAuditRec auditdata = { .client = rec->client, .property = name }; SELinuxAuditRec auditdata = {.client = rec->client,.property = name };
security_id_t tsid; security_id_t tsid;
int rc; int rc;
@ -613,7 +613,7 @@ SELinuxResource(CallbackListPtr *pcbl, pointer unused, pointer calldata)
XaceResourceAccessRec *rec = calldata; XaceResourceAccessRec *rec = calldata;
SELinuxSubjectRec *subj; SELinuxSubjectRec *subj;
SELinuxObjectRec *obj; SELinuxObjectRec *obj;
SELinuxAuditRec auditdata = { .client = rec->client }; SELinuxAuditRec auditdata = {.client = rec->client };
Mask access_mode = rec->access_mode; Mask access_mode = rec->access_mode;
PrivateRec **privatePtr; PrivateRec **privatePtr;
security_class_t class; security_class_t class;
@ -628,7 +628,8 @@ SELinuxResource(CallbackListPtr *pcbl, pointer unused, pointer calldata)
class = SECCLASS_X_RESOURCE; class = SECCLASS_X_RESOURCE;
privatePtr = &clients[CLIENT_ID(rec->id)]->devPrivates; privatePtr = &clients[CLIENT_ID(rec->id)]->devPrivates;
obj = dixLookupPrivate(privatePtr, objectKey); obj = dixLookupPrivate(privatePtr, objectKey);
} else { }
else {
/* Yes: use the SID from the resource object itself */ /* Yes: use the SID from the resource object itself */
class = SELinuxTypeToClass(rec->rtype); class = SELinuxTypeToClass(rec->rtype);
privatePtr = DEVPRIV_AT(rec->res, offset); privatePtr = DEVPRIV_AT(rec->res, offset);
@ -646,8 +647,8 @@ SELinuxResource(CallbackListPtr *pcbl, pointer unused, pointer calldata)
/* Collapse generic resource permissions down to read/write */ /* Collapse generic resource permissions down to read/write */
if (class == SECCLASS_X_RESOURCE) { if (class == SECCLASS_X_RESOURCE) {
access_mode = !!(rec->access_mode & SELinuxReadMask); /* rd */ access_mode = ! !(rec->access_mode & SELinuxReadMask); /* rd */
access_mode |= !!(rec->access_mode & ~SELinuxReadMask) << 1; /* wr */ access_mode |= ! !(rec->access_mode & ~SELinuxReadMask) << 1; /* wr */
} }
/* Perform the security check */ /* Perform the security check */
@ -661,7 +662,7 @@ SELinuxResource(CallbackListPtr *pcbl, pointer unused, pointer calldata)
if (access_mode & DixCreateAccess && rec->rtype == RT_WINDOW) { if (access_mode & DixCreateAccess && rec->rtype == RT_WINDOW) {
rc = SELinuxDoCheck(subj, obj, class, DixBlendAccess, &auditdata); rc = SELinuxDoCheck(subj, obj, class, DixBlendAccess, &auditdata);
if (rc != Success) if (rc != Success)
((WindowPtr)rec->res)->forcedBG = TRUE; ((WindowPtr) rec->res)->forcedBG = TRUE;
} }
} }
@ -671,7 +672,7 @@ SELinuxScreen(CallbackListPtr *pcbl, pointer is_saver, pointer calldata)
XaceScreenAccessRec *rec = calldata; XaceScreenAccessRec *rec = calldata;
SELinuxSubjectRec *subj; SELinuxSubjectRec *subj;
SELinuxObjectRec *obj; SELinuxObjectRec *obj;
SELinuxAuditRec auditdata = { .client = rec->client }; SELinuxAuditRec auditdata = {.client = rec->client };
Mask access_mode = rec->access_mode; Mask access_mode = rec->access_mode;
int rc; int rc;
@ -703,7 +704,7 @@ SELinuxClient(CallbackListPtr *pcbl, pointer unused, pointer calldata)
XaceClientAccessRec *rec = calldata; XaceClientAccessRec *rec = calldata;
SELinuxSubjectRec *subj; SELinuxSubjectRec *subj;
SELinuxObjectRec *obj; SELinuxObjectRec *obj;
SELinuxAuditRec auditdata = { .client = rec->client }; SELinuxAuditRec auditdata = {.client = rec->client };
int rc; int rc;
subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey); subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
@ -721,7 +722,7 @@ SELinuxServer(CallbackListPtr *pcbl, pointer unused, pointer calldata)
XaceServerAccessRec *rec = calldata; XaceServerAccessRec *rec = calldata;
SELinuxSubjectRec *subj; SELinuxSubjectRec *subj;
SELinuxObjectRec *obj; SELinuxObjectRec *obj;
SELinuxAuditRec auditdata = { .client = rec->client }; SELinuxAuditRec auditdata = {.client = rec->client };
int rc; int rc;
subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey); subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
@ -733,7 +734,6 @@ SELinuxServer(CallbackListPtr *pcbl, pointer unused, pointer calldata)
rec->status = rc; rec->status = rc;
} }
/* /*
* DIX Callbacks * DIX Callbacks
*/ */
@ -766,12 +766,13 @@ SELinuxResourceState(CallbackListPtr *pcbl, pointer unused, pointer calldata)
if (rec->state != ResourceStateAdding) if (rec->state != ResourceStateAdding)
return; return;
pWin = (WindowPtr)rec->value; pWin = (WindowPtr) rec->value;
subj = dixLookupPrivate(&wClient(pWin)->devPrivates, subjectKey); subj = dixLookupPrivate(&wClient(pWin)->devPrivates, subjectKey);
if (subj->sid) { if (subj->sid) {
security_context_t ctx; security_context_t ctx;
int rc = avc_sid_to_context_raw(subj->sid, &ctx); int rc = avc_sid_to_context_raw(subj->sid, &ctx);
if (rc < 0) if (rc < 0)
FatalError("SELinux: Failed to get security context!\n"); FatalError("SELinux: Failed to get security context!\n");
rc = dixChangeWindowProperty(serverClient, rc = dixChangeWindowProperty(serverClient,
@ -780,7 +781,8 @@ SELinuxResourceState(CallbackListPtr *pcbl, pointer unused, pointer calldata)
if (rc != Success) if (rc != Success)
FatalError("SELinux: Failed to set label property on window!\n"); FatalError("SELinux: Failed to set label property on window!\n");
freecon(ctx); freecon(ctx);
} else }
else
FatalError("SELinux: Unexpected unlabeled client found\n"); FatalError("SELinux: Unexpected unlabeled client found\n");
obj = dixLookupPrivate(&pWin->devPrivates, objectKey); obj = dixLookupPrivate(&pWin->devPrivates, objectKey);
@ -788,6 +790,7 @@ SELinuxResourceState(CallbackListPtr *pcbl, pointer unused, pointer calldata)
if (obj->sid) { if (obj->sid) {
security_context_t ctx; security_context_t ctx;
int rc = avc_sid_to_context_raw(obj->sid, &ctx); int rc = avc_sid_to_context_raw(obj->sid, &ctx);
if (rc < 0) if (rc < 0)
FatalError("SELinux: Failed to get security context!\n"); FatalError("SELinux: Failed to get security context!\n");
rc = dixChangeWindowProperty(serverClient, rc = dixChangeWindowProperty(serverClient,
@ -796,11 +799,11 @@ SELinuxResourceState(CallbackListPtr *pcbl, pointer unused, pointer calldata)
if (rc != Success) if (rc != Success)
FatalError("SELinux: Failed to set label property on window!\n"); FatalError("SELinux: Failed to set label property on window!\n");
freecon(ctx); freecon(ctx);
} else }
else
FatalError("SELinux: Unexpected unlabeled window found\n"); FatalError("SELinux: Unexpected unlabeled window found\n");
} }
static int netlink_fd; static int netlink_fd;
static void static void
@ -811,7 +814,7 @@ SELinuxBlockHandler(void *data, struct timeval **tv, void *read_mask)
static void static void
SELinuxWakeupHandler(void *data, int err, void *read_mask) SELinuxWakeupHandler(void *data, int err, void *read_mask)
{ {
if (FD_ISSET(netlink_fd, (fd_set *)read_mask)) if (FD_ISSET(netlink_fd, (fd_set *) read_mask))
avc_netlink_check_nb(); avc_netlink_check_nb();
} }
@ -848,18 +851,18 @@ SELinuxFlaskReset(void)
void void
SELinuxFlaskInit(void) SELinuxFlaskInit(void)
{ {
struct selinux_opt avc_option = { AVC_OPT_SETENFORCE, (char *)0 }; struct selinux_opt avc_option = { AVC_OPT_SETENFORCE, (char *) 0 };
security_context_t ctx; security_context_t ctx;
int ret = TRUE; int ret = TRUE;
switch(selinuxEnforcingState) { switch (selinuxEnforcingState) {
case SELINUX_MODE_ENFORCING: case SELINUX_MODE_ENFORCING:
LogMessage(X_INFO, "SELinux: Configured in enforcing mode\n"); LogMessage(X_INFO, "SELinux: Configured in enforcing mode\n");
avc_option.value = (char *)1; avc_option.value = (char *) 1;
break; break;
case SELINUX_MODE_PERMISSIVE: case SELINUX_MODE_PERMISSIVE:
LogMessage(X_INFO, "SELinux: Configured in permissive mode\n"); LogMessage(X_INFO, "SELinux: Configured in permissive mode\n");
avc_option.value = (char *)0; avc_option.value = (char *) 0;
break; break;
default: default:
avc_option.type = AVC_OPT_UNUSED; avc_option.type = AVC_OPT_UNUSED;
@ -867,12 +870,14 @@ SELinuxFlaskInit(void)
} }
/* Set up SELinux stuff */ /* Set up SELinux stuff */
selinux_set_callback(SELINUX_CB_LOG, (union selinux_callback)SELinuxLog); selinux_set_callback(SELINUX_CB_LOG, (union selinux_callback) SELinuxLog);
selinux_set_callback(SELINUX_CB_AUDIT, (union selinux_callback)SELinuxAudit); selinux_set_callback(SELINUX_CB_AUDIT,
(union selinux_callback) SELinuxAudit);
if (selinux_set_mapping(map) < 0) { if (selinux_set_mapping(map) < 0) {
if (errno == EINVAL) { if (errno == EINVAL) {
ErrorF("SELinux: Invalid object class mapping, disabling SELinux support.\n"); ErrorF
("SELinux: Invalid object class mapping, disabling SELinux support.\n");
return; return;
} }
FatalError("SELinux: Failed to set up security class mapping\n"); FatalError("SELinux: Failed to set up security class mapping\n");
@ -893,9 +898,12 @@ SELinuxFlaskInit(void)
FatalError("SELinux: Failed to open the system audit log\n"); FatalError("SELinux: Failed to open the system audit log\n");
/* Allocate private storage */ /* Allocate private storage */
if (!dixRegisterPrivateKey(subjectKey, PRIVATE_XSELINUX, sizeof(SELinuxSubjectRec)) || if (!dixRegisterPrivateKey
!dixRegisterPrivateKey(objectKey, PRIVATE_XSELINUX, sizeof(SELinuxObjectRec)) || (subjectKey, PRIVATE_XSELINUX, sizeof(SELinuxSubjectRec)) ||
!dixRegisterPrivateKey(dataKey, PRIVATE_XSELINUX, sizeof(SELinuxObjectRec))) !dixRegisterPrivateKey(objectKey, PRIVATE_XSELINUX,
sizeof(SELinuxObjectRec)) ||
!dixRegisterPrivateKey(dataKey, PRIVATE_XSELINUX,
sizeof(SELinuxObjectRec)))
FatalError("SELinux: Failed to allocate private storage.\n"); FatalError("SELinux: Failed to allocate private storage.\n");
/* Create atoms for doing window labeling */ /* Create atoms for doing window labeling */

View File

@ -43,8 +43,10 @@ static struct selabel_handle *label_hnd;
/* Array of object classes indexed by resource type */ /* Array of object classes indexed by resource type */
SELinuxArrayRec arr_types; SELinuxArrayRec arr_types;
/* Array of event SIDs indexed by event type */ /* Array of event SIDs indexed by event type */
SELinuxArrayRec arr_events; SELinuxArrayRec arr_events;
/* Array of property and selection SID structures */ /* Array of property and selection SID structures */
SELinuxArrayRec arr_atoms; SELinuxArrayRec arr_atoms;
@ -52,13 +54,13 @@ SELinuxArrayRec arr_atoms;
* Dynamic array helpers * Dynamic array helpers
*/ */
static void * static void *
SELinuxArrayGet(SELinuxArrayRec *rec, unsigned key) SELinuxArrayGet(SELinuxArrayRec * rec, unsigned key)
{ {
return (rec->size > key) ? rec->array[key] : 0; return (rec->size > key) ? rec->array[key] : 0;
} }
static int static int
SELinuxArraySet(SELinuxArrayRec *rec, unsigned key, void *val) SELinuxArraySet(SELinuxArrayRec * rec, unsigned key, void *val)
{ {
if (key >= rec->size) { if (key >= rec->size) {
/* Need to increase size of array */ /* Need to increase size of array */
@ -74,10 +76,11 @@ SELinuxArraySet(SELinuxArrayRec *rec, unsigned key, void *val)
} }
static void static void
SELinuxArrayFree(SELinuxArrayRec *rec, int free_elements) SELinuxArrayFree(SELinuxArrayRec * rec, int free_elements)
{ {
if (free_elements) { if (free_elements) {
unsigned i = rec->size; unsigned i = rec->size;
while (i) while (i)
free(rec->array[--i]); free(rec->array[--i]);
} }
@ -91,7 +94,7 @@ SELinuxArrayFree(SELinuxArrayRec *rec, int free_elements)
* Looks up a name in the selection or property mappings * Looks up a name in the selection or property mappings
*/ */
static int static int
SELinuxAtomToSIDLookup(Atom atom, SELinuxObjectRec *obj, int map, int polymap) SELinuxAtomToSIDLookup(Atom atom, SELinuxObjectRec * obj, int map, int polymap)
{ {
const char *name = NameForAtom(atom); const char *name = NameForAtom(atom);
security_context_t ctx; security_context_t ctx;
@ -102,10 +105,12 @@ SELinuxAtomToSIDLookup(Atom atom, SELinuxObjectRec *obj, int map, int polymap)
/* Look in the mappings of names to contexts */ /* Look in the mappings of names to contexts */
if (selabel_lookup_raw(label_hnd, &ctx, name, map) == 0) { if (selabel_lookup_raw(label_hnd, &ctx, name, map) == 0) {
obj->poly = 0; obj->poly = 0;
} else if (errno != ENOENT) { }
else if (errno != ENOENT) {
ErrorF("SELinux: a property label lookup failed!\n"); ErrorF("SELinux: a property label lookup failed!\n");
return BadValue; return BadValue;
} else if (selabel_lookup_raw(label_hnd, &ctx, name, polymap) < 0) { }
else if (selabel_lookup_raw(label_hnd, &ctx, name, polymap) < 0) {
ErrorF("SELinux: a property label lookup failed!\n"); ErrorF("SELinux: a property label lookup failed!\n");
return BadValue; return BadValue;
} }
@ -124,7 +129,7 @@ SELinuxAtomToSIDLookup(Atom atom, SELinuxObjectRec *obj, int map, int polymap)
* Looks up the SID corresponding to the given property or selection atom * Looks up the SID corresponding to the given property or selection atom
*/ */
int int
SELinuxAtomToSID(Atom atom, int prop, SELinuxObjectRec **obj_rtn) SELinuxAtomToSID(Atom atom, int prop, SELinuxObjectRec ** obj_rtn)
{ {
SELinuxAtomRec *rec; SELinuxAtomRec *rec;
SELinuxObjectRec *obj; SELinuxObjectRec *obj;
@ -141,7 +146,8 @@ SELinuxAtomToSID(Atom atom, int prop, SELinuxObjectRec **obj_rtn)
obj = &rec->prp; obj = &rec->prp;
map = SELABEL_X_PROP; map = SELABEL_X_PROP;
polymap = SELABEL_X_POLYPROP; polymap = SELABEL_X_POLYPROP;
} else { }
else {
obj = &rec->sel; obj = &rec->sel;
map = SELABEL_X_SELN; map = SELABEL_X_SELN;
polymap = SELABEL_X_POLYSELN; polymap = SELABEL_X_POLYSELN;
@ -155,7 +161,7 @@ SELinuxAtomToSID(Atom atom, int prop, SELinuxObjectRec **obj_rtn)
*obj_rtn = obj; *obj_rtn = obj;
rc = Success; rc = Success;
out: out:
return rc; return rc;
} }
@ -163,8 +169,8 @@ out:
* Looks up a SID for a selection/subject pair * Looks up a SID for a selection/subject pair
*/ */
int int
SELinuxSelectionToSID(Atom selection, SELinuxSubjectRec *subj, SELinuxSelectionToSID(Atom selection, SELinuxSubjectRec * subj,
security_id_t *sid_rtn, int *poly_rtn) security_id_t * sid_rtn, int *poly_rtn)
{ {
int rc; int rc;
SELinuxObjectRec *obj; SELinuxObjectRec *obj;
@ -189,7 +195,7 @@ SELinuxSelectionToSID(Atom selection, SELinuxSubjectRec *subj,
ErrorF("SELinux: a compute_member call failed!\n"); ErrorF("SELinux: a compute_member call failed!\n");
return BadValue; return BadValue;
} }
out: out:
*sid_rtn = tsid; *sid_rtn = tsid;
if (poly_rtn) if (poly_rtn)
*poly_rtn = obj->poly; *poly_rtn = obj->poly;
@ -200,8 +206,8 @@ out:
* Looks up a SID for a property/subject pair * Looks up a SID for a property/subject pair
*/ */
int int
SELinuxPropertyToSID(Atom property, SELinuxSubjectRec *subj, SELinuxPropertyToSID(Atom property, SELinuxSubjectRec * subj,
security_id_t *sid_rtn, int *poly_rtn) security_id_t * sid_rtn, int *poly_rtn)
{ {
int rc; int rc;
SELinuxObjectRec *obj; SELinuxObjectRec *obj;
@ -219,8 +225,7 @@ SELinuxPropertyToSID(Atom property, SELinuxSubjectRec *subj,
} }
/* Perform a transition */ /* Perform a transition */
if (avc_compute_create(subj->sid, obj->sid, if (avc_compute_create(subj->sid, obj->sid, SECCLASS_X_PROPERTY, &tsid) < 0) {
SECCLASS_X_PROPERTY, &tsid) < 0) {
ErrorF("SELinux: a compute_create call failed!\n"); ErrorF("SELinux: a compute_create call failed!\n");
return BadValue; return BadValue;
} }
@ -234,7 +239,7 @@ SELinuxPropertyToSID(Atom property, SELinuxSubjectRec *subj,
return BadValue; return BadValue;
} }
} }
out: out:
*sid_rtn = tsid; *sid_rtn = tsid;
if (poly_rtn) if (poly_rtn)
*poly_rtn = obj->poly; *poly_rtn = obj->poly;
@ -246,11 +251,12 @@ out:
*/ */
int int
SELinuxEventToSID(unsigned type, security_id_t sid_of_window, SELinuxEventToSID(unsigned type, security_id_t sid_of_window,
SELinuxObjectRec *sid_return) SELinuxObjectRec * sid_return)
{ {
const char *name = LookupEventName(type); const char *name = LookupEventName(type);
security_id_t sid; security_id_t sid;
security_context_t ctx; security_context_t ctx;
type &= 127; type &= 127;
sid = SELinuxArrayGet(&arr_events, type); sid = SELinuxArrayGet(&arr_events, type);
@ -283,7 +289,7 @@ SELinuxEventToSID(unsigned type, security_id_t sid_of_window,
} }
int int
SELinuxExtensionToSID(const char *name, security_id_t *sid_rtn) SELinuxExtensionToSID(const char *name, security_id_t * sid_rtn)
{ {
security_context_t ctx; security_context_t ctx;
@ -327,17 +333,18 @@ SELinuxTypeToClass(RESTYPE type)
else { else {
/* Need to do a string lookup */ /* Need to do a string lookup */
const char *str = LookupResourceName(type); const char *str = LookupResourceName(type);
if (!strcmp(str, "PICTURE")) if (!strcmp(str, "PICTURE"))
class = SECCLASS_X_DRAWABLE; class = SECCLASS_X_DRAWABLE;
else if (!strcmp(str, "GLYPHSET")) else if (!strcmp(str, "GLYPHSET"))
class = SECCLASS_X_FONT; class = SECCLASS_X_FONT;
} }
tmp = (void *)class; tmp = (void *) class;
SELinuxArraySet(&arr_types, type & TypeMask, tmp); SELinuxArraySet(&arr_types, type & TypeMask, tmp);
} }
return (security_class_t)(unsigned long)tmp; return (security_class_t) (unsigned long) tmp;
} }
security_context_t security_context_t
@ -354,7 +361,7 @@ SELinuxDefaultClientLabel(void)
void void
SELinuxLabelInit(void) SELinuxLabelInit(void)
{ {
struct selinux_opt selabel_option = { SELABEL_OPT_VALIDATE, (char *)1 }; struct selinux_opt selabel_option = { SELABEL_OPT_VALIDATE, (char *) 1 };
label_hnd = selabel_open(SELABEL_CTX_X, &selabel_option, 1); label_hnd = selabel_open(SELABEL_CTX_X, &selabel_option, 1);
if (!label_hnd) if (!label_hnd)

View File

@ -63,10 +63,13 @@ typedef struct {
*/ */
extern DevPrivateKeyRec subjectKeyRec; extern DevPrivateKeyRec subjectKeyRec;
#define subjectKey (&subjectKeyRec) #define subjectKey (&subjectKeyRec)
extern DevPrivateKeyRec objectKeyRec; extern DevPrivateKeyRec objectKeyRec;
#define objectKey (&objectKeyRec) #define objectKey (&objectKeyRec)
extern DevPrivateKeyRec dataKeyRec; extern DevPrivateKeyRec dataKeyRec;
#define dataKey (&dataKeyRec) #define dataKey (&dataKeyRec)
/* /*
@ -74,45 +77,45 @@ extern DevPrivateKeyRec dataKeyRec;
*/ */
int int
SELinuxAtomToSID(Atom atom, int prop, SELinuxObjectRec **obj_rtn); SELinuxAtomToSID(Atom atom, int prop, SELinuxObjectRec ** obj_rtn);
int int
SELinuxSelectionToSID(Atom selection, SELinuxSubjectRec *subj,
security_id_t *sid_rtn, int *poly_rtn); SELinuxSelectionToSID(Atom selection, SELinuxSubjectRec * subj,
security_id_t * sid_rtn, int *poly_rtn);
int int
SELinuxPropertyToSID(Atom property, SELinuxSubjectRec *subj,
security_id_t *sid_rtn, int *poly_rtn); SELinuxPropertyToSID(Atom property, SELinuxSubjectRec * subj,
security_id_t * sid_rtn, int *poly_rtn);
int int
SELinuxEventToSID(unsigned type, security_id_t sid_of_window, SELinuxEventToSID(unsigned type, security_id_t sid_of_window,
SELinuxObjectRec *sid_return); SELinuxObjectRec * sid_return);
int int
SELinuxExtensionToSID(const char *name, security_id_t *sid_rtn); SELinuxExtensionToSID(const char *name, security_id_t * sid_rtn);
security_class_t security_class_t SELinuxTypeToClass(RESTYPE type);
SELinuxTypeToClass(RESTYPE type);
security_context_t security_context_t SELinuxDefaultClientLabel(void);
SELinuxDefaultClientLabel(void);
void void
SELinuxLabelInit(void); SELinuxLabelInit(void);
void void
SELinuxLabelReset(void); SELinuxLabelReset(void);
/* /*
* Security module functions * Security module functions
*/ */
void void
SELinuxFlaskInit(void); SELinuxFlaskInit(void);
void void
SELinuxFlaskReset(void); SELinuxFlaskReset(void);
/* /*
* Private Flask definitions * Private Flask definitions
@ -139,8 +142,8 @@ SELinuxFlaskReset(void);
#ifdef _XSELINUX_NEED_FLASK_MAP #ifdef _XSELINUX_NEED_FLASK_MAP
/* Mapping from DixAccess bits to Flask permissions */ /* Mapping from DixAccess bits to Flask permissions */
static struct security_class_mapping map[] = { static struct security_class_mapping map[] = {
{ "x_drawable", {"x_drawable",
{ "read", /* DixReadAccess */ {"read", /* DixReadAccess */
"write", /* DixWriteAccess */ "write", /* DixWriteAccess */
"destroy", /* DixDestroyAccess */ "destroy", /* DixDestroyAccess */
"create", /* DixCreateAccess */ "create", /* DixCreateAccess */
@ -166,9 +169,9 @@ static struct security_class_mapping map[] = {
"receive", /* DixReceiveAccess */ "receive", /* DixReceiveAccess */
"", /* DixUseAccess */ "", /* DixUseAccess */
"manage", /* DixManageAccess */ "manage", /* DixManageAccess */
NULL }}, NULL}},
{ "x_screen", {"x_screen",
{ "", /* DixReadAccess */ {"", /* DixReadAccess */
"", /* DixWriteAccess */ "", /* DixWriteAccess */
"", /* DixDestroyAccess */ "", /* DixDestroyAccess */
"", /* DixCreateAccess */ "", /* DixCreateAccess */
@ -186,9 +189,9 @@ static struct security_class_mapping map[] = {
"show_cursor", /* DixShowAccess */ "show_cursor", /* DixShowAccess */
"saver_hide", /* DixBlendAccess */ "saver_hide", /* DixBlendAccess */
"saver_show", /* DixGrabAccess */ "saver_show", /* DixGrabAccess */
NULL }}, NULL}},
{ "x_gc", {"x_gc",
{ "", /* DixReadAccess */ {"", /* DixReadAccess */
"", /* DixWriteAccess */ "", /* DixWriteAccess */
"destroy", /* DixDestroyAccess */ "destroy", /* DixDestroyAccess */
"create", /* DixCreateAccess */ "create", /* DixCreateAccess */
@ -213,9 +216,9 @@ static struct security_class_mapping map[] = {
"", /* DixSendAccess */ "", /* DixSendAccess */
"", /* DixReceiveAccess */ "", /* DixReceiveAccess */
"use", /* DixUseAccess */ "use", /* DixUseAccess */
NULL }}, NULL}},
{ "x_font", {"x_font",
{ "", /* DixReadAccess */ {"", /* DixReadAccess */
"", /* DixWriteAccess */ "", /* DixWriteAccess */
"destroy", /* DixDestroyAccess */ "destroy", /* DixDestroyAccess */
"create", /* DixCreateAccess */ "create", /* DixCreateAccess */
@ -240,9 +243,9 @@ static struct security_class_mapping map[] = {
"", /* DixSendAccess */ "", /* DixSendAccess */
"", /* DixReceiveAccess */ "", /* DixReceiveAccess */
"use", /* DixUseAccess */ "use", /* DixUseAccess */
NULL }}, NULL}},
{ "x_colormap", {"x_colormap",
{ "read", /* DixReadAccess */ {"read", /* DixReadAccess */
"write", /* DixWriteAccess */ "write", /* DixWriteAccess */
"destroy", /* DixDestroyAccess */ "destroy", /* DixDestroyAccess */
"create", /* DixCreateAccess */ "create", /* DixCreateAccess */
@ -267,9 +270,9 @@ static struct security_class_mapping map[] = {
"", /* DixSendAccess */ "", /* DixSendAccess */
"", /* DixReceiveAccess */ "", /* DixReceiveAccess */
"use", /* DixUseAccess */ "use", /* DixUseAccess */
NULL }}, NULL}},
{ "x_property", {"x_property",
{ "read", /* DixReadAccess */ {"read", /* DixReadAccess */
"write", /* DixWriteAccess */ "write", /* DixWriteAccess */
"destroy", /* DixDestroyAccess */ "destroy", /* DixDestroyAccess */
"create", /* DixCreateAccess */ "create", /* DixCreateAccess */
@ -286,17 +289,17 @@ static struct security_class_mapping map[] = {
"", /* DixHideAccess */ "", /* DixHideAccess */
"", /* DixShowAccess */ "", /* DixShowAccess */
"write", /* DixBlendAccess */ "write", /* DixBlendAccess */
NULL }}, NULL}},
{ "x_selection", {"x_selection",
{ "read", /* DixReadAccess */ {"read", /* DixReadAccess */
"", /* DixWriteAccess */ "", /* DixWriteAccess */
"", /* DixDestroyAccess */ "", /* DixDestroyAccess */
"setattr", /* DixCreateAccess */ "setattr", /* DixCreateAccess */
"getattr", /* DixGetAttrAccess */ "getattr", /* DixGetAttrAccess */
"setattr", /* DixSetAttrAccess */ "setattr", /* DixSetAttrAccess */
NULL }}, NULL}},
{ "x_cursor", {"x_cursor",
{ "read", /* DixReadAccess */ {"read", /* DixReadAccess */
"write", /* DixWriteAccess */ "write", /* DixWriteAccess */
"destroy", /* DixDestroyAccess */ "destroy", /* DixDestroyAccess */
"create", /* DixCreateAccess */ "create", /* DixCreateAccess */
@ -321,9 +324,9 @@ static struct security_class_mapping map[] = {
"", /* DixSendAccess */ "", /* DixSendAccess */
"", /* DixReceiveAccess */ "", /* DixReceiveAccess */
"use", /* DixUseAccess */ "use", /* DixUseAccess */
NULL }}, NULL}},
{ "x_client", {"x_client",
{ "", /* DixReadAccess */ {"", /* DixReadAccess */
"", /* DixWriteAccess */ "", /* DixWriteAccess */
"destroy", /* DixDestroyAccess */ "destroy", /* DixDestroyAccess */
"", /* DixCreateAccess */ "", /* DixCreateAccess */
@ -349,9 +352,9 @@ static struct security_class_mapping map[] = {
"", /* DixReceiveAccess */ "", /* DixReceiveAccess */
"", /* DixUseAccess */ "", /* DixUseAccess */
"manage", /* DixManageAccess */ "manage", /* DixManageAccess */
NULL }}, NULL}},
{ "x_pointer", {"x_pointer",
{ "read", /* DixReadAccess */ {"read", /* DixReadAccess */
"write", /* DixWriteAccess */ "write", /* DixWriteAccess */
"destroy", /* DixDestroyAccess */ "destroy", /* DixDestroyAccess */
"create", /* DixCreateAccess */ "create", /* DixCreateAccess */
@ -379,9 +382,9 @@ static struct security_class_mapping map[] = {
"manage", /* DixManageAccess */ "manage", /* DixManageAccess */
"", /* DixDebugAccess */ "", /* DixDebugAccess */
"bell", /* DixBellAccess */ "bell", /* DixBellAccess */
NULL }}, NULL}},
{ "x_keyboard", {"x_keyboard",
{ "read", /* DixReadAccess */ {"read", /* DixReadAccess */
"write", /* DixWriteAccess */ "write", /* DixWriteAccess */
"destroy", /* DixDestroyAccess */ "destroy", /* DixDestroyAccess */
"create", /* DixCreateAccess */ "create", /* DixCreateAccess */
@ -409,9 +412,9 @@ static struct security_class_mapping map[] = {
"manage", /* DixManageAccess */ "manage", /* DixManageAccess */
"", /* DixDebugAccess */ "", /* DixDebugAccess */
"bell", /* DixBellAccess */ "bell", /* DixBellAccess */
NULL }}, NULL}},
{ "x_server", {"x_server",
{ "record", /* DixReadAccess */ {"record", /* DixReadAccess */
"", /* DixWriteAccess */ "", /* DixWriteAccess */
"", /* DixDestroyAccess */ "", /* DixDestroyAccess */
"", /* DixCreateAccess */ "", /* DixCreateAccess */
@ -438,9 +441,9 @@ static struct security_class_mapping map[] = {
"", /* DixUseAccess */ "", /* DixUseAccess */
"manage", /* DixManageAccess */ "manage", /* DixManageAccess */
"debug", /* DixDebugAccess */ "debug", /* DixDebugAccess */
NULL }}, NULL}},
{ "x_extension", {"x_extension",
{ "", /* DixReadAccess */ {"", /* DixReadAccess */
"", /* DixWriteAccess */ "", /* DixWriteAccess */
"", /* DixDestroyAccess */ "", /* DixDestroyAccess */
"", /* DixCreateAccess */ "", /* DixCreateAccess */
@ -465,9 +468,9 @@ static struct security_class_mapping map[] = {
"", /* DixSendAccess */ "", /* DixSendAccess */
"", /* DixReceiveAccess */ "", /* DixReceiveAccess */
"use", /* DixUseAccess */ "use", /* DixUseAccess */
NULL }}, NULL}},
{ "x_event", {"x_event",
{ "", /* DixReadAccess */ {"", /* DixReadAccess */
"", /* DixWriteAccess */ "", /* DixWriteAccess */
"", /* DixDestroyAccess */ "", /* DixDestroyAccess */
"", /* DixCreateAccess */ "", /* DixCreateAccess */
@ -491,9 +494,9 @@ static struct security_class_mapping map[] = {
"", /* DixUninstallAccess */ "", /* DixUninstallAccess */
"send", /* DixSendAccess */ "send", /* DixSendAccess */
"receive", /* DixReceiveAccess */ "receive", /* DixReceiveAccess */
NULL }}, NULL}},
{ "x_synthetic_event", {"x_synthetic_event",
{ "", /* DixReadAccess */ {"", /* DixReadAccess */
"", /* DixWriteAccess */ "", /* DixWriteAccess */
"", /* DixDestroyAccess */ "", /* DixDestroyAccess */
"", /* DixCreateAccess */ "", /* DixCreateAccess */
@ -517,9 +520,9 @@ static struct security_class_mapping map[] = {
"", /* DixUninstallAccess */ "", /* DixUninstallAccess */
"send", /* DixSendAccess */ "send", /* DixSendAccess */
"receive", /* DixReceiveAccess */ "receive", /* DixReceiveAccess */
NULL }}, NULL}},
{ "x_resource", {"x_resource",
{ "read", /* DixReadAccess */ {"read", /* DixReadAccess */
"write", /* DixWriteAccess */ "write", /* DixWriteAccess */
"write", /* DixDestroyAccess */ "write", /* DixDestroyAccess */
"write", /* DixCreateAccess */ "write", /* DixCreateAccess */
@ -547,8 +550,8 @@ static struct security_class_mapping map[] = {
"write", /* DixManageAccess */ "write", /* DixManageAccess */
"read", /* DixDebugAccess */ "read", /* DixDebugAccess */
"write", /* DixBellAccess */ "write", /* DixBellAccess */
NULL }}, NULL}},
{ NULL } {NULL}
}; };
/* x_resource "read" bits from the list above */ /* x_resource "read" bits from the list above */

View File

@ -62,7 +62,7 @@ extern int DeviceValuator;
/* XTest events are sent during request processing and may be interruped by /* XTest events are sent during request processing and may be interruped by
* a SIGIO. We need a separate event list to avoid events overwriting each * a SIGIO. We need a separate event list to avoid events overwriting each
* other's memory */ * other's memory */
static InternalEvent* xtest_evlist; static InternalEvent *xtest_evlist;
/** /**
* xtestpointer * xtestpointer
@ -81,12 +81,10 @@ DeviceIntPtr xtestpointer, xtestkeyboard;
#include "panoramiXsrv.h" #include "panoramiXsrv.h"
#endif #endif
static int XTestSwapFakeInput( static int XTestSwapFakeInput(ClientPtr /* client */ ,
ClientPtr /* client */,
xReq * /* req */ xReq * /* req */
); );
static int static int
ProcXTestGetVersion(ClientPtr client) ProcXTestGetVersion(ClientPtr client)
{ {
@ -102,7 +100,7 @@ ProcXTestGetVersion(ClientPtr client)
swaps(&rep.sequenceNumber); swaps(&rep.sequenceNumber);
swaps(&rep.minorVersion); swaps(&rep.minorVersion);
} }
WriteToClient(client, sizeof(xXTestGetVersionReply), (char *)&rep); WriteToClient(client, sizeof(xXTestGetVersionReply), (char *) &rep);
return Success; return Success;
} }
@ -125,10 +123,9 @@ ProcXTestCompareCursor(ClientPtr client)
else if (stuff->cursor == XTestCurrentCursor) else if (stuff->cursor == XTestCurrentCursor)
pCursor = GetSpriteCursor(ptr); pCursor = GetSpriteCursor(ptr);
else { else {
rc = dixLookupResourceByType((pointer *)&pCursor, stuff->cursor, RT_CURSOR, rc = dixLookupResourceByType((pointer *) &pCursor, stuff->cursor,
client, DixReadAccess); RT_CURSOR, client, DixReadAccess);
if (rc != Success) if (rc != Success) {
{
client->errorValue = stuff->cursor; client->errorValue = stuff->cursor;
return rc; return rc;
} }
@ -140,7 +137,7 @@ ProcXTestCompareCursor(ClientPtr client)
if (client->swapped) { if (client->swapped) {
swaps(&rep.sequenceNumber); swaps(&rep.sequenceNumber);
} }
WriteToClient(client, sizeof(xXTestCompareCursorReply), (char *)&rep); WriteToClient(client, sizeof(xXTestCompareCursorReply), (char *) &rep);
return Success; return Success;
} }
@ -155,7 +152,7 @@ ProcXTestFakeInput(ClientPtr client)
Bool extension = FALSE; Bool extension = FALSE;
deviceValuator *dv = NULL; deviceValuator *dv = NULL;
ValuatorMask mask; ValuatorMask mask;
int valuators[MAX_VALUATORS] = {0}; int valuators[MAX_VALUATORS] = { 0 };
int numValuators = 0; int numValuators = 0;
int firstValuator = 0; int firstValuator = 0;
int nevents = 0; int nevents = 0;
@ -169,18 +166,16 @@ ProcXTestFakeInput(ClientPtr client)
return BadLength; return BadLength;
nev /= sizeof(xEvent); nev /= sizeof(xEvent);
UpdateCurrentTime(); UpdateCurrentTime();
ev = (xEvent *)&((xReq *)stuff)[1]; ev = (xEvent *) &((xReq *) stuff)[1];
type = ev->u.u.type & 0177; type = ev->u.u.type & 0177;
if (type >= EXTENSION_EVENT_BASE) if (type >= EXTENSION_EVENT_BASE) {
{
extension = TRUE; extension = TRUE;
/* check device */ /* check device */
rc = dixLookupDevice(&dev, stuff->deviceid & 0177, client, rc = dixLookupDevice(&dev, stuff->deviceid & 0177, client,
DixWriteAccess); DixWriteAccess);
if (rc != Success) if (rc != Success) {
{
client->errorValue = stuff->deviceid & 0177; client->errorValue = stuff->deviceid & 0177;
return rc; return rc;
} }
@ -190,31 +185,27 @@ ProcXTestFakeInput(ClientPtr client)
switch (type) { switch (type) {
case XI_DeviceKeyPress: case XI_DeviceKeyPress:
case XI_DeviceKeyRelease: case XI_DeviceKeyRelease:
if (!dev->key) if (!dev->key) {
{
client->errorValue = ev->u.u.type; client->errorValue = ev->u.u.type;
return BadValue; return BadValue;
} }
break; break;
case XI_DeviceButtonPress: case XI_DeviceButtonPress:
case XI_DeviceButtonRelease: case XI_DeviceButtonRelease:
if (!dev->button) if (!dev->button) {
{
client->errorValue = ev->u.u.type; client->errorValue = ev->u.u.type;
return BadValue; return BadValue;
} }
break; break;
case XI_DeviceMotionNotify: case XI_DeviceMotionNotify:
if (!dev->valuator) if (!dev->valuator) {
{
client->errorValue = ev->u.u.type; client->errorValue = ev->u.u.type;
return BadValue; return BadValue;
} }
break; break;
case XI_ProximityIn: case XI_ProximityIn:
case XI_ProximityOut: case XI_ProximityOut:
if (!dev->proximity) if (!dev->proximity) {
{
client->errorValue = ev->u.u.type; client->errorValue = ev->u.u.type;
return BadValue; return BadValue;
} }
@ -228,53 +219,51 @@ ProcXTestFakeInput(ClientPtr client)
if (nev == 1 && type == XI_DeviceMotionNotify) if (nev == 1 && type == XI_DeviceMotionNotify)
return BadLength; /* DevMotion must be followed by DevValuator */ return BadLength; /* DevMotion must be followed by DevValuator */
if (type == XI_DeviceMotionNotify) if (type == XI_DeviceMotionNotify) {
{ firstValuator = ((deviceValuator *) (ev + 1))->first_valuator;
firstValuator = ((deviceValuator *)(ev+1))->first_valuator; if (firstValuator > dev->valuator->numAxes) {
if (firstValuator > dev->valuator->numAxes)
{
client->errorValue = ev->u.u.type; client->errorValue = ev->u.u.type;
return BadValue; return BadValue;
} }
if (ev->u.u.detail == xFalse) if (ev->u.u.detail == xFalse)
flags |= POINTER_ABSOLUTE; flags |= POINTER_ABSOLUTE;
} else }
{ else {
firstValuator = 0; firstValuator = 0;
flags |= POINTER_ABSOLUTE; flags |= POINTER_ABSOLUTE;
} }
if (nev > 1 && !dev->valuator) if (nev > 1 && !dev->valuator) {
{
client->errorValue = dv->first_valuator; client->errorValue = dv->first_valuator;
return BadValue; return BadValue;
} }
/* check validity of valuator events */ /* check validity of valuator events */
base = firstValuator; base = firstValuator;
for (n = 1; n < nev; n++) for (n = 1; n < nev; n++) {
{ dv = (deviceValuator *) (ev + n);
dv = (deviceValuator *)(ev + n); if (dv->type != DeviceValuator) {
if (dv->type != DeviceValuator)
{
client->errorValue = dv->type; client->errorValue = dv->type;
return BadValue; return BadValue;
} }
if (dv->first_valuator != base) if (dv->first_valuator != base) {
{
client->errorValue = dv->first_valuator; client->errorValue = dv->first_valuator;
return BadValue; return BadValue;
} }
switch(dv->num_valuators) switch (dv->num_valuators) {
{ case 6:
case 6: valuators[base + 5] = dv->valuator5; valuators[base + 5] = dv->valuator5;
case 5: valuators[base + 4] = dv->valuator4; case 5:
case 4: valuators[base + 3] = dv->valuator3; valuators[base + 4] = dv->valuator4;
case 3: valuators[base + 2] = dv->valuator2; case 4:
case 2: valuators[base + 1] = dv->valuator1; valuators[base + 3] = dv->valuator3;
case 1: valuators[base] = dv->valuator0; case 3:
valuators[base + 2] = dv->valuator2;
case 2:
valuators[base + 1] = dv->valuator1;
case 1:
valuators[base] = dv->valuator0;
break; break;
default: default:
client->errorValue = dv->num_valuators; client->errorValue = dv->num_valuators;
@ -284,20 +273,18 @@ ProcXTestFakeInput(ClientPtr client)
base += dv->num_valuators; base += dv->num_valuators;
numValuators += dv->num_valuators; numValuators += dv->num_valuators;
if (firstValuator + numValuators > dev->valuator->numAxes) if (firstValuator + numValuators > dev->valuator->numAxes) {
{
client->errorValue = dv->num_valuators; client->errorValue = dv->num_valuators;
return BadValue; return BadValue;
} }
} }
type = type - XI_DeviceKeyPress + KeyPress; type = type - XI_DeviceKeyPress + KeyPress;
} else }
{ else {
if (nev != 1) if (nev != 1)
return BadLength; return BadLength;
switch (type) switch (type) {
{
case KeyPress: case KeyPress:
case KeyRelease: case KeyRelease:
dev = PickKeyboard(client); dev = PickKeyboard(client);
@ -324,8 +311,7 @@ ProcXTestFakeInput(ClientPtr client)
} }
/* If the event has a time set, wait for it to pass */ /* If the event has a time set, wait for it to pass */
if (ev->u.keyButtonPointer.time) if (ev->u.keyButtonPointer.time) {
{
TimeStamp activateTime; TimeStamp activateTime;
CARD32 ms; CARD32 ms;
@ -339,31 +325,27 @@ ProcXTestFakeInput(ClientPtr client)
/* see mbuf.c:QueueDisplayRequest (from the deprecated Multibuffer /* see mbuf.c:QueueDisplayRequest (from the deprecated Multibuffer
* extension) for code similar to this */ * extension) for code similar to this */
if (!ClientSleepUntil(client, &activateTime, NULL, NULL)) if (!ClientSleepUntil(client, &activateTime, NULL, NULL)) {
{
return BadAlloc; return BadAlloc;
} }
/* swap the request back so we can simply re-execute it */ /* swap the request back so we can simply re-execute it */
if (client->swapped) if (client->swapped) {
{ (void) XTestSwapFakeInput(client, (xReq *) stuff);
(void) XTestSwapFakeInput(client, (xReq *)stuff);
swaps(&stuff->length); swaps(&stuff->length);
} }
ResetCurrentRequest (client); ResetCurrentRequest(client);
client->sequence--; client->sequence--;
return Success; return Success;
} }
switch (type) switch (type) {
{
case KeyPress: case KeyPress:
case KeyRelease: case KeyRelease:
if (!dev->key) if (!dev->key)
return BadDevice; return BadDevice;
if (ev->u.u.detail < dev->key->xkbInfo->desc->min_key_code || if (ev->u.u.detail < dev->key->xkbInfo->desc->min_key_code ||
ev->u.u.detail > dev->key->xkbInfo->desc->max_key_code) ev->u.u.detail > dev->key->xkbInfo->desc->max_key_code) {
{
client->errorValue = ev->u.u.detail; client->errorValue = ev->u.u.detail;
return BadValue; return BadValue;
} }
@ -374,20 +356,17 @@ ProcXTestFakeInput(ClientPtr client)
if (!dev->valuator) if (!dev->valuator)
return BadDevice; return BadDevice;
if (!(extension || ev->u.keyButtonPointer.root == None)) if (!(extension || ev->u.keyButtonPointer.root == None)) {
{
rc = dixLookupWindow(&root, ev->u.keyButtonPointer.root, rc = dixLookupWindow(&root, ev->u.keyButtonPointer.root,
client, DixGetAttrAccess); client, DixGetAttrAccess);
if (rc != Success) if (rc != Success)
return rc; return rc;
if (root->parent) if (root->parent) {
{
client->errorValue = ev->u.keyButtonPointer.root; client->errorValue = ev->u.keyButtonPointer.root;
return BadValue; return BadValue;
} }
} }
if (ev->u.u.detail != xTrue && ev->u.u.detail != xFalse) if (ev->u.u.detail != xTrue && ev->u.u.detail != xFalse) {
{
client->errorValue = ev->u.u.detail; client->errorValue = ev->u.u.detail;
return BadValue; return BadValue;
} }
@ -400,8 +379,7 @@ ProcXTestFakeInput(ClientPtr client)
if (!dev->button) if (!dev->button)
return BadDevice; return BadDevice;
if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons) if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons) {
{
client->errorValue = ev->u.u.detail; client->errorValue = ev->u.u.detail;
return BadValue; return BadValue;
} }
@ -410,7 +388,7 @@ ProcXTestFakeInput(ClientPtr client)
if (screenIsSaved == SCREEN_SAVER_ON) if (screenIsSaved == SCREEN_SAVER_ON)
dixSaveScreens(serverClient, SCREEN_SAVER_OFF, ScreenSaverReset); dixSaveScreens(serverClient, SCREEN_SAVER_OFF, ScreenSaverReset);
switch(type) { switch (type) {
case MotionNotify: case MotionNotify:
valuator_mask_set_range(&mask, firstValuator, numValuators, valuators); valuator_mask_set_range(&mask, firstValuator, numValuators, valuators);
nevents = GetPointerEvents(xtest_evlist, dev, type, 0, flags, &mask); nevents = GetPointerEvents(xtest_evlist, dev, type, 0, flags, &mask);
@ -423,7 +401,8 @@ ProcXTestFakeInput(ClientPtr client)
break; break;
case KeyPress: case KeyPress:
case KeyRelease: case KeyRelease:
nevents = GetKeyboardEvents(xtest_evlist, dev, type, ev->u.u.detail, NULL); nevents =
GetKeyboardEvents(xtest_evlist, dev, type, ev->u.u.detail, NULL);
break; break;
} }
@ -441,8 +420,7 @@ ProcXTestGrabControl(ClientPtr client)
REQUEST(xXTestGrabControlReq); REQUEST(xXTestGrabControlReq);
REQUEST_SIZE_MATCH(xXTestGrabControlReq); REQUEST_SIZE_MATCH(xXTestGrabControlReq);
if ((stuff->impervious != xTrue) && (stuff->impervious != xFalse)) if ((stuff->impervious != xTrue) && (stuff->impervious != xFalse)) {
{
client->errorValue = stuff->impervious; client->errorValue = stuff->impervious;
return BadValue; return BadValue;
} }
@ -454,11 +432,10 @@ ProcXTestGrabControl(ClientPtr client)
} }
static int static int
ProcXTestDispatch (ClientPtr client) ProcXTestDispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
switch (stuff->data) switch (stuff->data) {
{
case X_XTestGetVersion: case X_XTestGetVersion:
return ProcXTestGetVersion(client); return ProcXTestGetVersion(client);
case X_XTestCompareCursor: case X_XTestCompareCursor:
@ -496,7 +473,7 @@ SProcXTestCompareCursor(ClientPtr client)
} }
static int static int
XTestSwapFakeInput(ClientPtr client, xReq *req) XTestSwapFakeInput(ClientPtr client, xReq * req)
{ {
int nev; int nev;
xEvent *ev; xEvent *ev;
@ -504,8 +481,7 @@ XTestSwapFakeInput(ClientPtr client, xReq *req)
EventSwapPtr proc; EventSwapPtr proc;
nev = ((req->length << 2) - sizeof(xReq)) / sizeof(xEvent); nev = ((req->length << 2) - sizeof(xReq)) / sizeof(xEvent);
for (ev = (xEvent *)&req[1]; --nev >= 0; ev++) for (ev = (xEvent *) &req[1]; --nev >= 0; ev++) {
{
/* Swap event */ /* Swap event */
proc = EventSwapVector[ev->u.u.type & 0177]; proc = EventSwapVector[ev->u.u.type & 0177];
/* no swapping proc; invalid event type? */ /* no swapping proc; invalid event type? */
@ -513,7 +489,7 @@ XTestSwapFakeInput(ClientPtr client, xReq *req)
client->errorValue = ev->u.u.type; client->errorValue = ev->u.u.type;
return BadValue; return BadValue;
} }
(*proc)(ev, &sev); (*proc) (ev, &sev);
*ev = sev; *ev = sev;
} }
return Success; return Success;
@ -523,6 +499,7 @@ static int
SProcXTestFakeInput(ClientPtr client) SProcXTestFakeInput(ClientPtr client)
{ {
int n; int n;
REQUEST(xReq); REQUEST(xReq);
swaps(&stuff->length); swaps(&stuff->length);
@ -543,11 +520,10 @@ SProcXTestGrabControl(ClientPtr client)
} }
static int static int
SProcXTestDispatch (ClientPtr client) SProcXTestDispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
switch (stuff->data) switch (stuff->data) {
{
case X_XTestGetVersion: case X_XTestGetVersion:
return SProcXTestGetVersion(client); return SProcXTestGetVersion(client);
case X_XTestCompareCursor: case X_XTestCompareCursor:
@ -565,9 +541,10 @@ SProcXTestDispatch (ClientPtr client)
* Allocate an virtual slave device for xtest events, this * Allocate an virtual slave device for xtest events, this
* is a slave device to inputInfo master devices * is a slave device to inputInfo master devices
*/ */
void InitXTestDevices(void) void
InitXTestDevices(void)
{ {
if(AllocXTestDevice(serverClient, "Virtual core", if (AllocXTestDevice(serverClient, "Virtual core",
&xtestpointer, &xtestkeyboard, &xtestpointer, &xtestkeyboard,
inputInfo.pointer, inputInfo.keyboard) != Success) inputInfo.pointer, inputInfo.keyboard) != Success)
FatalError("Failed to allocate XTest devices"); FatalError("Failed to allocate XTest devices");
@ -575,11 +552,11 @@ void InitXTestDevices(void)
if (ActivateDevice(xtestpointer, TRUE) != Success || if (ActivateDevice(xtestpointer, TRUE) != Success ||
ActivateDevice(xtestkeyboard, TRUE) != Success) ActivateDevice(xtestkeyboard, TRUE) != Success)
FatalError("Failed to activate XTest core devices."); FatalError("Failed to activate XTest core devices.");
if (!EnableDevice(xtestpointer, TRUE) || if (!EnableDevice(xtestpointer, TRUE) || !EnableDevice(xtestkeyboard, TRUE))
!EnableDevice(xtestkeyboard, TRUE))
FatalError("Failed to enable XTest core devices."); FatalError("Failed to enable XTest core devices.");
AttachDevice(NULL, xtestpointer, inputInfo.pointer); AttachDevice(NULL, xtestpointer, inputInfo.pointer);
AttachDevice(NULL, xtestkeyboard, inputInfo.keyboard); AttachDevice(NULL, xtestkeyboard, inputInfo.keyboard);
} }
@ -603,8 +580,9 @@ DeviceSetXTestProperty(DeviceIntPtr dev, Atom property,
* This only creates the pair, Activate/Enable Device * This only creates the pair, Activate/Enable Device
* still need to be called. * still need to be called.
*/ */
int AllocXTestDevice (ClientPtr client, const char* name, int
DeviceIntPtr* ptr, DeviceIntPtr* keybd, AllocXTestDevice(ClientPtr client, const char *name,
DeviceIntPtr *ptr, DeviceIntPtr *keybd,
DeviceIntPtr master_ptr, DeviceIntPtr master_keybd) DeviceIntPtr master_ptr, DeviceIntPtr master_keybd)
{ {
int retval; int retval;
@ -614,24 +592,30 @@ int AllocXTestDevice (ClientPtr client, const char* name,
if (asprintf(&xtestname, "%s XTEST", name) == -1) if (asprintf(&xtestname, "%s XTEST", name) == -1)
return BadAlloc; return BadAlloc;
retval = AllocDevicePair( client, xtestname, ptr, keybd, CorePointerProc, CoreKeyboardProc, FALSE); retval =
if ( retval == Success ){ AllocDevicePair(client, xtestname, ptr, keybd, CorePointerProc,
CoreKeyboardProc, FALSE);
if (retval == Success) {
(*ptr)->xtest_master_id = master_ptr->id; (*ptr)->xtest_master_id = master_ptr->id;
(*keybd)->xtest_master_id = master_keybd->id; (*keybd)->xtest_master_id = master_keybd->id;
XIChangeDeviceProperty(*ptr, XIGetKnownProperty(XI_PROP_XTEST_DEVICE), XIChangeDeviceProperty(*ptr, XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
XA_INTEGER, 8, PropModeReplace, 1, &dummy, XA_INTEGER, 8, PropModeReplace, 1, &dummy,
FALSE); FALSE);
XISetDevicePropertyDeletable(*ptr, XIGetKnownProperty(XI_PROP_XTEST_DEVICE), FALSE); XISetDevicePropertyDeletable(*ptr,
XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
FALSE);
XIRegisterPropertyHandler(*ptr, DeviceSetXTestProperty, NULL, NULL); XIRegisterPropertyHandler(*ptr, DeviceSetXTestProperty, NULL, NULL);
XIChangeDeviceProperty(*keybd, XIGetKnownProperty(XI_PROP_XTEST_DEVICE), XIChangeDeviceProperty(*keybd, XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
XA_INTEGER, 8, PropModeReplace, 1, &dummy, XA_INTEGER, 8, PropModeReplace, 1, &dummy,
FALSE); FALSE);
XISetDevicePropertyDeletable(*keybd, XIGetKnownProperty(XI_PROP_XTEST_DEVICE), FALSE); XISetDevicePropertyDeletable(*keybd,
XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
FALSE);
XIRegisterPropertyHandler(*keybd, DeviceSetXTestProperty, NULL, NULL); XIRegisterPropertyHandler(*keybd, DeviceSetXTestProperty, NULL, NULL);
} }
free( xtestname ); free(xtestname);
return retval; return retval;
} }
@ -664,8 +648,7 @@ GetXTestDevice(DeviceIntPtr master)
{ {
DeviceIntPtr it; DeviceIntPtr it;
for (it = inputInfo.devices; it; it = it->next) for (it = inputInfo.devices; it; it = it->next) {
{
if (IsXTestDevice(it, master)) if (IsXTestDevice(it, master))
return it; return it;
} }
@ -675,7 +658,7 @@ GetXTestDevice(DeviceIntPtr master)
} }
static void static void
XTestExtensionTearDown(ExtensionEntry *e) XTestExtensionTearDown(ExtensionEntry * e)
{ {
FreeEventList(xtest_evlist, GetMaximumEventsNum()); FreeEventList(xtest_evlist, GetMaximumEventsNum());
xtest_evlist = NULL; xtest_evlist = NULL;

File diff suppressed because it is too large Load Diff

View File

@ -159,34 +159,33 @@ typedef struct {
int nPorts; int nPorts;
struct _XvPortRec *pPorts; struct _XvPortRec *pPorts;
ScreenPtr pScreen; ScreenPtr pScreen;
int (* ddAllocatePort)(unsigned long, struct _XvPortRec*, int (*ddAllocatePort) (unsigned long, struct _XvPortRec *,
struct _XvPortRec**); struct _XvPortRec **);
int (* ddFreePort)(struct _XvPortRec*); int (*ddFreePort) (struct _XvPortRec *);
int (* ddPutVideo)(ClientPtr, DrawablePtr,struct _XvPortRec*, GCPtr, int (*ddPutVideo) (ClientPtr, DrawablePtr, struct _XvPortRec *, GCPtr,
INT16, INT16, CARD16, CARD16, INT16, INT16, CARD16, CARD16,
INT16, INT16, CARD16, CARD16); INT16, INT16, CARD16, CARD16);
int (* ddPutStill)(ClientPtr, DrawablePtr,struct _XvPortRec*, GCPtr, int (*ddPutStill) (ClientPtr, DrawablePtr, struct _XvPortRec *, GCPtr,
INT16, INT16, CARD16, CARD16, INT16, INT16, CARD16, CARD16,
INT16, INT16, CARD16, CARD16); INT16, INT16, CARD16, CARD16);
int (* ddGetVideo)(ClientPtr, DrawablePtr,struct _XvPortRec*, GCPtr, int (*ddGetVideo) (ClientPtr, DrawablePtr, struct _XvPortRec *, GCPtr,
INT16, INT16, CARD16, CARD16, INT16, INT16, CARD16, CARD16,
INT16, INT16, CARD16, CARD16); INT16, INT16, CARD16, CARD16);
int (* ddGetStill)(ClientPtr, DrawablePtr,struct _XvPortRec*, GCPtr, int (*ddGetStill) (ClientPtr, DrawablePtr, struct _XvPortRec *, GCPtr,
INT16, INT16, CARD16, CARD16, INT16, INT16, CARD16, CARD16,
INT16, INT16, CARD16, CARD16); INT16, INT16, CARD16, CARD16);
int (* ddStopVideo)(ClientPtr, struct _XvPortRec*, DrawablePtr); int (*ddStopVideo) (ClientPtr, struct _XvPortRec *, DrawablePtr);
int (* ddSetPortAttribute)(ClientPtr, struct _XvPortRec*, Atom, INT32); int (*ddSetPortAttribute) (ClientPtr, struct _XvPortRec *, Atom, INT32);
int (* ddGetPortAttribute)(ClientPtr, struct _XvPortRec*, Atom, INT32*); int (*ddGetPortAttribute) (ClientPtr, struct _XvPortRec *, Atom, INT32 *);
int (* ddQueryBestSize)(ClientPtr, struct _XvPortRec*, CARD8, int (*ddQueryBestSize) (ClientPtr, struct _XvPortRec *, CARD8,
CARD16, CARD16,CARD16, CARD16, CARD16, CARD16, CARD16, CARD16,
unsigned int*, unsigned int*); unsigned int *, unsigned int *);
int (* ddPutImage)(ClientPtr, DrawablePtr, struct _XvPortRec*, GCPtr, int (*ddPutImage) (ClientPtr, DrawablePtr, struct _XvPortRec *, GCPtr,
INT16, INT16, CARD16, CARD16, INT16, INT16, CARD16, CARD16,
INT16, INT16, CARD16, CARD16, INT16, INT16, CARD16, CARD16,
XvImagePtr, unsigned char*, Bool, XvImagePtr, unsigned char *, Bool, CARD16, CARD16);
CARD16, CARD16); int (*ddQueryImageAttributes) (ClientPtr, struct _XvPortRec *, XvImagePtr,
int (* ddQueryImageAttributes)(ClientPtr, struct _XvPortRec*, XvImagePtr, CARD16 *, CARD16 *, int *, int *);
CARD16*, CARD16*, int*, int*);
DevUnion devPriv; DevUnion devPriv;
} XvAdaptorRec, *XvAdaptorPtr; } XvAdaptorRec, *XvAdaptorPtr;
@ -216,8 +215,8 @@ typedef struct {
DestroyWindowProcPtr DestroyWindow; DestroyWindowProcPtr DestroyWindow;
DestroyPixmapProcPtr DestroyPixmap; DestroyPixmapProcPtr DestroyPixmap;
CloseScreenProcPtr CloseScreen; CloseScreenProcPtr CloseScreen;
Bool (* ddCloseScreen)(int, ScreenPtr); Bool (*ddCloseScreen) (int, ScreenPtr);
int (* ddQueryAdaptors)(ScreenPtr, XvAdaptorPtr*, int*); int (*ddQueryAdaptors) (ScreenPtr, XvAdaptorPtr *, int *);
DevUnion devPriv; DevUnion devPriv;
} XvScreenRec, *XvScreenPtr; } XvScreenRec, *XvScreenPtr;
@ -258,18 +257,17 @@ extern _X_EXPORT int XvdiGetStill(ClientPtr, DrawablePtr, XvPortPtr, GCPtr,
extern _X_EXPORT int XvdiPutImage(ClientPtr, DrawablePtr, XvPortPtr, GCPtr, extern _X_EXPORT int XvdiPutImage(ClientPtr, DrawablePtr, XvPortPtr, GCPtr,
INT16, INT16, CARD16, CARD16, INT16, INT16, CARD16, CARD16,
INT16, INT16, CARD16, CARD16, INT16, INT16, CARD16, CARD16,
XvImagePtr, unsigned char*, Bool, XvImagePtr, unsigned char *, Bool,
CARD16, CARD16); CARD16, CARD16);
extern _X_EXPORT int XvdiSelectVideoNotify(ClientPtr, DrawablePtr, BOOL); extern _X_EXPORT int XvdiSelectVideoNotify(ClientPtr, DrawablePtr, BOOL);
extern _X_EXPORT int XvdiSelectPortNotify(ClientPtr, XvPortPtr, BOOL); extern _X_EXPORT int XvdiSelectPortNotify(ClientPtr, XvPortPtr, BOOL);
extern _X_EXPORT int XvdiSetPortAttribute(ClientPtr, XvPortPtr, Atom, INT32); extern _X_EXPORT int XvdiSetPortAttribute(ClientPtr, XvPortPtr, Atom, INT32);
extern _X_EXPORT int XvdiGetPortAttribute(ClientPtr, XvPortPtr, Atom, INT32*); extern _X_EXPORT int XvdiGetPortAttribute(ClientPtr, XvPortPtr, Atom, INT32 *);
extern _X_EXPORT int XvdiStopVideo(ClientPtr, XvPortPtr, DrawablePtr); extern _X_EXPORT int XvdiStopVideo(ClientPtr, XvPortPtr, DrawablePtr);
extern _X_EXPORT int XvdiPreemptVideo(ClientPtr, XvPortPtr, DrawablePtr); extern _X_EXPORT int XvdiPreemptVideo(ClientPtr, XvPortPtr, DrawablePtr);
extern _X_EXPORT int XvdiMatchPort(XvPortPtr, DrawablePtr); extern _X_EXPORT int XvdiMatchPort(XvPortPtr, DrawablePtr);
extern _X_EXPORT int XvdiGrabPort(ClientPtr, XvPortPtr, Time, int *); extern _X_EXPORT int XvdiGrabPort(ClientPtr, XvPortPtr, Time, int *);
extern _X_EXPORT int XvdiUngrabPort( ClientPtr, XvPortPtr, Time); extern _X_EXPORT int XvdiUngrabPort(ClientPtr, XvPortPtr, Time);
#endif /* XorgLoader */ #endif /* XorgLoader */
#endif /* XVDIX_H */ #endif /* XVDIX_H */

View File

@ -106,6 +106,7 @@ SOFTWARE.
#include "xvdisp.h" #include "xvdisp.h"
static DevPrivateKeyRec XvScreenKeyRec; static DevPrivateKeyRec XvScreenKeyRec;
#define XvScreenKey (&XvScreenKeyRec) #define XvScreenKey (&XvScreenKeyRec)
unsigned long XvExtensionGeneration = 0; unsigned long XvExtensionGeneration = 0;
unsigned long XvScreenGeneration = 0; unsigned long XvScreenGeneration = 0;
@ -131,7 +132,7 @@ static Bool CreateResourceTypes(void);
static Bool XvCloseScreen(int, ScreenPtr); static Bool XvCloseScreen(int, ScreenPtr);
static Bool XvDestroyPixmap(PixmapPtr); static Bool XvDestroyPixmap(PixmapPtr);
static Bool XvDestroyWindow(WindowPtr); static Bool XvDestroyWindow(WindowPtr);
static void XvResetProc(ExtensionEntry*); static void XvResetProc(ExtensionEntry *);
static int XvdiDestroyGrab(pointer, XID); static int XvdiDestroyGrab(pointer, XID);
static int XvdiDestroyEncoding(pointer, XID); static int XvdiDestroyEncoding(pointer, XID);
static int XvdiDestroyVideoNotify(pointer, XID); static int XvdiDestroyVideoNotify(pointer, XID);
@ -140,9 +141,6 @@ static int XvdiDestroyVideoNotifyList(pointer, XID);
static int XvdiDestroyPort(pointer, XID); static int XvdiDestroyPort(pointer, XID);
static int XvdiSendVideoNotify(XvPortPtr, DrawablePtr, int); static int XvdiSendVideoNotify(XvPortPtr, DrawablePtr, int);
/* /*
** XvExtensionInit ** XvExtensionInit
** **
@ -159,10 +157,8 @@ XvExtensionInit(void)
/* LOOK TO SEE IF ANY SCREENS WERE INITIALIZED; IF NOT THEN /* LOOK TO SEE IF ANY SCREENS WERE INITIALIZED; IF NOT THEN
INIT GLOBAL VARIABLES SO THE EXTENSION CAN FUNCTION */ INIT GLOBAL VARIABLES SO THE EXTENSION CAN FUNCTION */
if (XvScreenGeneration != serverGeneration) if (XvScreenGeneration != serverGeneration) {
{ if (!CreateResourceTypes()) {
if (!CreateResourceTypes())
{
ErrorF("XvExtensionInit: Unable to allocate resource types\n"); ErrorF("XvExtensionInit: Unable to allocate resource types\n");
return; return;
} }
@ -172,15 +168,13 @@ XvExtensionInit(void)
XvScreenGeneration = serverGeneration; XvScreenGeneration = serverGeneration;
} }
if (XvExtensionGeneration != serverGeneration) if (XvExtensionGeneration != serverGeneration) {
{
XvExtensionGeneration = serverGeneration; XvExtensionGeneration = serverGeneration;
extEntry = AddExtension(XvName, XvNumEvents, XvNumErrors, extEntry = AddExtension(XvName, XvNumEvents, XvNumErrors,
ProcXvDispatch, SProcXvDispatch, ProcXvDispatch, SProcXvDispatch,
XvResetProc, StandardMinorOpcode); XvResetProc, StandardMinorOpcode);
if (!extEntry) if (!extEntry) {
{
FatalError("XvExtensionInit: AddExtensions failed\n"); FatalError("XvExtensionInit: AddExtensions failed\n");
} }
@ -188,63 +182,62 @@ XvExtensionInit(void)
XvEventBase = extEntry->eventBase; XvEventBase = extEntry->eventBase;
XvErrorBase = extEntry->errorBase; XvErrorBase = extEntry->errorBase;
EventSwapVector[XvEventBase+XvVideoNotify] = EventSwapVector[XvEventBase + XvVideoNotify] =
(EventSwapPtr)WriteSwappedVideoNotifyEvent; (EventSwapPtr) WriteSwappedVideoNotifyEvent;
EventSwapVector[XvEventBase+XvPortNotify] = EventSwapVector[XvEventBase + XvPortNotify] =
(EventSwapPtr)WriteSwappedPortNotifyEvent; (EventSwapPtr) WriteSwappedPortNotifyEvent;
SetResourceTypeErrorValue(XvRTPort, _XvBadPort); SetResourceTypeErrorValue(XvRTPort, _XvBadPort);
(void)MakeAtom(XvName, strlen(XvName), xTrue); (void) MakeAtom(XvName, strlen(XvName), xTrue);
} }
} }
static Bool static Bool
CreateResourceTypes(void) CreateResourceTypes(void)
{ {
if (XvResourceGeneration == serverGeneration) return TRUE; if (XvResourceGeneration == serverGeneration)
return TRUE;
XvResourceGeneration = serverGeneration; XvResourceGeneration = serverGeneration;
if (!(XvRTPort = CreateNewResourceType(XvdiDestroyPort, "XvRTPort"))) if (!(XvRTPort = CreateNewResourceType(XvdiDestroyPort, "XvRTPort"))) {
{
ErrorF("CreateResourceTypes: failed to allocate port resource.\n"); ErrorF("CreateResourceTypes: failed to allocate port resource.\n");
return FALSE; return FALSE;
} }
if (!(XvRTGrab = CreateNewResourceType(XvdiDestroyGrab, "XvRTGrab"))) if (!(XvRTGrab = CreateNewResourceType(XvdiDestroyGrab, "XvRTGrab"))) {
{
ErrorF("CreateResourceTypes: failed to allocate grab resource.\n"); ErrorF("CreateResourceTypes: failed to allocate grab resource.\n");
return FALSE; return FALSE;
} }
if (!(XvRTEncoding = CreateNewResourceType(XvdiDestroyEncoding, if (!(XvRTEncoding = CreateNewResourceType(XvdiDestroyEncoding,
"XvRTEncoding"))) "XvRTEncoding"))) {
{
ErrorF("CreateResourceTypes: failed to allocate encoding resource.\n"); ErrorF("CreateResourceTypes: failed to allocate encoding resource.\n");
return FALSE; return FALSE;
} }
if (!(XvRTVideoNotify = CreateNewResourceType(XvdiDestroyVideoNotify, if (!(XvRTVideoNotify = CreateNewResourceType(XvdiDestroyVideoNotify,
"XvRTVideoNotify"))) "XvRTVideoNotify"))) {
{ ErrorF
ErrorF("CreateResourceTypes: failed to allocate video notify resource.\n"); ("CreateResourceTypes: failed to allocate video notify resource.\n");
return FALSE; return FALSE;
} }
if (!(XvRTVideoNotifyList = CreateNewResourceType(XvdiDestroyVideoNotifyList, if (!
"XvRTVideoNotifyList"))) (XvRTVideoNotifyList =
{ CreateNewResourceType(XvdiDestroyVideoNotifyList,
ErrorF("CreateResourceTypes: failed to allocate video notify list resource.\n"); "XvRTVideoNotifyList"))) {
ErrorF
("CreateResourceTypes: failed to allocate video notify list resource.\n");
return FALSE; return FALSE;
} }
if (!(XvRTPortNotify = CreateNewResourceType(XvdiDestroyPortNotify, if (!(XvRTPortNotify = CreateNewResourceType(XvdiDestroyPortNotify,
"XvRTPortNotify"))) "XvRTPortNotify"))) {
{ ErrorF
ErrorF("CreateResourceTypes: failed to allocate port notify resource.\n"); ("CreateResourceTypes: failed to allocate port notify resource.\n");
return FALSE; return FALSE;
} }
@ -257,10 +250,8 @@ XvScreenInit(ScreenPtr pScreen)
{ {
XvScreenPtr pxvs; XvScreenPtr pxvs;
if (XvScreenGeneration != serverGeneration) if (XvScreenGeneration != serverGeneration) {
{ if (!CreateResourceTypes()) {
if (!CreateResourceTypes())
{
ErrorF("XvScreenInit: Unable to allocate resource types\n"); ErrorF("XvScreenInit: Unable to allocate resource types\n");
return BadAlloc; return BadAlloc;
} }
@ -273,16 +264,14 @@ XvScreenInit(ScreenPtr pScreen)
if (!dixRegisterPrivateKey(&XvScreenKeyRec, PRIVATE_SCREEN, 0)) if (!dixRegisterPrivateKey(&XvScreenKeyRec, PRIVATE_SCREEN, 0))
return BadAlloc; return BadAlloc;
if (dixLookupPrivate(&pScreen->devPrivates, XvScreenKey)) if (dixLookupPrivate(&pScreen->devPrivates, XvScreenKey)) {
{
ErrorF("XvScreenInit: screen devPrivates ptr non-NULL before init\n"); ErrorF("XvScreenInit: screen devPrivates ptr non-NULL before init\n");
} }
/* ALLOCATE SCREEN PRIVATE RECORD */ /* ALLOCATE SCREEN PRIVATE RECORD */
pxvs = malloc(sizeof (XvScreenRec)); pxvs = malloc(sizeof(XvScreenRec));
if (!pxvs) if (!pxvs) {
{
ErrorF("XvScreenInit: Unable to allocate screen private structure\n"); ErrorF("XvScreenInit: Unable to allocate screen private structure\n");
return BadAlloc; return BadAlloc;
} }
@ -301,30 +290,28 @@ XvScreenInit(ScreenPtr pScreen)
} }
static Bool static Bool
XvCloseScreen( XvCloseScreen(int ii, ScreenPtr pScreen)
int ii, {
ScreenPtr pScreen
){
XvScreenPtr pxvs; XvScreenPtr pxvs;
pxvs = (XvScreenPtr)dixLookupPrivate(&pScreen->devPrivates, XvScreenKey); pxvs = (XvScreenPtr) dixLookupPrivate(&pScreen->devPrivates, XvScreenKey);
pScreen->DestroyPixmap = pxvs->DestroyPixmap; pScreen->DestroyPixmap = pxvs->DestroyPixmap;
pScreen->DestroyWindow = pxvs->DestroyWindow; pScreen->DestroyWindow = pxvs->DestroyWindow;
pScreen->CloseScreen = pxvs->CloseScreen; pScreen->CloseScreen = pxvs->CloseScreen;
(* pxvs->ddCloseScreen)(ii, pScreen); (*pxvs->ddCloseScreen) (ii, pScreen);
free(pxvs); free(pxvs);
dixSetPrivate(&pScreen->devPrivates, XvScreenKey, NULL); dixSetPrivate(&pScreen->devPrivates, XvScreenKey, NULL);
return (*pScreen->CloseScreen)(ii, pScreen); return (*pScreen->CloseScreen) (ii, pScreen);
} }
static void static void
XvResetProc(ExtensionEntry* extEntry) XvResetProc(ExtensionEntry * extEntry)
{ {
XvResetProcVector(); XvResetProcVector();
} }
@ -356,24 +343,21 @@ XvDestroyPixmap(PixmapPtr pPix)
SCREEN_PROLOGUE(pScreen, DestroyPixmap); SCREEN_PROLOGUE(pScreen, DestroyPixmap);
pxvs = (XvScreenPtr)dixLookupPrivate(&pScreen->devPrivates, XvScreenKey); pxvs = (XvScreenPtr) dixLookupPrivate(&pScreen->devPrivates, XvScreenKey);
/* CHECK TO SEE IF THIS PORT IS IN USE */ /* CHECK TO SEE IF THIS PORT IS IN USE */
pa = pxvs->pAdaptors; pa = pxvs->pAdaptors;
na = pxvs->nAdaptors; na = pxvs->nAdaptors;
while (na--) while (na--) {
{
np = pa->nPorts; np = pa->nPorts;
pp = pa->pPorts; pp = pa->pPorts;
while (np--) while (np--) {
{ if (pp->pDraw == (DrawablePtr) pPix) {
if (pp->pDraw == (DrawablePtr)pPix)
{
XvdiSendVideoNotify(pp, pp->pDraw, XvPreempted); XvdiSendVideoNotify(pp, pp->pDraw, XvPreempted);
(void)(* pp->pAdaptor->ddStopVideo)(NULL, pp, pp->pDraw); (void) (*pp->pAdaptor->ddStopVideo) (NULL, pp, pp->pDraw);
pp->pDraw = NULL; pp->pDraw = NULL;
pp->client = NULL; pp->client = NULL;
@ -384,7 +368,7 @@ XvDestroyPixmap(PixmapPtr pPix)
pa++; pa++;
} }
status = (* pScreen->DestroyPixmap)(pPix); status = (*pScreen->DestroyPixmap) (pPix);
SCREEN_EPILOGUE(pScreen, DestroyPixmap, XvDestroyPixmap); SCREEN_EPILOGUE(pScreen, DestroyPixmap, XvDestroyPixmap);
@ -407,24 +391,21 @@ XvDestroyWindow(WindowPtr pWin)
SCREEN_PROLOGUE(pScreen, DestroyWindow); SCREEN_PROLOGUE(pScreen, DestroyWindow);
pxvs = (XvScreenPtr)dixLookupPrivate(&pScreen->devPrivates, XvScreenKey); pxvs = (XvScreenPtr) dixLookupPrivate(&pScreen->devPrivates, XvScreenKey);
/* CHECK TO SEE IF THIS PORT IS IN USE */ /* CHECK TO SEE IF THIS PORT IS IN USE */
pa = pxvs->pAdaptors; pa = pxvs->pAdaptors;
na = pxvs->nAdaptors; na = pxvs->nAdaptors;
while (na--) while (na--) {
{
np = pa->nPorts; np = pa->nPorts;
pp = pa->pPorts; pp = pa->pPorts;
while (np--) while (np--) {
{ if (pp->pDraw == (DrawablePtr) pWin) {
if (pp->pDraw == (DrawablePtr)pWin)
{
XvdiSendVideoNotify(pp, pp->pDraw, XvPreempted); XvdiSendVideoNotify(pp, pp->pDraw, XvPreempted);
(void)(* pp->pAdaptor->ddStopVideo)(NULL, pp, pp->pDraw); (void) (*pp->pAdaptor->ddStopVideo) (NULL, pp, pp->pDraw);
pp->pDraw = NULL; pp->pDraw = NULL;
pp->client = NULL; pp->client = NULL;
@ -435,8 +416,7 @@ XvDestroyWindow(WindowPtr pWin)
pa++; pa++;
} }
status = (*pScreen->DestroyWindow) (pWin);
status = (* pScreen->DestroyWindow)(pWin);
SCREEN_EPILOGUE(pScreen, DestroyWindow, XvDestroyWindow); SCREEN_EPILOGUE(pScreen, DestroyWindow, XvDestroyWindow);
@ -455,7 +435,8 @@ XvdiVideoStopped(XvPortPtr pPort, int reason)
/* IF PORT ISN'T ACTIVE THEN WE'RE DONE */ /* IF PORT ISN'T ACTIVE THEN WE'RE DONE */
if (!pPort->pDraw) return Success; if (!pPort->pDraw)
return Success;
XvdiSendVideoNotify(pPort, pPort->pDraw, reason); XvdiSendVideoNotify(pPort, pPort->pDraw, reason);
@ -470,13 +451,13 @@ XvdiVideoStopped(XvPortPtr pPort, int reason)
static int static int
XvdiDestroyPort(pointer pPort, XID id) XvdiDestroyPort(pointer pPort, XID id)
{ {
return (* ((XvPortPtr)pPort)->pAdaptor->ddFreePort)(pPort); return (*((XvPortPtr) pPort)->pAdaptor->ddFreePort) (pPort);
} }
static int static int
XvdiDestroyGrab(pointer pGrab, XID id) XvdiDestroyGrab(pointer pGrab, XID id)
{ {
((XvGrabPtr)pGrab)->client = NULL; ((XvGrabPtr) pGrab)->client = NULL;
return Success; return Success;
} }
@ -485,7 +466,7 @@ XvdiDestroyVideoNotify(pointer pn, XID id)
{ {
/* JUST CLEAR OUT THE client POINTER FIELD */ /* JUST CLEAR OUT THE client POINTER FIELD */
((XvVideoNotifyPtr)pn)->client = NULL; ((XvVideoNotifyPtr) pn)->client = NULL;
return Success; return Success;
} }
@ -494,23 +475,23 @@ XvdiDestroyPortNotify(pointer pn, XID id)
{ {
/* JUST CLEAR OUT THE client POINTER FIELD */ /* JUST CLEAR OUT THE client POINTER FIELD */
((XvPortNotifyPtr)pn)->client = NULL; ((XvPortNotifyPtr) pn)->client = NULL;
return Success; return Success;
} }
static int static int
XvdiDestroyVideoNotifyList(pointer pn, XID id) XvdiDestroyVideoNotifyList(pointer pn, XID id)
{ {
XvVideoNotifyPtr npn,cpn; XvVideoNotifyPtr npn, cpn;
/* ACTUALLY DESTROY THE NOTITY LIST */ /* ACTUALLY DESTROY THE NOTITY LIST */
cpn = (XvVideoNotifyPtr)pn; cpn = (XvVideoNotifyPtr) pn;
while (cpn) while (cpn) {
{
npn = cpn->next; npn = cpn->next;
if (cpn->client) FreeResource(cpn->id, XvRTVideoNotify); if (cpn->client)
FreeResource(cpn->id, XvRTVideoNotify);
free(cpn); free(cpn);
cpn = npn; cpn = npn;
} }
@ -529,17 +510,16 @@ XvdiSendVideoNotify(XvPortPtr pPort, DrawablePtr pDraw, int reason)
xvEvent event; xvEvent event;
XvVideoNotifyPtr pn; XvVideoNotifyPtr pn;
dixLookupResourceByType((pointer *)&pn, pDraw->id, XvRTVideoNotifyList, dixLookupResourceByType((pointer *) &pn, pDraw->id, XvRTVideoNotifyList,
serverClient, DixReadAccess); serverClient, DixReadAccess);
while (pn) while (pn) {
{
event.u.u.type = XvEventBase + XvVideoNotify; event.u.u.type = XvEventBase + XvVideoNotify;
event.u.videoNotify.time = currentTime.milliseconds; event.u.videoNotify.time = currentTime.milliseconds;
event.u.videoNotify.drawable = pDraw->id; event.u.videoNotify.drawable = pDraw->id;
event.u.videoNotify.port = pPort->id; event.u.videoNotify.port = pPort->id;
event.u.videoNotify.reason = reason; event.u.videoNotify.reason = reason;
WriteEventsToClient(pn->client, 1, (xEventPtr)&event); WriteEventsToClient(pn->client, 1, (xEventPtr) & event);
pn = pn->next; pn = pn->next;
} }
@ -547,26 +527,21 @@ XvdiSendVideoNotify(XvPortPtr pPort, DrawablePtr pDraw, int reason)
} }
int int
XvdiSendPortNotify( XvdiSendPortNotify(XvPortPtr pPort, Atom attribute, INT32 value)
XvPortPtr pPort, {
Atom attribute,
INT32 value
){
xvEvent event; xvEvent event;
XvPortNotifyPtr pn; XvPortNotifyPtr pn;
pn = pPort->pNotify; pn = pPort->pNotify;
while (pn) while (pn) {
{
event.u.u.type = XvEventBase + XvPortNotify; event.u.u.type = XvEventBase + XvPortNotify;
event.u.portNotify.time = currentTime.milliseconds; event.u.portNotify.time = currentTime.milliseconds;
event.u.portNotify.port = pPort->id; event.u.portNotify.port = pPort->id;
event.u.portNotify.attribute = attribute; event.u.portNotify.attribute = attribute;
event.u.portNotify.value = value; event.u.portNotify.value = value;
WriteEventsToClient(pn->client, 1, (xEventPtr)&event); WriteEventsToClient(pn->client, 1, (xEventPtr) & event);
pn = pn->next; pn = pn->next;
} }
@ -574,7 +549,6 @@ XvdiSendPortNotify(
} }
#define CHECK_SIZE(dw, dh, sw, sh) { \ #define CHECK_SIZE(dw, dh, sw, sh) { \
if(!dw || !dh || !sw || !sh) return Success; \ if(!dw || !dh || !sw || !sh) return Success; \
/* The region code will break these if they are too large */ \ /* The region code will break these if they are too large */ \
@ -582,18 +556,15 @@ XvdiSendPortNotify(
return BadValue; \ return BadValue; \
} }
int int
XvdiPutVideo( XvdiPutVideo(ClientPtr client,
ClientPtr client,
DrawablePtr pDraw, DrawablePtr pDraw,
XvPortPtr pPort, XvPortPtr pPort,
GCPtr pGC, GCPtr pGC,
INT16 vid_x, INT16 vid_y, INT16 vid_x, INT16 vid_y,
CARD16 vid_w, CARD16 vid_h, CARD16 vid_w, CARD16 vid_h,
INT16 drw_x, INT16 drw_y, INT16 drw_x, INT16 drw_y, CARD16 drw_w, CARD16 drw_h)
CARD16 drw_w, CARD16 drw_h {
){
DrawablePtr pOldDraw; DrawablePtr pOldDraw;
CHECK_SIZE(drw_w, drw_h, vid_w, vid_h); CHECK_SIZE(drw_w, drw_h, vid_w, vid_h);
@ -605,8 +576,7 @@ XvdiPutVideo(
/* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN
INFORM CLIENT OF ITS FAILURE */ INFORM CLIENT OF ITS FAILURE */
if (pPort->grab.client && (pPort->grab.client != client)) if (pPort->grab.client && (pPort->grab.client != client)) {
{
XvdiSendVideoNotify(pPort, pDraw, XvBusy); XvdiSendVideoNotify(pPort, pDraw, XvBusy);
return Success; return Success;
} }
@ -615,17 +585,15 @@ XvdiPutVideo(
EVENTS TO ANY CLIENTS WHO WANT THEM */ EVENTS TO ANY CLIENTS WHO WANT THEM */
pOldDraw = pPort->pDraw; pOldDraw = pPort->pDraw;
if ((pOldDraw) && (pOldDraw != pDraw)) if ((pOldDraw) && (pOldDraw != pDraw)) {
{
XvdiSendVideoNotify(pPort, pPort->pDraw, XvPreempted); XvdiSendVideoNotify(pPort, pPort->pDraw, XvPreempted);
} }
(void) (* pPort->pAdaptor->ddPutVideo)(client, pDraw, pPort, pGC, (void) (*pPort->pAdaptor->ddPutVideo) (client, pDraw, pPort, pGC,
vid_x, vid_y, vid_w, vid_h, vid_x, vid_y, vid_w, vid_h,
drw_x, drw_y, drw_w, drw_h); drw_x, drw_y, drw_w, drw_h);
if ((pPort->pDraw) && (pOldDraw != pDraw)) if ((pPort->pDraw) && (pOldDraw != pDraw)) {
{
pPort->client = client; pPort->client = client;
XvdiSendVideoNotify(pPort, pPort->pDraw, XvStarted); XvdiSendVideoNotify(pPort, pPort->pDraw, XvStarted);
} }
@ -637,16 +605,14 @@ XvdiPutVideo(
} }
int int
XvdiPutStill( XvdiPutStill(ClientPtr client,
ClientPtr client,
DrawablePtr pDraw, DrawablePtr pDraw,
XvPortPtr pPort, XvPortPtr pPort,
GCPtr pGC, GCPtr pGC,
INT16 vid_x, INT16 vid_y, INT16 vid_x, INT16 vid_y,
CARD16 vid_w, CARD16 vid_h, CARD16 vid_w, CARD16 vid_h,
INT16 drw_x, INT16 drw_y, INT16 drw_x, INT16 drw_y, CARD16 drw_w, CARD16 drw_h)
CARD16 drw_w, CARD16 drw_h {
){
int status; int status;
CHECK_SIZE(drw_w, drw_h, vid_w, vid_h); CHECK_SIZE(drw_w, drw_h, vid_w, vid_h);
@ -658,15 +624,14 @@ XvdiPutStill(
/* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN
INFORM CLIENT OF ITS FAILURE */ INFORM CLIENT OF ITS FAILURE */
if (pPort->grab.client && (pPort->grab.client != client)) if (pPort->grab.client && (pPort->grab.client != client)) {
{
XvdiSendVideoNotify(pPort, pDraw, XvBusy); XvdiSendVideoNotify(pPort, pDraw, XvBusy);
return Success; return Success;
} }
pPort->time = currentTime; pPort->time = currentTime;
status = (* pPort->pAdaptor->ddPutStill)(client, pDraw, pPort, pGC, status = (*pPort->pAdaptor->ddPutStill) (client, pDraw, pPort, pGC,
vid_x, vid_y, vid_w, vid_h, vid_x, vid_y, vid_w, vid_h,
drw_x, drw_y, drw_w, drw_h); drw_x, drw_y, drw_w, drw_h);
@ -675,8 +640,7 @@ XvdiPutStill(
} }
int int
XvdiPutImage( XvdiPutImage(ClientPtr client,
ClientPtr client,
DrawablePtr pDraw, DrawablePtr pDraw,
XvPortPtr pPort, XvPortPtr pPort,
GCPtr pGC, GCPtr pGC,
@ -685,10 +649,8 @@ XvdiPutImage(
INT16 drw_x, INT16 drw_y, INT16 drw_x, INT16 drw_y,
CARD16 drw_w, CARD16 drw_h, CARD16 drw_w, CARD16 drw_h,
XvImagePtr image, XvImagePtr image,
unsigned char* data, unsigned char *data, Bool sync, CARD16 width, CARD16 height)
Bool sync, {
CARD16 width, CARD16 height
){
CHECK_SIZE(drw_w, drw_h, src_w, src_h); CHECK_SIZE(drw_w, drw_h, src_w, src_h);
/* UPDATE TIME VARIABLES FOR USE IN EVENTS */ /* UPDATE TIME VARIABLES FOR USE IN EVENTS */
@ -698,32 +660,28 @@ XvdiPutImage(
/* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN
INFORM CLIENT OF ITS FAILURE */ INFORM CLIENT OF ITS FAILURE */
if (pPort->grab.client && (pPort->grab.client != client)) if (pPort->grab.client && (pPort->grab.client != client)) {
{
XvdiSendVideoNotify(pPort, pDraw, XvBusy); XvdiSendVideoNotify(pPort, pDraw, XvBusy);
return Success; return Success;
} }
pPort->time = currentTime; pPort->time = currentTime;
return (* pPort->pAdaptor->ddPutImage)(client, pDraw, pPort, pGC, return (*pPort->pAdaptor->ddPutImage) (client, pDraw, pPort, pGC,
src_x, src_y, src_w, src_h, src_x, src_y, src_w, src_h,
drw_x, drw_y, drw_w, drw_h, drw_x, drw_y, drw_w, drw_h,
image, data, sync, width, height); image, data, sync, width, height);
} }
int int
XvdiGetVideo( XvdiGetVideo(ClientPtr client,
ClientPtr client,
DrawablePtr pDraw, DrawablePtr pDraw,
XvPortPtr pPort, XvPortPtr pPort,
GCPtr pGC, GCPtr pGC,
INT16 vid_x, INT16 vid_y, INT16 vid_x, INT16 vid_y,
CARD16 vid_w, CARD16 vid_h, CARD16 vid_w, CARD16 vid_h,
INT16 drw_x, INT16 drw_y, INT16 drw_x, INT16 drw_y, CARD16 drw_w, CARD16 drw_h)
CARD16 drw_w, CARD16 drw_h {
){
DrawablePtr pOldDraw; DrawablePtr pOldDraw;
CHECK_SIZE(drw_w, drw_h, vid_w, vid_h); CHECK_SIZE(drw_w, drw_h, vid_w, vid_h);
@ -735,8 +693,7 @@ XvdiGetVideo(
/* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN
INFORM CLIENT OF ITS FAILURE */ INFORM CLIENT OF ITS FAILURE */
if (pPort->grab.client && (pPort->grab.client != client)) if (pPort->grab.client && (pPort->grab.client != client)) {
{
XvdiSendVideoNotify(pPort, pDraw, XvBusy); XvdiSendVideoNotify(pPort, pDraw, XvBusy);
return Success; return Success;
} }
@ -745,17 +702,15 @@ XvdiGetVideo(
EVENTS TO ANY CLIENTS WHO WANT THEM */ EVENTS TO ANY CLIENTS WHO WANT THEM */
pOldDraw = pPort->pDraw; pOldDraw = pPort->pDraw;
if ((pOldDraw) && (pOldDraw != pDraw)) if ((pOldDraw) && (pOldDraw != pDraw)) {
{
XvdiSendVideoNotify(pPort, pPort->pDraw, XvPreempted); XvdiSendVideoNotify(pPort, pPort->pDraw, XvPreempted);
} }
(void) (* pPort->pAdaptor->ddGetVideo)(client, pDraw, pPort, pGC, (void) (*pPort->pAdaptor->ddGetVideo) (client, pDraw, pPort, pGC,
vid_x, vid_y, vid_w, vid_h, vid_x, vid_y, vid_w, vid_h,
drw_x, drw_y, drw_w, drw_h); drw_x, drw_y, drw_w, drw_h);
if ((pPort->pDraw) && (pOldDraw != pDraw)) if ((pPort->pDraw) && (pOldDraw != pDraw)) {
{
pPort->client = client; pPort->client = client;
XvdiSendVideoNotify(pPort, pPort->pDraw, XvStarted); XvdiSendVideoNotify(pPort, pPort->pDraw, XvStarted);
} }
@ -767,16 +722,14 @@ XvdiGetVideo(
} }
int int
XvdiGetStill( XvdiGetStill(ClientPtr client,
ClientPtr client,
DrawablePtr pDraw, DrawablePtr pDraw,
XvPortPtr pPort, XvPortPtr pPort,
GCPtr pGC, GCPtr pGC,
INT16 vid_x, INT16 vid_y, INT16 vid_x, INT16 vid_y,
CARD16 vid_w, CARD16 vid_h, CARD16 vid_w, CARD16 vid_h,
INT16 drw_x, INT16 drw_y, INT16 drw_x, INT16 drw_y, CARD16 drw_w, CARD16 drw_h)
CARD16 drw_w, CARD16 drw_h {
){
int status; int status;
CHECK_SIZE(drw_w, drw_h, vid_w, vid_h); CHECK_SIZE(drw_w, drw_h, vid_w, vid_h);
@ -788,13 +741,12 @@ XvdiGetStill(
/* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN
INFORM CLIENT OF ITS FAILURE */ INFORM CLIENT OF ITS FAILURE */
if (pPort->grab.client && (pPort->grab.client != client)) if (pPort->grab.client && (pPort->grab.client != client)) {
{
XvdiSendVideoNotify(pPort, pDraw, XvBusy); XvdiSendVideoNotify(pPort, pDraw, XvBusy);
return Success; return Success;
} }
status = (* pPort->pAdaptor->ddGetStill)(client, pDraw, pPort, pGC, status = (*pPort->pAdaptor->ddGetStill) (client, pDraw, pPort, pGC,
vid_x, vid_y, vid_w, vid_h, vid_x, vid_y, vid_w, vid_h,
drw_x, drw_y, drw_w, drw_h); drw_x, drw_y, drw_w, drw_h);
@ -805,48 +757,39 @@ XvdiGetStill(
} }
int int
XvdiGrabPort( XvdiGrabPort(ClientPtr client, XvPortPtr pPort, Time ctime, int *p_result)
ClientPtr client, {
XvPortPtr pPort,
Time ctime,
int *p_result
){
unsigned long id; unsigned long id;
TimeStamp time; TimeStamp time;
UpdateCurrentTime(); UpdateCurrentTime();
time = ClientTimeToServerTime(ctime); time = ClientTimeToServerTime(ctime);
if (pPort->grab.client && (client != pPort->grab.client)) if (pPort->grab.client && (client != pPort->grab.client)) {
{
*p_result = XvAlreadyGrabbed; *p_result = XvAlreadyGrabbed;
return Success; return Success;
} }
if ((CompareTimeStamps(time, currentTime) == LATER) || if ((CompareTimeStamps(time, currentTime) == LATER) ||
(CompareTimeStamps(time, pPort->time) == EARLIER)) (CompareTimeStamps(time, pPort->time) == EARLIER)) {
{
*p_result = XvInvalidTime; *p_result = XvInvalidTime;
return Success; return Success;
} }
if (client == pPort->grab.client) if (client == pPort->grab.client) {
{
*p_result = Success; *p_result = Success;
return Success; return Success;
} }
id = FakeClientID(client->index); id = FakeClientID(client->index);
if (!AddResource(id, XvRTGrab, &pPort->grab)) if (!AddResource(id, XvRTGrab, &pPort->grab)) {
{
return BadAlloc; return BadAlloc;
} }
/* IF THERE IS ACTIVE VIDEO THEN STOP IT */ /* IF THERE IS ACTIVE VIDEO THEN STOP IT */
if ((pPort->pDraw) && (client != pPort->client)) if ((pPort->pDraw) && (client != pPort->client)) {
{
XvdiStopVideo(NULL, pPort, pPort->pDraw); XvdiStopVideo(NULL, pPort, pPort->pDraw);
} }
@ -862,24 +805,19 @@ XvdiGrabPort(
} }
int int
XvdiUngrabPort( XvdiUngrabPort(ClientPtr client, XvPortPtr pPort, Time ctime)
ClientPtr client, {
XvPortPtr pPort,
Time ctime
){
TimeStamp time; TimeStamp time;
UpdateCurrentTime(); UpdateCurrentTime();
time = ClientTimeToServerTime(ctime); time = ClientTimeToServerTime(ctime);
if ((!pPort->grab.client) || (client != pPort->grab.client)) if ((!pPort->grab.client) || (client != pPort->grab.client)) {
{
return Success; return Success;
} }
if ((CompareTimeStamps(time, currentTime) == LATER) || if ((CompareTimeStamps(time, currentTime) == LATER) ||
(CompareTimeStamps(time, pPort->time) == EARLIER)) (CompareTimeStamps(time, pPort->time) == EARLIER)) {
{
return Success; return Success;
} }
@ -894,70 +832,63 @@ XvdiUngrabPort(
} }
int int
XvdiSelectVideoNotify( XvdiSelectVideoNotify(ClientPtr client, DrawablePtr pDraw, BOOL onoff)
ClientPtr client, {
DrawablePtr pDraw, XvVideoNotifyPtr pn, tpn, fpn;
BOOL onoff
){
XvVideoNotifyPtr pn,tpn,fpn;
int rc; int rc;
/* FIND VideoNotify LIST */ /* FIND VideoNotify LIST */
rc = dixLookupResourceByType((pointer *)&pn, pDraw->id, XvRTVideoNotifyList, rc = dixLookupResourceByType((pointer *) &pn, pDraw->id,
client, DixWriteAccess); XvRTVideoNotifyList, client, DixWriteAccess);
if (rc != Success && rc != BadValue) if (rc != Success && rc != BadValue)
return rc; return rc;
/* IF ONE DONES'T EXIST AND NO MASK, THEN JUST RETURN */ /* IF ONE DONES'T EXIST AND NO MASK, THEN JUST RETURN */
if (!onoff && !pn) return Success; if (!onoff && !pn)
return Success;
/* IF ONE DOESN'T EXIST CREATE IT AND ADD A RESOURCE SO THAT THE LIST /* IF ONE DOESN'T EXIST CREATE IT AND ADD A RESOURCE SO THAT THE LIST
WILL BE DELETED WHEN THE DRAWABLE IS DESTROYED */ WILL BE DELETED WHEN THE DRAWABLE IS DESTROYED */
if (!pn) if (!pn) {
{
if (!(tpn = malloc(sizeof(XvVideoNotifyRec)))) if (!(tpn = malloc(sizeof(XvVideoNotifyRec))))
return BadAlloc; return BadAlloc;
tpn->next = NULL; tpn->next = NULL;
if (!AddResource(pDraw->id, XvRTVideoNotifyList, tpn)) if (!AddResource(pDraw->id, XvRTVideoNotifyList, tpn)) {
{
free(tpn); free(tpn);
return BadAlloc; return BadAlloc;
} }
} }
else else {
{
/* LOOK TO SEE IF ENTRY ALREADY EXISTS */ /* LOOK TO SEE IF ENTRY ALREADY EXISTS */
fpn = NULL; fpn = NULL;
tpn = pn; tpn = pn;
while (tpn) while (tpn) {
{ if (tpn->client == client) {
if (tpn->client == client) if (!onoff)
{ tpn->client = NULL;
if (!onoff) tpn->client = NULL;
return Success; return Success;
} }
if (!tpn->client) fpn = tpn; /* TAKE NOTE OF FREE ENTRY */ if (!tpn->client)
fpn = tpn; /* TAKE NOTE OF FREE ENTRY */
tpn = tpn->next; tpn = tpn->next;
} }
/* IF TUNNING OFF, THEN JUST RETURN */ /* IF TUNNING OFF, THEN JUST RETURN */
if (!onoff) return Success; if (!onoff)
return Success;
/* IF ONE ISN'T FOUND THEN ALLOCATE ONE AND LINK IT INTO THE LIST */ /* IF ONE ISN'T FOUND THEN ALLOCATE ONE AND LINK IT INTO THE LIST */
if (fpn) if (fpn) {
{
tpn = fpn; tpn = fpn;
} }
else else {
{
if (!(tpn = malloc(sizeof(XvVideoNotifyRec)))) if (!(tpn = malloc(sizeof(XvVideoNotifyRec))))
return BadAlloc; return BadAlloc;
tpn->next = pn->next; tpn->next = pn->next;
@ -978,32 +909,28 @@ XvdiSelectVideoNotify(
} }
int int
XvdiSelectPortNotify( XvdiSelectPortNotify(ClientPtr client, XvPortPtr pPort, BOOL onoff)
ClientPtr client, {
XvPortPtr pPort, XvPortNotifyPtr pn, tpn;
BOOL onoff
){
XvPortNotifyPtr pn,tpn;
/* SEE IF CLIENT IS ALREADY IN LIST */ /* SEE IF CLIENT IS ALREADY IN LIST */
tpn = NULL; tpn = NULL;
pn = pPort->pNotify; pn = pPort->pNotify;
while (pn) while (pn) {
{ if (!pn->client)
if (!pn->client) tpn = pn; /* TAKE NOTE OF FREE ENTRY */ tpn = pn; /* TAKE NOTE OF FREE ENTRY */
if (pn->client == client) break; if (pn->client == client)
break;
pn = pn->next; pn = pn->next;
} }
/* IS THE CLIENT ALREADY ON THE LIST? */ /* IS THE CLIENT ALREADY ON THE LIST? */
if (pn) if (pn) {
{
/* REMOVE IT? */ /* REMOVE IT? */
if (!onoff) if (!onoff) {
{
pn->client = NULL; pn->client = NULL;
FreeResource(pn->id, XvRTPortNotify); FreeResource(pn->id, XvRTPortNotify);
} }
@ -1014,8 +941,7 @@ XvdiSelectPortNotify(
/* DIDN'T FIND IT; SO REUSE LIST ELEMENT IF ONE IS FREE OTHERWISE /* DIDN'T FIND IT; SO REUSE LIST ELEMENT IF ONE IS FREE OTHERWISE
CREATE A NEW ONE AND ADD IT TO THE BEGINNING OF THE LIST */ CREATE A NEW ONE AND ADD IT TO THE BEGINNING OF THE LIST */
if (!tpn) if (!tpn) {
{
if (!(tpn = malloc(sizeof(XvPortNotifyRec)))) if (!(tpn = malloc(sizeof(XvPortNotifyRec))))
return BadAlloc; return BadAlloc;
tpn->next = pPort->pNotify; tpn->next = pPort->pNotify;
@ -1031,17 +957,13 @@ XvdiSelectPortNotify(
} }
int int
XvdiStopVideo( XvdiStopVideo(ClientPtr client, XvPortPtr pPort, DrawablePtr pDraw)
ClientPtr client, {
XvPortPtr pPort,
DrawablePtr pDraw
){
int status; int status;
/* IF PORT ISN'T ACTIVE THEN WE'RE DONE */ /* IF PORT ISN'T ACTIVE THEN WE'RE DONE */
if (!pPort->pDraw || (pPort->pDraw != pDraw)) if (!pPort->pDraw || (pPort->pDraw != pDraw)) {
{
XvdiSendVideoNotify(pPort, pDraw, XvStopped); XvdiSendVideoNotify(pPort, pDraw, XvStopped);
return Success; return Success;
} }
@ -1049,18 +971,17 @@ XvdiStopVideo(
/* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN
INFORM CLIENT OF ITS FAILURE */ INFORM CLIENT OF ITS FAILURE */
if ((client) && (pPort->grab.client) && (pPort->grab.client != client)) if ((client) && (pPort->grab.client) && (pPort->grab.client != client)) {
{
XvdiSendVideoNotify(pPort, pDraw, XvBusy); XvdiSendVideoNotify(pPort, pDraw, XvBusy);
return Success; return Success;
} }
XvdiSendVideoNotify(pPort, pDraw, XvStopped); XvdiSendVideoNotify(pPort, pDraw, XvStopped);
status = (* pPort->pAdaptor->ddStopVideo)(client, pPort, pDraw); status = (*pPort->pAdaptor->ddStopVideo) (client, pPort, pDraw);
pPort->pDraw = NULL; pPort->pDraw = NULL;
pPort->client = (ClientPtr)client; pPort->client = (ClientPtr) client;
pPort->time = currentTime; pPort->time = currentTime;
return status; return status;
@ -1068,23 +989,21 @@ XvdiStopVideo(
} }
int int
XvdiPreemptVideo( XvdiPreemptVideo(ClientPtr client, XvPortPtr pPort, DrawablePtr pDraw)
ClientPtr client, {
XvPortPtr pPort,
DrawablePtr pDraw
){
int status; int status;
/* IF PORT ISN'T ACTIVE THEN WE'RE DONE */ /* IF PORT ISN'T ACTIVE THEN WE'RE DONE */
if (!pPort->pDraw || (pPort->pDraw != pDraw)) return Success; if (!pPort->pDraw || (pPort->pDraw != pDraw))
return Success;
XvdiSendVideoNotify(pPort, pPort->pDraw, XvPreempted); XvdiSendVideoNotify(pPort, pPort->pDraw, XvPreempted);
status = (* pPort->pAdaptor->ddStopVideo)(client, pPort, pPort->pDraw); status = (*pPort->pAdaptor->ddStopVideo) (client, pPort, pPort->pDraw);
pPort->pDraw = NULL; pPort->pDraw = NULL;
pPort->client = (ClientPtr)client; pPort->client = (ClientPtr) client;
pPort->time = currentTime; pPort->time = currentTime;
return status; return status;
@ -1092,10 +1011,8 @@ XvdiPreemptVideo(
} }
int int
XvdiMatchPort( XvdiMatchPort(XvPortPtr pPort, DrawablePtr pDraw)
XvPortPtr pPort, {
DrawablePtr pDraw
){
XvAdaptorPtr pa; XvAdaptorPtr pa;
XvFormatPtr pf; XvFormatPtr pf;
@ -1103,13 +1020,13 @@ XvdiMatchPort(
pa = pPort->pAdaptor; pa = pPort->pAdaptor;
if (pa->pScreen != pDraw->pScreen) return BadMatch; if (pa->pScreen != pDraw->pScreen)
return BadMatch;
nf = pa->nFormats; nf = pa->nFormats;
pf = pa->pFormats; pf = pa->pFormats;
while (nf--) while (nf--) {
{
if (pf->depth == pDraw->depth) if (pf->depth == pDraw->depth)
return Success; return Success;
pf++; pf++;
@ -1120,15 +1037,14 @@ XvdiMatchPort(
} }
int int
XvdiSetPortAttribute( XvdiSetPortAttribute(ClientPtr client,
ClientPtr client, XvPortPtr pPort, Atom attribute, INT32 value)
XvPortPtr pPort, {
Atom attribute,
INT32 value
){
int status; int status;
status = (* pPort->pAdaptor->ddSetPortAttribute)(client, pPort, attribute, value); status =
(*pPort->pAdaptor->ddSetPortAttribute) (client, pPort, attribute,
value);
if (status == Success) if (status == Success)
XvdiSendPortNotify(pPort, attribute, value); XvdiSendPortNotify(pPort, attribute, value);
@ -1136,21 +1052,18 @@ XvdiSetPortAttribute(
} }
int int
XvdiGetPortAttribute( XvdiGetPortAttribute(ClientPtr client,
ClientPtr client, XvPortPtr pPort, Atom attribute, INT32 *p_value)
XvPortPtr pPort, {
Atom attribute,
INT32 *p_value
){
return return
(* pPort->pAdaptor->ddGetPortAttribute)(client, pPort, attribute, p_value); (*pPort->pAdaptor->ddGetPortAttribute) (client, pPort, attribute,
p_value);
} }
static void static void
WriteSwappedVideoNotifyEvent(xvEvent *from, xvEvent *to) WriteSwappedVideoNotifyEvent(xvEvent * from, xvEvent * to)
{ {
to->u.u.type = from->u.u.type; to->u.u.type = from->u.u.type;
@ -1164,8 +1077,7 @@ WriteSwappedVideoNotifyEvent(xvEvent *from, xvEvent *to)
} }
static void static void
WriteSwappedPortNotifyEvent(xvEvent *from, xvEvent *to) WriteSwappedPortNotifyEvent(xvEvent * from, xvEvent * to)
{ {
to->u.u.type = from->u.u.type; to->u.u.type = from->u.u.type;

View File

@ -28,12 +28,11 @@
#include <sys/shm.h> #include <sys/shm.h>
#endif /* HAS_XVMCSHM */ #endif /* HAS_XVMCSHM */
#define DR_CLIENT_DRIVER_NAME_SIZE 48 #define DR_CLIENT_DRIVER_NAME_SIZE 48
#define DR_BUSID_SIZE 48 #define DR_BUSID_SIZE 48
static DevPrivateKeyRec XvMCScreenKeyRec; static DevPrivateKeyRec XvMCScreenKeyRec;
#define XvMCScreenKey (&XvMCScreenKeyRec) #define XvMCScreenKey (&XvMCScreenKeyRec)
static Bool XvMCInUse; static Bool XvMCInUse;
@ -60,17 +59,17 @@ typedef struct {
#define XVMC_GET_PRIVATE(pScreen) \ #define XVMC_GET_PRIVATE(pScreen) \
(XvMCScreenPtr)(dixLookupPrivate(&(pScreen)->devPrivates, XvMCScreenKey)) (XvMCScreenPtr)(dixLookupPrivate(&(pScreen)->devPrivates, XvMCScreenKey))
static int static int
XvMCDestroyContextRes(pointer data, XID id) XvMCDestroyContextRes(pointer data, XID id)
{ {
XvMCContextPtr pContext = (XvMCContextPtr)data; XvMCContextPtr pContext = (XvMCContextPtr) data;
pContext->refcnt--; pContext->refcnt--;
if(!pContext->refcnt) { if (!pContext->refcnt) {
XvMCScreenPtr pScreenPriv = XVMC_GET_PRIVATE(pContext->pScreen); XvMCScreenPtr pScreenPriv = XVMC_GET_PRIVATE(pContext->pScreen);
(*pScreenPriv->adaptors[pContext->adapt_num].DestroyContext)(pContext);
(*pScreenPriv->adaptors[pContext->adapt_num].DestroyContext) (pContext);
free(pContext); free(pContext);
} }
@ -80,30 +79,29 @@ XvMCDestroyContextRes(pointer data, XID id)
static int static int
XvMCDestroySurfaceRes(pointer data, XID id) XvMCDestroySurfaceRes(pointer data, XID id)
{ {
XvMCSurfacePtr pSurface = (XvMCSurfacePtr)data; XvMCSurfacePtr pSurface = (XvMCSurfacePtr) data;
XvMCContextPtr pContext = pSurface->context; XvMCContextPtr pContext = pSurface->context;
XvMCScreenPtr pScreenPriv = XVMC_GET_PRIVATE(pContext->pScreen); XvMCScreenPtr pScreenPriv = XVMC_GET_PRIVATE(pContext->pScreen);
(*pScreenPriv->adaptors[pContext->adapt_num].DestroySurface)(pSurface); (*pScreenPriv->adaptors[pContext->adapt_num].DestroySurface) (pSurface);
free(pSurface); free(pSurface);
XvMCDestroyContextRes((pointer)pContext, pContext->context_id); XvMCDestroyContextRes((pointer) pContext, pContext->context_id);
return Success; return Success;
} }
static int static int
XvMCDestroySubpictureRes(pointer data, XID id) XvMCDestroySubpictureRes(pointer data, XID id)
{ {
XvMCSubpicturePtr pSubpict = (XvMCSubpicturePtr)data; XvMCSubpicturePtr pSubpict = (XvMCSubpicturePtr) data;
XvMCContextPtr pContext = pSubpict->context; XvMCContextPtr pContext = pSubpict->context;
XvMCScreenPtr pScreenPriv = XVMC_GET_PRIVATE(pContext->pScreen); XvMCScreenPtr pScreenPriv = XVMC_GET_PRIVATE(pContext->pScreen);
(*pScreenPriv->adaptors[pContext->adapt_num].DestroySubpicture)(pSubpict); (*pScreenPriv->adaptors[pContext->adapt_num].DestroySubpicture) (pSubpict);
free(pSubpict); free(pSubpict);
XvMCDestroyContextRes((pointer)pContext, pContext->context_id); XvMCDestroyContextRes((pointer) pContext, pContext->context_id);
return Success; return Success;
} }
@ -112,6 +110,7 @@ static int
ProcXvMCQueryVersion(ClientPtr client) ProcXvMCQueryVersion(ClientPtr client)
{ {
xvmcQueryVersionReply rep; xvmcQueryVersionReply rep;
/* REQUEST(xvmcQueryVersionReq); */ /* REQUEST(xvmcQueryVersionReq); */
REQUEST_SIZE_MATCH(xvmcQueryVersionReq); REQUEST_SIZE_MATCH(xvmcQueryVersionReq);
rep.type = X_Reply; rep.type = X_Reply;
@ -119,11 +118,10 @@ ProcXvMCQueryVersion(ClientPtr client)
rep.length = 0; rep.length = 0;
rep.major = SERVER_XVMC_MAJOR_VERSION; rep.major = SERVER_XVMC_MAJOR_VERSION;
rep.minor = SERVER_XVMC_MINOR_VERSION; rep.minor = SERVER_XVMC_MINOR_VERSION;
WriteToClient(client, sizeof(xvmcQueryVersionReply), (char*)&rep); WriteToClient(client, sizeof(xvmcQueryVersionReply), (char *) &rep);
return Success; return Success;
} }
static int static int
ProcXvMCListSurfaceTypes(ClientPtr client) ProcXvMCListSurfaceTypes(ClientPtr client)
{ {
@ -134,16 +132,18 @@ ProcXvMCListSurfaceTypes(ClientPtr client)
xvmcSurfaceInfo info; xvmcSurfaceInfo info;
XvMCAdaptorPtr adaptor = NULL; XvMCAdaptorPtr adaptor = NULL;
XvMCSurfaceInfoPtr surface; XvMCSurfaceInfoPtr surface;
REQUEST(xvmcListSurfaceTypesReq); REQUEST(xvmcListSurfaceTypesReq);
REQUEST_SIZE_MATCH(xvmcListSurfaceTypesReq); REQUEST_SIZE_MATCH(xvmcListSurfaceTypesReq);
VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess);
if(XvMCInUse) { /* any adaptors at all */ if (XvMCInUse) { /* any adaptors at all */
ScreenPtr pScreen = pPort->pAdaptor->pScreen; ScreenPtr pScreen = pPort->pAdaptor->pScreen;
if((pScreenPriv = XVMC_GET_PRIVATE(pScreen))) { /* any this screen */
for(i = 0; i < pScreenPriv->num_adaptors; i++) { if ((pScreenPriv = XVMC_GET_PRIVATE(pScreen))) { /* any this screen */
if(pPort->pAdaptor == pScreenPriv->adaptors[i].xv_adaptor) { for (i = 0; i < pScreenPriv->num_adaptors; i++) {
if (pPort->pAdaptor == pScreenPriv->adaptors[i].xv_adaptor) {
adaptor = &(pScreenPriv->adaptors[i]); adaptor = &(pScreenPriv->adaptors[i]);
break; break;
} }
@ -156,9 +156,9 @@ ProcXvMCListSurfaceTypes(ClientPtr client)
rep.num = (adaptor) ? adaptor->num_surfaces : 0; rep.num = (adaptor) ? adaptor->num_surfaces : 0;
rep.length = bytes_to_int32(rep.num * sizeof(xvmcSurfaceInfo)); rep.length = bytes_to_int32(rep.num * sizeof(xvmcSurfaceInfo));
WriteToClient(client, sizeof(xvmcListSurfaceTypesReply), (char*)&rep); WriteToClient(client, sizeof(xvmcListSurfaceTypesReply), (char *) &rep);
for(i = 0; i < rep.num; i++) { for (i = 0; i < rep.num; i++) {
surface = adaptor->surfaces[i]; surface = adaptor->surfaces[i];
info.surface_type_id = surface->surface_type_id; info.surface_type_id = surface->surface_type_id;
info.chroma_format = surface->chroma_format; info.chroma_format = surface->chroma_format;
@ -168,7 +168,7 @@ ProcXvMCListSurfaceTypes(ClientPtr client)
info.subpicture_max_height = surface->subpicture_max_height; info.subpicture_max_height = surface->subpicture_max_height;
info.mc_type = surface->mc_type; info.mc_type = surface->mc_type;
info.flags = surface->flags; info.flags = surface->flags;
WriteToClient(client, sizeof(xvmcSurfaceInfo), (char*)&info); WriteToClient(client, sizeof(xvmcSurfaceInfo), (char *) &info);
} }
return Success; return Success;
@ -187,6 +187,7 @@ ProcXvMCCreateContext(ClientPtr client)
XvMCAdaptorPtr adaptor = NULL; XvMCAdaptorPtr adaptor = NULL;
XvMCSurfaceInfoPtr surface = NULL; XvMCSurfaceInfoPtr surface = NULL;
xvmcCreateContextReply rep; xvmcCreateContextReply rep;
REQUEST(xvmcCreateContextReq); REQUEST(xvmcCreateContextReq);
REQUEST_SIZE_MATCH(xvmcCreateContextReq); REQUEST_SIZE_MATCH(xvmcCreateContextReq);
@ -194,43 +195,42 @@ ProcXvMCCreateContext(ClientPtr client)
pScreen = pPort->pAdaptor->pScreen; pScreen = pPort->pAdaptor->pScreen;
if(!XvMCInUse) /* no XvMC adaptors */ if (!XvMCInUse) /* no XvMC adaptors */
return BadMatch; return BadMatch;
if(!(pScreenPriv = XVMC_GET_PRIVATE(pScreen))) /* none this screen */ if (!(pScreenPriv = XVMC_GET_PRIVATE(pScreen))) /* none this screen */
return BadMatch; return BadMatch;
for(i = 0; i < pScreenPriv->num_adaptors; i++) { for (i = 0; i < pScreenPriv->num_adaptors; i++) {
if(pPort->pAdaptor == pScreenPriv->adaptors[i].xv_adaptor) { if (pPort->pAdaptor == pScreenPriv->adaptors[i].xv_adaptor) {
adaptor = &(pScreenPriv->adaptors[i]); adaptor = &(pScreenPriv->adaptors[i]);
adapt_num = i; adapt_num = i;
break; break;
} }
} }
if(adapt_num < 0) /* none this port */ if (adapt_num < 0) /* none this port */
return BadMatch; return BadMatch;
for(i = 0; i < adaptor->num_surfaces; i++) { for (i = 0; i < adaptor->num_surfaces; i++) {
if(adaptor->surfaces[i]->surface_type_id == stuff->surface_type_id) { if (adaptor->surfaces[i]->surface_type_id == stuff->surface_type_id) {
surface = adaptor->surfaces[i]; surface = adaptor->surfaces[i];
break; break;
} }
} }
/* adaptor doesn't support this suface_type_id */ /* adaptor doesn't support this suface_type_id */
if(!surface) return BadMatch; if (!surface)
return BadMatch;
if ((stuff->width > surface->max_width) ||
if((stuff->width > surface->max_width) ||
(stuff->height > surface->max_height)) (stuff->height > surface->max_height))
return BadValue; return BadValue;
if(!(pContext = malloc(sizeof(XvMCContextRec)))) { if (!(pContext = malloc(sizeof(XvMCContextRec)))) {
return BadAlloc; return BadAlloc;
} }
pContext->pScreen = pScreen; pContext->pScreen = pScreen;
pContext->adapt_num = adapt_num; pContext->adapt_num = adapt_num;
pContext->context_id = stuff->context_id; pContext->context_id = stuff->context_id;
@ -240,9 +240,9 @@ ProcXvMCCreateContext(ClientPtr client)
pContext->flags = stuff->flags; pContext->flags = stuff->flags;
pContext->refcnt = 1; pContext->refcnt = 1;
result = (*adaptor->CreateContext)(pPort, pContext, &dwords, &data); result = (*adaptor->CreateContext) (pPort, pContext, &dwords, &data);
if(result != Success) { if (result != Success) {
free(pContext); free(pContext);
return result; return result;
} }
@ -254,9 +254,9 @@ ProcXvMCCreateContext(ClientPtr client)
rep.flags_return = pContext->flags; rep.flags_return = pContext->flags;
rep.length = dwords; rep.length = dwords;
WriteToClient(client, sizeof(xvmcCreateContextReply), (char*)&rep); WriteToClient(client, sizeof(xvmcCreateContextReply), (char *) &rep);
if(dwords) if (dwords)
WriteToClient(client, dwords << 2, (char*)data); WriteToClient(client, dwords << 2, (char *) data);
AddResource(pContext->context_id, XvMCRTContext, pContext); AddResource(pContext->context_id, XvMCRTContext, pContext);
free(data); free(data);
@ -269,6 +269,7 @@ ProcXvMCDestroyContext(ClientPtr client)
{ {
pointer val; pointer val;
int rc; int rc;
REQUEST(xvmcDestroyContextReq); REQUEST(xvmcDestroyContextReq);
REQUEST_SIZE_MATCH(xvmcDestroyContextReq); REQUEST_SIZE_MATCH(xvmcDestroyContextReq);
@ -292,27 +293,30 @@ ProcXvMCCreateSurface(ClientPtr client)
XvMCSurfacePtr pSurface; XvMCSurfacePtr pSurface;
XvMCScreenPtr pScreenPriv; XvMCScreenPtr pScreenPriv;
xvmcCreateSurfaceReply rep; xvmcCreateSurfaceReply rep;
REQUEST(xvmcCreateSurfaceReq); REQUEST(xvmcCreateSurfaceReq);
REQUEST_SIZE_MATCH(xvmcCreateSurfaceReq); REQUEST_SIZE_MATCH(xvmcCreateSurfaceReq);
result = dixLookupResourceByType((pointer *)&pContext, stuff->context_id, result = dixLookupResourceByType((pointer *) &pContext, stuff->context_id,
XvMCRTContext, client, DixUseAccess); XvMCRTContext, client, DixUseAccess);
if (result != Success) if (result != Success)
return result; return result;
pScreenPriv = XVMC_GET_PRIVATE(pContext->pScreen); pScreenPriv = XVMC_GET_PRIVATE(pContext->pScreen);
if(!(pSurface = malloc(sizeof(XvMCSurfaceRec)))) if (!(pSurface = malloc(sizeof(XvMCSurfaceRec))))
return BadAlloc; return BadAlloc;
pSurface->surface_id = stuff->surface_id; pSurface->surface_id = stuff->surface_id;
pSurface->surface_type_id = pContext->surface_type_id; pSurface->surface_type_id = pContext->surface_type_id;
pSurface->context = pContext; pSurface->context = pContext;
result = (*pScreenPriv->adaptors[pContext->adapt_num].CreateSurface)( result =
pSurface, &dwords, &data); (*pScreenPriv->adaptors[pContext->adapt_num].CreateSurface) (pSurface,
&dwords,
&data);
if(result != Success) { if (result != Success) {
free(pSurface); free(pSurface);
return result; return result;
} }
@ -321,9 +325,9 @@ ProcXvMCCreateSurface(ClientPtr client)
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
rep.length = dwords; rep.length = dwords;
WriteToClient(client, sizeof(xvmcCreateSurfaceReply), (char*)&rep); WriteToClient(client, sizeof(xvmcCreateSurfaceReply), (char *) &rep);
if(dwords) if (dwords)
WriteToClient(client, dwords << 2, (char*)data); WriteToClient(client, dwords << 2, (char *) data);
AddResource(pSurface->surface_id, XvMCRTSurface, pSurface); AddResource(pSurface->surface_id, XvMCRTSurface, pSurface);
free(data); free(data);
@ -338,6 +342,7 @@ ProcXvMCDestroySurface(ClientPtr client)
{ {
pointer val; pointer val;
int rc; int rc;
REQUEST(xvmcDestroySurfaceReq); REQUEST(xvmcDestroySurfaceReq);
REQUEST_SIZE_MATCH(xvmcDestroySurfaceReq); REQUEST_SIZE_MATCH(xvmcDestroySurfaceReq);
@ -363,10 +368,11 @@ ProcXvMCCreateSubpicture(ClientPtr client)
xvmcCreateSubpictureReply rep; xvmcCreateSubpictureReply rep;
XvMCAdaptorPtr adaptor; XvMCAdaptorPtr adaptor;
XvMCSurfaceInfoPtr surface = NULL; XvMCSurfaceInfoPtr surface = NULL;
REQUEST(xvmcCreateSubpictureReq); REQUEST(xvmcCreateSubpictureReq);
REQUEST_SIZE_MATCH(xvmcCreateSubpictureReq); REQUEST_SIZE_MATCH(xvmcCreateSubpictureReq);
result = dixLookupResourceByType((pointer *)&pContext, stuff->context_id, result = dixLookupResourceByType((pointer *) &pContext, stuff->context_id,
XvMCRTContext, client, DixUseAccess); XvMCRTContext, client, DixUseAccess);
if (result != Success) if (result != Success)
return result; return result;
@ -376,33 +382,37 @@ ProcXvMCCreateSubpicture(ClientPtr client)
adaptor = &(pScreenPriv->adaptors[pContext->adapt_num]); adaptor = &(pScreenPriv->adaptors[pContext->adapt_num]);
/* find which surface this context supports */ /* find which surface this context supports */
for(i = 0; i < adaptor->num_surfaces; i++) { for (i = 0; i < adaptor->num_surfaces; i++) {
if(adaptor->surfaces[i]->surface_type_id == pContext->surface_type_id){ if (adaptor->surfaces[i]->surface_type_id == pContext->surface_type_id) {
surface = adaptor->surfaces[i]; surface = adaptor->surfaces[i];
break; break;
} }
} }
if(!surface) return BadMatch; if (!surface)
return BadMatch;
/* make sure this surface supports that xvimage format */ /* make sure this surface supports that xvimage format */
if(!surface->compatible_subpictures) return BadMatch; if (!surface->compatible_subpictures)
return BadMatch;
for(i = 0; i < surface->compatible_subpictures->num_xvimages; i++) { for (i = 0; i < surface->compatible_subpictures->num_xvimages; i++) {
if(surface->compatible_subpictures->xvimage_ids[i] == stuff->xvimage_id) { if (surface->compatible_subpictures->xvimage_ids[i] ==
stuff->xvimage_id) {
image_supported = TRUE; image_supported = TRUE;
break; break;
} }
} }
if(!image_supported) return BadMatch; if (!image_supported)
return BadMatch;
/* make sure the size is OK */ /* make sure the size is OK */
if((stuff->width > surface->subpicture_max_width) || if ((stuff->width > surface->subpicture_max_width) ||
(stuff->height > surface->subpicture_max_height)) (stuff->height > surface->subpicture_max_height))
return BadValue; return BadValue;
if(!(pSubpicture = malloc(sizeof(XvMCSubpictureRec)))) if (!(pSubpicture = malloc(sizeof(XvMCSubpictureRec))))
return BadAlloc; return BadAlloc;
pSubpicture->subpicture_id = stuff->subpicture_id; pSubpicture->subpicture_id = stuff->subpicture_id;
@ -417,10 +427,11 @@ ProcXvMCCreateSubpicture(ClientPtr client)
pSubpicture->component_order[3] = 0; pSubpicture->component_order[3] = 0;
pSubpicture->context = pContext; pSubpicture->context = pContext;
result = (*pScreenPriv->adaptors[pContext->adapt_num].CreateSubpicture)( result =
pSubpicture, &dwords, &data); (*pScreenPriv->adaptors[pContext->adapt_num].
CreateSubpicture) (pSubpicture, &dwords, &data);
if(result != Success) { if (result != Success) {
free(pSubpicture); free(pSubpicture);
return result; return result;
} }
@ -437,9 +448,9 @@ ProcXvMCCreateSubpicture(ClientPtr client)
rep.component_order[3] = pSubpicture->component_order[3]; rep.component_order[3] = pSubpicture->component_order[3];
rep.length = dwords; rep.length = dwords;
WriteToClient(client, sizeof(xvmcCreateSubpictureReply), (char*)&rep); WriteToClient(client, sizeof(xvmcCreateSubpictureReply), (char *) &rep);
if(dwords) if (dwords)
WriteToClient(client, dwords << 2, (char*)data); WriteToClient(client, dwords << 2, (char *) data);
AddResource(pSubpicture->subpicture_id, XvMCRTSubpicture, pSubpicture); AddResource(pSubpicture->subpicture_id, XvMCRTSubpicture, pSubpicture);
free(data); free(data);
@ -454,6 +465,7 @@ ProcXvMCDestroySubpicture(ClientPtr client)
{ {
pointer val; pointer val;
int rc; int rc;
REQUEST(xvmcDestroySubpictureReq); REQUEST(xvmcDestroySubpictureReq);
REQUEST_SIZE_MATCH(xvmcDestroySubpictureReq); REQUEST_SIZE_MATCH(xvmcDestroySubpictureReq);
@ -467,7 +479,6 @@ ProcXvMCDestroySubpicture(ClientPtr client)
return Success; return Success;
} }
static int static int
ProcXvMCListSubpictureTypes(ClientPtr client) ProcXvMCListSubpictureTypes(ClientPtr client)
{ {
@ -480,6 +491,7 @@ ProcXvMCListSubpictureTypes(ClientPtr client)
xvImageFormatInfo info; xvImageFormatInfo info;
XvImagePtr pImage; XvImagePtr pImage;
int i, j; int i, j;
REQUEST(xvmcListSubpictureTypesReq); REQUEST(xvmcListSubpictureTypesReq);
REQUEST_SIZE_MATCH(xvmcListSubpictureTypesReq); REQUEST_SIZE_MATCH(xvmcListSubpictureTypesReq);
@ -490,48 +502,50 @@ ProcXvMCListSubpictureTypes(ClientPtr client)
if (!dixPrivateKeyRegistered(XvMCScreenKey)) if (!dixPrivateKeyRegistered(XvMCScreenKey))
return BadMatch; /* No XvMC adaptors */ return BadMatch; /* No XvMC adaptors */
if(!(pScreenPriv = XVMC_GET_PRIVATE(pScreen))) if (!(pScreenPriv = XVMC_GET_PRIVATE(pScreen)))
return BadMatch; /* None this screen */ return BadMatch; /* None this screen */
for(i = 0; i < pScreenPriv->num_adaptors; i++) { for (i = 0; i < pScreenPriv->num_adaptors; i++) {
if(pPort->pAdaptor == pScreenPriv->adaptors[i].xv_adaptor) { if (pPort->pAdaptor == pScreenPriv->adaptors[i].xv_adaptor) {
adaptor = &(pScreenPriv->adaptors[i]); adaptor = &(pScreenPriv->adaptors[i]);
break; break;
} }
} }
if(!adaptor) return BadMatch; if (!adaptor)
return BadMatch;
for(i = 0; i < adaptor->num_surfaces; i++) { for (i = 0; i < adaptor->num_surfaces; i++) {
if(adaptor->surfaces[i]->surface_type_id == stuff->surface_type_id) { if (adaptor->surfaces[i]->surface_type_id == stuff->surface_type_id) {
surface = adaptor->surfaces[i]; surface = adaptor->surfaces[i];
break; break;
} }
} }
if(!surface) return BadMatch; if (!surface)
return BadMatch;
rep.type = X_Reply; rep.type = X_Reply;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
rep.num = 0; rep.num = 0;
if(surface->compatible_subpictures) if (surface->compatible_subpictures)
rep.num = surface->compatible_subpictures->num_xvimages; rep.num = surface->compatible_subpictures->num_xvimages;
rep.length = bytes_to_int32(rep.num * sizeof(xvImageFormatInfo)); rep.length = bytes_to_int32(rep.num * sizeof(xvImageFormatInfo));
WriteToClient(client, sizeof(xvmcListSubpictureTypesReply), (char*)&rep); WriteToClient(client, sizeof(xvmcListSubpictureTypesReply), (char *) &rep);
for(i = 0; i < rep.num; i++) { for (i = 0; i < rep.num; i++) {
pImage = NULL; pImage = NULL;
for(j = 0; j < adaptor->num_subpictures; j++) { for (j = 0; j < adaptor->num_subpictures; j++) {
if(surface->compatible_subpictures->xvimage_ids[i] == if (surface->compatible_subpictures->xvimage_ids[i] ==
adaptor->subpictures[j]->id) adaptor->subpictures[j]->id) {
{
pImage = adaptor->subpictures[j]; pImage = adaptor->subpictures[j];
break; break;
} }
} }
if(!pImage) return BadImplementation; if (!pImage)
return BadImplementation;
info.id = pImage->id; info.id = pImage->id;
info.type = pImage->type; info.type = pImage->type;
@ -555,7 +569,7 @@ ProcXvMCListSubpictureTypes(ClientPtr client)
info.vert_v_period = pImage->vert_v_period; info.vert_v_period = pImage->vert_v_period;
memcpy(&info.comp_order, pImage->component_order, 32); memcpy(&info.comp_order, pImage->component_order, 32);
info.scanline_order = pImage->scanline_order; info.scanline_order = pImage->scanline_order;
WriteToClient(client, sizeof(xvImageFormatInfo), (char*)&info); WriteToClient(client, sizeof(xvImageFormatInfo), (char *) &info);
} }
return Success; return Success;
@ -590,8 +604,8 @@ ProcXvMCGetDRInfo(ClientPtr client)
rep.busIDLen = bytes_to_int32(strlen(pScreenPriv->busID) + 1); rep.busIDLen = bytes_to_int32(strlen(pScreenPriv->busID) + 1);
rep.length = rep.nameLen + rep.busIDLen; rep.length = rep.nameLen + rep.busIDLen;
rep.nameLen <<=2; rep.nameLen <<= 2;
rep.busIDLen <<=2; rep.busIDLen <<= 2;
/* /*
* Read back to the client what she has put in the shared memory * Read back to the client what she has put in the shared memory
@ -600,8 +614,8 @@ ProcXvMCGetDRInfo(ClientPtr client)
rep.isLocal = 1; rep.isLocal = 1;
#ifdef HAS_XVMCSHM #ifdef HAS_XVMCSHM
patternP = (CARD32 *)shmat( stuff->shmKey, NULL, SHM_RDONLY ); patternP = (CARD32 *) shmat(stuff->shmKey, NULL, SHM_RDONLY);
if ( -1 != (long) patternP) { if (-1 != (long) patternP) {
volatile CARD32 *patternC = patternP; volatile CARD32 *patternC = patternP;
int i; int i;
CARD32 magic = stuff->magic; CARD32 magic = stuff->magic;
@ -609,31 +623,27 @@ ProcXvMCGetDRInfo(ClientPtr client)
rep.isLocal = 1; rep.isLocal = 1;
i = 1024 / sizeof(CARD32); i = 1024 / sizeof(CARD32);
while ( i-- ) { while (i--) {
if (*patternC++ != magic) { if (*patternC++ != magic) {
rep.isLocal = 0; rep.isLocal = 0;
break; break;
} }
magic = ~magic; magic = ~magic;
} }
shmdt( (char *)patternP ); shmdt((char *) patternP);
} }
#endif /* HAS_XVMCSHM */ #endif /* HAS_XVMCSHM */
WriteToClient(client, sizeof(xvmcGetDRInfoReply), WriteToClient(client, sizeof(xvmcGetDRInfoReply), (char *) &rep);
(char*)&rep);
if (rep.length) { if (rep.length) {
WriteToClient(client, rep.nameLen, WriteToClient(client, rep.nameLen, pScreenPriv->clientDriverName);
pScreenPriv->clientDriverName); WriteToClient(client, rep.busIDLen, pScreenPriv->busID);
WriteToClient(client, rep.busIDLen,
pScreenPriv->busID);
} }
return Success; return Success;
} }
int (*ProcXvMCVector[xvmcNumRequest]) (ClientPtr) = {
int (*ProcXvMCVector[xvmcNumRequest])(ClientPtr) = { ProcXvMCQueryVersion,
ProcXvMCQueryVersion,
ProcXvMCListSurfaceTypes, ProcXvMCListSurfaceTypes,
ProcXvMCCreateContext, ProcXvMCCreateContext,
ProcXvMCDestroyContext, ProcXvMCDestroyContext,
@ -641,23 +651,21 @@ int (*ProcXvMCVector[xvmcNumRequest])(ClientPtr) = {
ProcXvMCDestroySurface, ProcXvMCDestroySurface,
ProcXvMCCreateSubpicture, ProcXvMCCreateSubpicture,
ProcXvMCDestroySubpicture, ProcXvMCDestroySubpicture,
ProcXvMCListSubpictureTypes, ProcXvMCListSubpictureTypes, ProcXvMCGetDRInfo};
ProcXvMCGetDRInfo
};
static int static int
ProcXvMCDispatch (ClientPtr client) ProcXvMCDispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
if(stuff->data < xvmcNumRequest) if (stuff->data < xvmcNumRequest)
return (*ProcXvMCVector[stuff->data])(client); return (*ProcXvMCVector[stuff->data]) (client);
else else
return BadRequest; return BadRequest;
} }
static int static int
SProcXvMCDispatch (ClientPtr client) SProcXvMCDispatch(ClientPtr client)
{ {
/* We only support local */ /* We only support local */
return BadImplementation; return BadImplementation;
@ -671,15 +679,15 @@ XvMCExtensionInit(void)
if (!dixPrivateKeyRegistered(XvMCScreenKey)) if (!dixPrivateKeyRegistered(XvMCScreenKey))
return; return;
if(!(XvMCRTContext = CreateNewResourceType(XvMCDestroyContextRes, if (!(XvMCRTContext = CreateNewResourceType(XvMCDestroyContextRes,
"XvMCRTContext"))) "XvMCRTContext")))
return; return;
if(!(XvMCRTSurface = CreateNewResourceType(XvMCDestroySurfaceRes, if (!(XvMCRTSurface = CreateNewResourceType(XvMCDestroySurfaceRes,
"XvMCRTSurface"))) "XvMCRTSurface")))
return; return;
if(!(XvMCRTSubpicture = CreateNewResourceType(XvMCDestroySubpictureRes, if (!(XvMCRTSubpicture = CreateNewResourceType(XvMCDestroySubpictureRes,
"XvMCRTSubpicture"))) "XvMCRTSubpicture")))
return; return;
@ -687,17 +695,21 @@ XvMCExtensionInit(void)
ProcXvMCDispatch, SProcXvMCDispatch, ProcXvMCDispatch, SProcXvMCDispatch,
NULL, StandardMinorOpcode); NULL, StandardMinorOpcode);
if(!extEntry) return; if (!extEntry)
return;
XvMCReqCode = extEntry->base; XvMCReqCode = extEntry->base;
XvMCEventBase = extEntry->eventBase; XvMCEventBase = extEntry->eventBase;
SetResourceTypeErrorValue(XvMCRTContext, extEntry->errorBase + XvMCBadContext); SetResourceTypeErrorValue(XvMCRTContext,
SetResourceTypeErrorValue(XvMCRTSurface, extEntry->errorBase + XvMCBadSurface); extEntry->errorBase + XvMCBadContext);
SetResourceTypeErrorValue(XvMCRTSubpicture, extEntry->errorBase + XvMCBadSubpicture); SetResourceTypeErrorValue(XvMCRTSurface,
extEntry->errorBase + XvMCBadSurface);
SetResourceTypeErrorValue(XvMCRTSubpicture,
extEntry->errorBase + XvMCBadSubpicture);
} }
static Bool static Bool
XvMCCloseScreen (int i, ScreenPtr pScreen) XvMCCloseScreen(int i, ScreenPtr pScreen)
{ {
XvMCScreenPtr pScreenPriv = XVMC_GET_PRIVATE(pScreen); XvMCScreenPtr pScreenPriv = XVMC_GET_PRIVATE(pScreen);
@ -705,10 +717,9 @@ XvMCCloseScreen (int i, ScreenPtr pScreen)
free(pScreenPriv); free(pScreenPriv);
return (*pScreen->CloseScreen)(i, pScreen); return (*pScreen->CloseScreen) (i, pScreen);
} }
int int
XvMCScreenInit(ScreenPtr pScreen, int num, XvMCAdaptorPtr pAdapt) XvMCScreenInit(ScreenPtr pScreen, int num, XvMCAdaptorPtr pAdapt)
{ {
@ -717,7 +728,7 @@ XvMCScreenInit(ScreenPtr pScreen, int num, XvMCAdaptorPtr pAdapt)
if (!dixRegisterPrivateKey(&XvMCScreenKeyRec, PRIVATE_SCREEN, 0)) if (!dixRegisterPrivateKey(&XvMCScreenKeyRec, PRIVATE_SCREEN, 0))
return BadAlloc; return BadAlloc;
if(!(pScreenPriv = malloc(sizeof(XvMCScreenRec)))) if (!(pScreenPriv = malloc(sizeof(XvMCScreenRec))))
return BadAlloc; return BadAlloc;
dixSetPrivate(&pScreen->devPrivates, XvMCScreenKey, pScreenPriv); dixSetPrivate(&pScreen->devPrivates, XvMCScreenKey, pScreenPriv);
@ -738,7 +749,8 @@ XvMCScreenInit(ScreenPtr pScreen, int num, XvMCAdaptorPtr pAdapt)
return Success; return Success;
} }
XvImagePtr XvMCFindXvImage(XvPortPtr pPort, CARD32 id) XvImagePtr
XvMCFindXvImage(XvPortPtr pPort, CARD32 id)
{ {
XvImagePtr pImage = NULL; XvImagePtr pImage = NULL;
ScreenPtr pScreen = pPort->pAdaptor->pScreen; ScreenPtr pScreen = pPort->pAdaptor->pScreen;
@ -749,20 +761,21 @@ XvImagePtr XvMCFindXvImage(XvPortPtr pPort, CARD32 id)
if (!dixPrivateKeyRegistered(XvMCScreenKey)) if (!dixPrivateKeyRegistered(XvMCScreenKey))
return NULL; return NULL;
if(!(pScreenPriv = XVMC_GET_PRIVATE(pScreen))) if (!(pScreenPriv = XVMC_GET_PRIVATE(pScreen)))
return NULL; return NULL;
for(i = 0; i < pScreenPriv->num_adaptors; i++) { for (i = 0; i < pScreenPriv->num_adaptors; i++) {
if(pPort->pAdaptor == pScreenPriv->adaptors[i].xv_adaptor) { if (pPort->pAdaptor == pScreenPriv->adaptors[i].xv_adaptor) {
adaptor = &(pScreenPriv->adaptors[i]); adaptor = &(pScreenPriv->adaptors[i]);
break; break;
} }
} }
if(!adaptor) return NULL; if (!adaptor)
return NULL;
for(i = 0; i < adaptor->num_subpictures; i++) { for (i = 0; i < adaptor->num_subpictures; i++) {
if(adaptor->subpictures[i]->id == id) { if (adaptor->subpictures[i]->id == id) {
pImage = adaptor->subpictures[i]; pImage = adaptor->subpictures[i];
break; break;
} }
@ -773,16 +786,14 @@ XvImagePtr XvMCFindXvImage(XvPortPtr pPort, CARD32 id)
int int
xf86XvMCRegisterDRInfo(ScreenPtr pScreen, char *name, xf86XvMCRegisterDRInfo(ScreenPtr pScreen, char *name,
char *busID, int major, int minor, char *busID, int major, int minor, int patchLevel)
int patchLevel)
{ {
XvMCScreenPtr pScreenPriv = XVMC_GET_PRIVATE(pScreen); XvMCScreenPtr pScreenPriv = XVMC_GET_PRIVATE(pScreen);
strlcpy(pScreenPriv->clientDriverName, name,
DR_CLIENT_DRIVER_NAME_SIZE); strlcpy(pScreenPriv->clientDriverName, name, DR_CLIENT_DRIVER_NAME_SIZE);
strlcpy(pScreenPriv->busID, busID, DR_BUSID_SIZE); strlcpy(pScreenPriv->busID, busID, DR_BUSID_SIZE);
pScreenPriv->major = major; pScreenPriv->major = major;
pScreenPriv->minor = minor; pScreenPriv->minor = minor;
pScreenPriv->patchLevel = patchLevel; pScreenPriv->patchLevel = patchLevel;
return Success; return Success;
} }

View File

@ -42,7 +42,6 @@ typedef struct {
pointer driver_priv; pointer driver_priv;
} XvMCSurfaceRec, *XvMCSurfacePtr; } XvMCSurfaceRec, *XvMCSurfacePtr;
typedef struct { typedef struct {
XID subpicture_id; XID subpicture_id;
int xvimage_id; int xvimage_id;
@ -55,37 +54,21 @@ typedef struct {
pointer driver_priv; pointer driver_priv;
} XvMCSubpictureRec, *XvMCSubpicturePtr; } XvMCSubpictureRec, *XvMCSubpicturePtr;
typedef int (*XvMCCreateContextProcPtr) ( typedef int (*XvMCCreateContextProcPtr) (XvPortPtr port,
XvPortPtr port,
XvMCContextPtr context, XvMCContextPtr context,
int *num_priv, int *num_priv, CARD32 **priv);
CARD32 **priv
);
typedef void (*XvMCDestroyContextProcPtr) ( typedef void (*XvMCDestroyContextProcPtr) (XvMCContextPtr context);
XvMCContextPtr context
);
typedef int (*XvMCCreateSurfaceProcPtr) ( typedef int (*XvMCCreateSurfaceProcPtr) (XvMCSurfacePtr surface,
XvMCSurfacePtr surface, int *num_priv, CARD32 **priv);
int *num_priv,
CARD32 **priv
);
typedef void (*XvMCDestroySurfaceProcPtr) ( typedef void (*XvMCDestroySurfaceProcPtr) (XvMCSurfacePtr surface);
XvMCSurfacePtr surface
);
typedef int (*XvMCCreateSubpictureProcPtr) ( typedef int (*XvMCCreateSubpictureProcPtr) (XvMCSubpicturePtr subpicture,
XvMCSubpicturePtr subpicture, int *num_priv, CARD32 **priv);
int *num_priv,
CARD32 **priv
);
typedef void (*XvMCDestroySubpictureProcPtr) (
XvMCSubpicturePtr subpicture
);
typedef void (*XvMCDestroySubpictureProcPtr) (XvMCSubpicturePtr subpicture);
typedef struct { typedef struct {
XvAdaptorPtr xv_adaptor; XvAdaptorPtr xv_adaptor;
@ -105,8 +88,7 @@ typedef struct {
extern _X_EXPORT void XvMCExtensionInit(void); extern _X_EXPORT void XvMCExtensionInit(void);
extern _X_EXPORT int XvMCScreenInit(ScreenPtr pScreen, extern _X_EXPORT int XvMCScreenInit(ScreenPtr pScreen,
int num, int num, XvMCAdaptorPtr adapt);
XvMCAdaptorPtr adapt);
extern _X_EXPORT XvImagePtr XvMCFindXvImage(XvPortPtr pPort, CARD32 id); extern _X_EXPORT XvImagePtr XvMCFindXvImage(XvPortPtr pPort, CARD32 id);

View File

@ -80,10 +80,10 @@ SProcXChangeDeviceControl(ClientPtr client)
swaps(&stuff->length); swaps(&stuff->length);
REQUEST_AT_LEAST_SIZE(xChangeDeviceControlReq); REQUEST_AT_LEAST_SIZE(xChangeDeviceControlReq);
swaps(&stuff->control); swaps(&stuff->control);
ctl = (xDeviceCtl*)&stuff[1]; ctl = (xDeviceCtl *) & stuff[1];
swaps(&ctl->control); swaps(&ctl->control);
swaps(&ctl->length); swaps(&ctl->length);
switch(stuff->control) { switch (stuff->control) {
case DEVICE_ABS_CALIB: case DEVICE_ABS_CALIB:
case DEVICE_ABS_AREA: case DEVICE_ABS_AREA:
case DEVICE_CORE: case DEVICE_CORE:
@ -132,7 +132,8 @@ ProcXChangeDeviceControl(ClientPtr client)
case DEVICE_RESOLUTION: case DEVICE_RESOLUTION:
r = (xDeviceResolutionCtl *) & stuff[1]; r = (xDeviceResolutionCtl *) & stuff[1];
if ((len < bytes_to_int32(sizeof(xDeviceResolutionCtl))) || if ((len < bytes_to_int32(sizeof(xDeviceResolutionCtl))) ||
(len != bytes_to_int32(sizeof(xDeviceResolutionCtl)) + r->num_valuators)) { (len !=
bytes_to_int32(sizeof(xDeviceResolutionCtl)) + r->num_valuators)) {
ret = BadLength; ret = BadLength;
goto out; goto out;
} }
@ -161,10 +162,12 @@ ProcXChangeDeviceControl(ClientPtr client)
(a++)->resolution = *resolution++; (a++)->resolution = *resolution++;
ret = Success; ret = Success;
} else if (status == DeviceBusy) { }
else if (status == DeviceBusy) {
rep.status = DeviceBusy; rep.status = DeviceBusy;
ret = Success; ret = Success;
} else { }
else {
ret = BadMatch; ret = BadMatch;
} }
break; break;
@ -180,7 +183,7 @@ ProcXChangeDeviceControl(ClientPtr client)
ret = BadMatch; ret = BadMatch;
break; break;
case DEVICE_ENABLE: case DEVICE_ENABLE:
e = (xDeviceEnableCtl *)&stuff[1]; e = (xDeviceEnableCtl *) & stuff[1];
status = ChangeDeviceControl(client, dev, (xDeviceCtl *) e); status = ChangeDeviceControl(client, dev, (xDeviceCtl *) e);
@ -190,10 +193,12 @@ ProcXChangeDeviceControl(ClientPtr client)
else else
DisableDevice(dev, TRUE); DisableDevice(dev, TRUE);
ret = Success; ret = Success;
} else if (status == DeviceBusy) { }
else if (status == DeviceBusy) {
rep.status = DeviceBusy; rep.status = DeviceBusy;
ret = Success; ret = Success;
} else { }
else {
ret = BadMatch; ret = BadMatch;
} }
@ -202,7 +207,7 @@ ProcXChangeDeviceControl(ClientPtr client)
ret = BadValue; ret = BadValue;
} }
out: out:
if (ret == Success) { if (ret == Success) {
dpn.type = DevicePresenceNotify; dpn.type = DevicePresenceNotify;
dpn.time = currentTime.milliseconds; dpn.time = currentTime.milliseconds;
@ -231,5 +236,5 @@ SRepXChangeDeviceControl(ClientPtr client, int size,
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -173,12 +173,14 @@ ChangeKbdFeedback(ClientPtr client, DeviceIntPtr dev, long unsigned int mask,
kctrl.autoRepeat = FALSE; kctrl.autoRepeat = FALSE;
else else
kctrl.autoRepeats[inx] &= ~kmask; kctrl.autoRepeats[inx] &= ~kmask;
} else if (t == AutoRepeatModeOn) { }
else if (t == AutoRepeatModeOn) {
if (key == DO_ALL) if (key == DO_ALL)
kctrl.autoRepeat = TRUE; kctrl.autoRepeat = TRUE;
else else
kctrl.autoRepeats[inx] |= kmask; kctrl.autoRepeats[inx] |= kmask;
} else if (t == AutoRepeatModeDefault) { }
else if (t == AutoRepeatModeDefault) {
if (key == DO_ALL) if (key == DO_ALL)
kctrl.autoRepeat = defaultKeyboardControl.autoRepeat; kctrl.autoRepeat = defaultKeyboardControl.autoRepeat;
else else
@ -186,7 +188,8 @@ ChangeKbdFeedback(ClientPtr client, DeviceIntPtr dev, long unsigned int mask,
kctrl.autoRepeats[inx] = kctrl.autoRepeats[inx] =
(kctrl.autoRepeats[inx] & ~kmask) | (kctrl.autoRepeats[inx] & ~kmask) |
(defaultKeyboardControl.autoRepeats[inx] & kmask); (defaultKeyboardControl.autoRepeats[inx] & kmask);
} else { }
else {
client->errorValue = t; client->errorValue = t;
return BadValue; return BadValue;
} }
@ -226,7 +229,8 @@ ChangePtrFeedback(ClientPtr client, DeviceIntPtr dev, long unsigned int mask,
else if (accelNum < 0) { else if (accelNum < 0) {
client->errorValue = accelNum; client->errorValue = accelNum;
return BadValue; return BadValue;
} else }
else
pctrl.num = accelNum; pctrl.num = accelNum;
} }
@ -239,7 +243,8 @@ ChangePtrFeedback(ClientPtr client, DeviceIntPtr dev, long unsigned int mask,
else if (accelDenom <= 0) { else if (accelDenom <= 0) {
client->errorValue = accelDenom; client->errorValue = accelDenom;
return BadValue; return BadValue;
} else }
else
pctrl.den = accelDenom; pctrl.den = accelDenom;
} }
@ -252,7 +257,8 @@ ChangePtrFeedback(ClientPtr client, DeviceIntPtr dev, long unsigned int mask,
else if (threshold < 0) { else if (threshold < 0) {
client->errorValue = threshold; client->errorValue = threshold;
return BadValue; return BadValue;
} else }
else
pctrl.threshold = threshold; pctrl.threshold = threshold;
} }
@ -463,7 +469,8 @@ ProcXChangeFeedbackControl(ClientPtr client)
if (client->swapped) { if (client->swapped) {
swaps(&f->num_keysyms); swaps(&f->num_keysyms);
} }
if (len != (bytes_to_int32(sizeof(xStringFeedbackCtl)) + f->num_keysyms)) if (len !=
(bytes_to_int32(sizeof(xStringFeedbackCtl)) + f->num_keysyms))
return BadLength; return BadLength;
for (s = dev->stringfeed; s; s = s->next) for (s = dev->stringfeed; s; s = s->next)
@ -479,7 +486,8 @@ ProcXChangeFeedbackControl(ClientPtr client)
for (i = dev->intfeed; i; i = i->next) for (i = dev->intfeed; i; i = i->next)
if (i->ctrl.id == ((xIntegerFeedbackCtl *) & stuff[1])->id) if (i->ctrl.id == ((xIntegerFeedbackCtl *) & stuff[1])->id)
return ChangeIntegerFeedback(client, dev, stuff->mask, i, return ChangeIntegerFeedback(client, dev, stuff->mask, i,
(xIntegerFeedbackCtl *)&stuff[1]); (xIntegerFeedbackCtl *) &
stuff[1]);
break; break;
case LedFeedbackClass: case LedFeedbackClass:
if (len != bytes_to_int32(sizeof(xLedFeedbackCtl))) if (len != bytes_to_int32(sizeof(xLedFeedbackCtl)))
@ -505,4 +513,3 @@ ProcXChangeFeedbackControl(ClientPtr client)
return BadMatch; return BadMatch;
} }

View File

@ -102,7 +102,8 @@ ProcXChangeDeviceDontPropagateList(ClientPtr client)
REQUEST(xChangeDeviceDontPropagateListReq); REQUEST(xChangeDeviceDontPropagateListReq);
REQUEST_AT_LEAST_SIZE(xChangeDeviceDontPropagateListReq); REQUEST_AT_LEAST_SIZE(xChangeDeviceDontPropagateListReq);
if (stuff->length != bytes_to_int32(sizeof(xChangeDeviceDontPropagateListReq)) + if (stuff->length !=
bytes_to_int32(sizeof(xChangeDeviceDontPropagateListReq)) +
stuff->count) stuff->count)
return BadLength; return BadLength;

View File

@ -117,9 +117,10 @@ ProcXDeviceBell(ClientPtr client)
} }
base = k->ctrl.bell; base = k->ctrl.bell;
proc = k->BellProc; proc = k->BellProc;
ctrl = (pointer) & (k->ctrl); ctrl = (pointer) &(k->ctrl);
class = KbdFeedbackClass; class = KbdFeedbackClass;
} else if (stuff->feedbackclass == BellFeedbackClass) { }
else if (stuff->feedbackclass == BellFeedbackClass) {
for (b = dev->bell; b; b = b->next) for (b = dev->bell; b; b = b->next)
if (b->ctrl.id == stuff->feedbackid) if (b->ctrl.id == stuff->feedbackid)
break; break;
@ -129,9 +130,10 @@ ProcXDeviceBell(ClientPtr client)
} }
base = b->ctrl.percent; base = b->ctrl.percent;
proc = b->BellProc; proc = b->BellProc;
ctrl = (pointer) & (b->ctrl); ctrl = (pointer) &(b->ctrl);
class = BellFeedbackClass; class = BellFeedbackClass;
} else { }
else {
client->errorValue = stuff->feedbackclass; client->errorValue = stuff->feedbackclass;
return BadValue; return BadValue;
} }

File diff suppressed because it is too large Load Diff

View File

@ -79,6 +79,7 @@ extern int DevicePropertyNotify;
extern RESTYPE RT_INPUTCLIENT; extern RESTYPE RT_INPUTCLIENT;
extern DevPrivateKeyRec XIClientPrivateKeyRec; extern DevPrivateKeyRec XIClientPrivateKeyRec;
#define XIClientPrivateKey (&XIClientPrivateKeyRec) #define XIClientPrivateKey (&XIClientPrivateKeyRec)
#endif /* EXGLOBALS_H */ #endif /* EXGLOBALS_H */

View File

@ -125,7 +125,6 @@ SOFTWARE.
#include "xisetclientpointer.h" #include "xisetclientpointer.h"
#include "xiwarppointer.h" #include "xiwarppointer.h"
/* Masks for XI events have to be aligned with core event (partially anyway). /* Masks for XI events have to be aligned with core event (partially anyway).
* If DeviceButtonMotionMask is != ButtonMotionMask, event delivery * If DeviceButtonMotionMask is != ButtonMotionMask, event delivery
* breaks down. The device needs the dev->button->motionMask. If DBMM is * breaks down. The device needs the dev->button->motionMask. If DBMM is
@ -159,8 +158,7 @@ const Mask XIAllMasks = (1L << 21) - 1;
int ExtEventIndex; int ExtEventIndex;
Mask ExtExclusiveMasks[EMASKSIZE]; Mask ExtExclusiveMasks[EMASKSIZE];
static struct dev_type static struct dev_type {
{
Atom type; Atom type;
const char *name; const char *name;
} dev_type[] = { } dev_type[] = {
@ -194,7 +192,7 @@ static DeviceIntRec xi_all_master_devices;
* Dispatch vector. Functions defined in here will be called when the matching * Dispatch vector. Functions defined in here will be called when the matching
* request arrives. * request arrives.
*/ */
static int (*ProcIVector[])(ClientPtr) = { static int (*ProcIVector[]) (ClientPtr) = {
NULL, /* 0 */ NULL, /* 0 */
ProcXGetExtensionVersion, /* 1 */ ProcXGetExtensionVersion, /* 1 */
ProcXListInputDevices, /* 2 */ ProcXListInputDevices, /* 2 */
@ -261,7 +259,7 @@ static int (*ProcIVector[])(ClientPtr) = {
}; };
/* For swapped clients */ /* For swapped clients */
static int (*SProcIVector[])(ClientPtr) = { static int (*SProcIVector[]) (ClientPtr) = {
NULL, /* 0 */ NULL, /* 0 */
SProcXGetExtensionVersion, /* 1 */ SProcXGetExtensionVersion, /* 1 */
SProcXListInputDevices, /* 2 */ SProcXListInputDevices, /* 2 */
@ -367,7 +365,6 @@ RESTYPE RT_INPUTCLIENT;
extern XExtensionVersion XIVersion; extern XExtensionVersion XIVersion;
Mask PropagateMask[MAXDEVICES]; Mask PropagateMask[MAXDEVICES];
/***************************************************************** /*****************************************************************
@ -385,11 +382,9 @@ DevPrivateKeyRec XIClientPrivateKeyRec;
*/ */
static void static void
XIClientCallback(CallbackListPtr *list, XIClientCallback(CallbackListPtr *list, pointer closure, pointer data)
pointer closure,
pointer data)
{ {
NewClientInfoRec *clientinfo = (NewClientInfoRec*)data; NewClientInfoRec *clientinfo = (NewClientInfoRec *) data;
ClientPtr pClient = clientinfo->client; ClientPtr pClient = clientinfo->client;
XIClientPtr pXIClient; XIClientPtr pXIClient;
@ -412,7 +407,7 @@ ProcIDispatch(ClientPtr client)
if (stuff->data >= ARRAY_SIZE(ProcIVector) || !ProcIVector[stuff->data]) if (stuff->data >= ARRAY_SIZE(ProcIVector) || !ProcIVector[stuff->data])
return BadRequest; return BadRequest;
return (*ProcIVector[stuff->data])(client); return (*ProcIVector[stuff->data]) (client);
} }
/******************************************************************************* /*******************************************************************************
@ -431,7 +426,7 @@ SProcIDispatch(ClientPtr client)
if (stuff->data >= ARRAY_SIZE(SProcIVector) || !SProcIVector[stuff->data]) if (stuff->data >= ARRAY_SIZE(SProcIVector) || !SProcIVector[stuff->data])
return BadRequest; return BadRequest;
return (*SProcIVector[stuff->data])(client); return (*SProcIVector[stuff->data]) (client);
} }
/********************************************************************** /**********************************************************************
@ -496,17 +491,18 @@ SReplyIDispatch(ClientPtr client, int len, xGrabDeviceReply * rep)
SRepXChangeDeviceControl(client, len, SRepXChangeDeviceControl(client, len,
(xChangeDeviceControlReply *) rep); (xChangeDeviceControlReply *) rep);
else if (rep->RepType == X_ListDeviceProperties) else if (rep->RepType == X_ListDeviceProperties)
SRepXListDeviceProperties(client, len, (xListDevicePropertiesReply*)rep); SRepXListDeviceProperties(client, len,
(xListDevicePropertiesReply *) rep);
else if (rep->RepType == X_GetDeviceProperty) else if (rep->RepType == X_GetDeviceProperty)
SRepXGetDeviceProperty(client, len, (xGetDevicePropertyReply *) rep); SRepXGetDeviceProperty(client, len, (xGetDevicePropertyReply *) rep);
else if (rep->RepType == X_XIQueryPointer) else if (rep->RepType == X_XIQueryPointer)
SRepXIQueryPointer(client, len, (xXIQueryPointerReply *) rep); SRepXIQueryPointer(client, len, (xXIQueryPointerReply *) rep);
else if (rep->RepType == X_XIGetClientPointer) else if (rep->RepType == X_XIGetClientPointer)
SRepXIGetClientPointer(client, len, (xXIGetClientPointerReply*) rep); SRepXIGetClientPointer(client, len, (xXIGetClientPointerReply *) rep);
else if (rep->RepType == X_XIQueryVersion) else if (rep->RepType == X_XIQueryVersion)
SRepXIQueryVersion(client, len, (xXIQueryVersionReply*)rep); SRepXIQueryVersion(client, len, (xXIQueryVersionReply *) rep);
else if (rep->RepType == X_XIQueryDevice) else if (rep->RepType == X_XIQueryDevice)
SRepXIQueryDevice(client, len, (xXIQueryDeviceReply*)rep); SRepXIQueryDevice(client, len, (xXIQueryDeviceReply *) rep);
else if (rep->RepType == X_XIGrabDevice) else if (rep->RepType == X_XIGrabDevice)
SRepXIGrabDevice(client, len, (xXIGrabDeviceReply *) rep); SRepXIGrabDevice(client, len, (xXIGrabDeviceReply *) rep);
else if (rep->RepType == X_XIPassiveGrabDevice) else if (rep->RepType == X_XIPassiveGrabDevice)
@ -602,7 +598,8 @@ SDeviceMappingNotifyEvent(deviceMappingNotify * from, deviceMappingNotify * to)
} }
static void static void
SDevicePresenceNotifyEvent (devicePresenceNotify *from, devicePresenceNotify *to) SDevicePresenceNotifyEvent(devicePresenceNotify * from,
devicePresenceNotify * to)
{ {
*to = *from; *to = *from;
swaps(&to->sequenceNumber); swaps(&to->sequenceNumber);
@ -611,7 +608,8 @@ SDevicePresenceNotifyEvent (devicePresenceNotify *from, devicePresenceNotify *to
} }
static void static void
SDevicePropertyNotifyEvent (devicePropertyNotify *from, devicePropertyNotify *to) SDevicePropertyNotifyEvent(devicePropertyNotify * from,
devicePropertyNotify * to)
{ {
*to = *from; *to = *from;
swaps(&to->sequenceNumber); swaps(&to->sequenceNumber);
@ -620,7 +618,7 @@ SDevicePropertyNotifyEvent (devicePropertyNotify *from, devicePropertyNotify *to
} }
static void static void
SDeviceLeaveNotifyEvent (xXILeaveEvent *from, xXILeaveEvent *to) SDeviceLeaveNotifyEvent(xXILeaveEvent * from, xXILeaveEvent * to)
{ {
*to = *from; *to = *from;
swaps(&to->sequenceNumber); swaps(&to->sequenceNumber);
@ -643,7 +641,7 @@ SDeviceLeaveNotifyEvent (xXILeaveEvent *from, xXILeaveEvent *to)
} }
static void static void
SDeviceChangedEvent(xXIDeviceChangedEvent* from, xXIDeviceChangedEvent* to) SDeviceChangedEvent(xXIDeviceChangedEvent * from, xXIDeviceChangedEvent * to)
{ {
int i, j; int i, j;
xXIAnyInfo *any; xXIAnyInfo *any;
@ -651,17 +649,16 @@ SDeviceChangedEvent(xXIDeviceChangedEvent* from, xXIDeviceChangedEvent* to)
*to = *from; *to = *from;
memcpy(&to[1], &from[1], from->length * 4); memcpy(&to[1], &from[1], from->length * 4);
any = (xXIAnyInfo*)&to[1]; any = (xXIAnyInfo *) & to[1];
for (i = 0; i < to->num_classes; i++) for (i = 0; i < to->num_classes; i++) {
{
int length = any->length; int length = any->length;
switch(any->type) switch (any->type) {
{
case KeyClass: case KeyClass:
{ {
xXIKeyInfo *ki = (xXIKeyInfo*)any; xXIKeyInfo *ki = (xXIKeyInfo *) any;
uint32_t *key = (uint32_t*)&ki[1]; uint32_t *key = (uint32_t *) & ki[1];
for (j = 0; j < ki->num_keycodes; j++, key++) for (j = 0; j < ki->num_keycodes; j++, key++)
swapl(key); swapl(key);
swaps(&ki->num_keycodes); swaps(&ki->num_keycodes);
@ -669,9 +666,10 @@ SDeviceChangedEvent(xXIDeviceChangedEvent* from, xXIDeviceChangedEvent* to)
break; break;
case ButtonClass: case ButtonClass:
{ {
xXIButtonInfo *bi = (xXIButtonInfo*)any; xXIButtonInfo *bi = (xXIButtonInfo *) any;
Atom *labels = (Atom*)((char*)bi + sizeof(xXIButtonInfo) + Atom *labels = (Atom *) ((char *) bi + sizeof(xXIButtonInfo) +
pad_to_int32(bits_to_bytes(bi->num_buttons))); pad_to_int32(bits_to_bytes
(bi->num_buttons)));
for (j = 0; j < bi->num_buttons; j++) for (j = 0; j < bi->num_buttons; j++)
swapl(&labels[j]); swapl(&labels[j]);
swaps(&bi->num_buttons); swaps(&bi->num_buttons);
@ -679,7 +677,8 @@ SDeviceChangedEvent(xXIDeviceChangedEvent* from, xXIDeviceChangedEvent* to)
break; break;
case ValuatorClass: case ValuatorClass:
{ {
xXIValuatorInfo* ai = (xXIValuatorInfo*)any; xXIValuatorInfo *ai = (xXIValuatorInfo *) any;
swapl(&ai->label); swapl(&ai->label);
swapl(&ai->min.integral); swapl(&ai->min.integral);
swapl(&ai->min.frac); swapl(&ai->min.frac);
@ -695,7 +694,7 @@ SDeviceChangedEvent(xXIDeviceChangedEvent* from, xXIDeviceChangedEvent* to)
swaps(&any->length); swaps(&any->length);
swaps(&any->sourceid); swaps(&any->sourceid);
any = (xXIAnyInfo*)((char*)any + length * 4); any = (xXIAnyInfo *) ((char *) any + length * 4);
} }
swaps(&to->sequenceNumber); swaps(&to->sequenceNumber);
@ -708,7 +707,8 @@ SDeviceChangedEvent(xXIDeviceChangedEvent* from, xXIDeviceChangedEvent* to)
} }
static void SDeviceEvent(xXIDeviceEvent *from, xXIDeviceEvent *to) static void
SDeviceEvent(xXIDeviceEvent * from, xXIDeviceEvent * to)
{ {
int i; int i;
char *ptr; char *ptr;
@ -738,24 +738,22 @@ static void SDeviceEvent(xXIDeviceEvent *from, xXIDeviceEvent *to)
swapl(&to->mods.effective_mods); swapl(&to->mods.effective_mods);
swapl(&to->flags); swapl(&to->flags);
ptr = (char*)(&to[1]); ptr = (char *) (&to[1]);
ptr += from->buttons_len * 4; ptr += from->buttons_len * 4;
vmask = ptr; /* valuator mask */ vmask = ptr; /* valuator mask */
ptr += from->valuators_len * 4; ptr += from->valuators_len * 4;
for (i = 0; i < from->valuators_len * 32; i++) for (i = 0; i < from->valuators_len * 32; i++) {
{ if (BitIsOn(vmask, i)) {
if (BitIsOn(vmask, i)) swapl(((uint32_t *) ptr));
{
swapl(((uint32_t *)ptr));
ptr += 4; ptr += 4;
swapl(((uint32_t *)ptr)); swapl(((uint32_t *) ptr));
ptr += 4; ptr += 4;
} }
} }
} }
static void SDeviceHierarchyEvent(xXIHierarchyEvent *from, static void
xXIHierarchyEvent *to) SDeviceHierarchyEvent(xXIHierarchyEvent * from, xXIHierarchyEvent * to)
{ {
int i; int i;
xXIHierarchyInfo *info; xXIHierarchyInfo *info;
@ -770,16 +768,16 @@ static void SDeviceHierarchyEvent(xXIHierarchyEvent *from,
swapl(&to->flags); swapl(&to->flags);
swaps(&to->num_info); swaps(&to->num_info);
info = (xXIHierarchyInfo*)&to[1]; info = (xXIHierarchyInfo *) & to[1];
for (i = 0; i< from->num_info; i++) for (i = 0; i < from->num_info; i++) {
{
swaps(&info->deviceid); swaps(&info->deviceid);
swaps(&info->attachment); swaps(&info->attachment);
info++; info++;
} }
} }
static void SXIPropertyEvent(xXIPropertyEvent *from, xXIPropertyEvent *to) static void
SXIPropertyEvent(xXIPropertyEvent * from, xXIPropertyEvent * to)
{ {
*to = *from; *to = *from;
swaps(&to->sequenceNumber); swaps(&to->sequenceNumber);
@ -789,7 +787,8 @@ static void SXIPropertyEvent(xXIPropertyEvent *from, xXIPropertyEvent *to)
swapl(&to->property); swapl(&to->property);
} }
static void SRawEvent(xXIRawEvent *from, xXIRawEvent *to) static void
SRawEvent(xXIRawEvent * from, xXIRawEvent * to)
{ {
int i; int i;
FP3232 *values; FP3232 *values;
@ -804,14 +803,11 @@ static void SRawEvent(xXIRawEvent *from, xXIRawEvent *to)
swapl(&to->time); swapl(&to->time);
swapl(&to->detail); swapl(&to->detail);
mask = (unsigned char *) &to[1];
values = (FP3232 *) (mask + from->valuators_len * 4);
mask = (unsigned char*)&to[1]; for (i = 0; i < from->valuators_len * 4 * 8; i++) {
values = (FP3232*)(mask + from->valuators_len * 4); if (BitIsOn(mask, i)) {
for (i = 0; i < from->valuators_len * 4 * 8; i++)
{
if (BitIsOn(mask, i))
{
/* for each bit set there are two FP3232 values on the wire, in /* for each bit set there are two FP3232 values on the wire, in
* the order abcABC for data and data_raw. Here we swap as if * the order abcABC for data and data_raw. Here we swap as if
* they were in aAbBcC order because it's easier and really * they were in aAbBcC order because it's easier and really
@ -829,8 +825,8 @@ static void SRawEvent(xXIRawEvent *from, xXIRawEvent *to)
swaps(&to->valuators_len); swaps(&to->valuators_len);
} }
static void STouchOwnershipEvent(xXITouchOwnershipEvent *from, static void
xXITouchOwnershipEvent *to) STouchOwnershipEvent(xXITouchOwnershipEvent * from, xXITouchOwnershipEvent * to)
{ {
*to = *from; *to = *from;
swaps(&to->sequenceNumber); swaps(&to->sequenceNumber);
@ -850,24 +846,23 @@ static void STouchOwnershipEvent(xXITouchOwnershipEvent *from,
void void
XI2EventSwap(xGenericEvent *from, xGenericEvent *to) XI2EventSwap(xGenericEvent *from, xGenericEvent *to)
{ {
switch(from->evtype) switch (from->evtype) {
{
case XI_Enter: case XI_Enter:
case XI_Leave: case XI_Leave:
case XI_FocusIn: case XI_FocusIn:
case XI_FocusOut: case XI_FocusOut:
SDeviceLeaveNotifyEvent((xXILeaveEvent*)from, (xXILeaveEvent*)to); SDeviceLeaveNotifyEvent((xXILeaveEvent *) from, (xXILeaveEvent *) to);
break; break;
case XI_DeviceChanged: case XI_DeviceChanged:
SDeviceChangedEvent((xXIDeviceChangedEvent*)from, SDeviceChangedEvent((xXIDeviceChangedEvent *) from,
(xXIDeviceChangedEvent*)to); (xXIDeviceChangedEvent *) to);
break; break;
case XI_HierarchyChanged: case XI_HierarchyChanged:
SDeviceHierarchyEvent((xXIHierarchyEvent*)from, (xXIHierarchyEvent*)to); SDeviceHierarchyEvent((xXIHierarchyEvent *) from,
(xXIHierarchyEvent *) to);
break; break;
case XI_PropertyEvent: case XI_PropertyEvent:
SXIPropertyEvent((xXIPropertyEvent*)from, SXIPropertyEvent((xXIPropertyEvent *) from, (xXIPropertyEvent *) to);
(xXIPropertyEvent*)to);
break; break;
case XI_Motion: case XI_Motion:
case XI_KeyPress: case XI_KeyPress:
@ -877,11 +872,11 @@ XI2EventSwap(xGenericEvent *from, xGenericEvent *to)
case XI_TouchBegin: case XI_TouchBegin:
case XI_TouchUpdate: case XI_TouchUpdate:
case XI_TouchEnd: case XI_TouchEnd:
SDeviceEvent((xXIDeviceEvent*)from, (xXIDeviceEvent*)to); SDeviceEvent((xXIDeviceEvent *) from, (xXIDeviceEvent *) to);
break; break;
case XI_TouchOwnership: case XI_TouchOwnership:
STouchOwnershipEvent((xXITouchOwnershipEvent*)from, STouchOwnershipEvent((xXITouchOwnershipEvent *) from,
(xXITouchOwnershipEvent*)to); (xXITouchOwnershipEvent *) to);
break; break;
case XI_RawMotion: case XI_RawMotion:
case XI_RawKeyPress: case XI_RawKeyPress:
@ -891,7 +886,7 @@ XI2EventSwap(xGenericEvent *from, xGenericEvent *to)
case XI_RawTouchBegin: case XI_RawTouchBegin:
case XI_RawTouchUpdate: case XI_RawTouchUpdate:
case XI_RawTouchEnd: case XI_RawTouchEnd:
SRawEvent((xXIRawEvent*)from, (xXIRawEvent*)to); SRawEvent((xXIRawEvent *) from, (xXIRawEvent *) to);
break; break;
default: default:
ErrorF("[Xi] Unknown event type to swap. This is a bug.\n"); ErrorF("[Xi] Unknown event type to swap. This is a bug.\n");
@ -1078,8 +1073,7 @@ RestoreExtensionEvents(void)
IEventBase = 0; IEventBase = 0;
for (i = 0; i < ExtEventIndex - 1; i++) { for (i = 0; i < ExtEventIndex - 1; i++) {
if ((EventInfo[i].type >= LASTEvent) && (EventInfo[i].type < 128)) if ((EventInfo[i].type >= LASTEvent) && (EventInfo[i].type < 128)) {
{
for (j = 0; j < MAXDEVICES; j++) for (j = 0; j < MAXDEVICES; j++)
SetMaskForEvent(j, 0, EventInfo[i].type); SetMaskForEvent(j, 0, EventInfo[i].type);
} }
@ -1145,7 +1139,6 @@ IResetProc(ExtensionEntry * unused)
RestoreExtensionEvents(); RestoreExtensionEvents();
} }
/*********************************************************************** /***********************************************************************
* *
* Assign an id and type to an input device. * Assign an id and type to an input device.
@ -1184,7 +1177,7 @@ MakeDeviceTypeAtoms(void)
#define DO_SWAP(func,type) func ((type *)from, (type *)to) #define DO_SWAP(func,type) func ((type *)from, (type *)to)
static void static void
SEventIDispatch(xEvent * from, xEvent * to) SEventIDispatch(xEvent *from, xEvent *to)
{ {
int type = from->u.u.type & 0177; int type = from->u.u.type & 0177;
@ -1193,29 +1186,36 @@ SEventIDispatch(xEvent * from, xEvent * to)
else if (type == DeviceKeyPress) { else if (type == DeviceKeyPress) {
SKeyButtonPtrEvent(from, to); SKeyButtonPtrEvent(from, to);
to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1; to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1;
} else if (type == DeviceKeyRelease) { }
else if (type == DeviceKeyRelease) {
SKeyButtonPtrEvent(from, to); SKeyButtonPtrEvent(from, to);
to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1; to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1;
} else if (type == DeviceButtonPress) { }
else if (type == DeviceButtonPress) {
SKeyButtonPtrEvent(from, to); SKeyButtonPtrEvent(from, to);
to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1; to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1;
} else if (type == DeviceButtonRelease) { }
else if (type == DeviceButtonRelease) {
SKeyButtonPtrEvent(from, to); SKeyButtonPtrEvent(from, to);
to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1; to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1;
} else if (type == DeviceMotionNotify) { }
else if (type == DeviceMotionNotify) {
SKeyButtonPtrEvent(from, to); SKeyButtonPtrEvent(from, to);
to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1; to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1;
} else if (type == DeviceFocusIn) }
else if (type == DeviceFocusIn)
DO_SWAP(SEventFocus, deviceFocus); DO_SWAP(SEventFocus, deviceFocus);
else if (type == DeviceFocusOut) else if (type == DeviceFocusOut)
DO_SWAP(SEventFocus, deviceFocus); DO_SWAP(SEventFocus, deviceFocus);
else if (type == ProximityIn) { else if (type == ProximityIn) {
SKeyButtonPtrEvent(from, to); SKeyButtonPtrEvent(from, to);
to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1; to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1;
} else if (type == ProximityOut) { }
else if (type == ProximityOut) {
SKeyButtonPtrEvent(from, to); SKeyButtonPtrEvent(from, to);
to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1; to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1;
} else if (type == DeviceStateNotify) }
else if (type == DeviceStateNotify)
DO_SWAP(SDeviceStateNotifyEvent, deviceStateNotify); DO_SWAP(SDeviceStateNotifyEvent, deviceStateNotify);
else if (type == DeviceKeyStateNotify) else if (type == DeviceKeyStateNotify)
DO_SWAP(SDeviceKeyStateNotifyEvent, deviceKeyStateNotify); DO_SWAP(SDeviceKeyStateNotifyEvent, deviceKeyStateNotify);
@ -1250,12 +1250,14 @@ void
XInputExtensionInit(void) XInputExtensionInit(void)
{ {
ExtensionEntry *extEntry; ExtensionEntry *extEntry;
XExtensionVersion thisversion = { XI_Present, XExtensionVersion thisversion = { XI_Present,
SERVER_XI_MAJOR_VERSION, SERVER_XI_MAJOR_VERSION,
SERVER_XI_MINOR_VERSION, SERVER_XI_MINOR_VERSION,
}; };
if (!dixRegisterPrivateKey(&XIClientPrivateKeyRec, PRIVATE_CLIENT, sizeof(XIClientRec))) if (!dixRegisterPrivateKey
(&XIClientPrivateKeyRec, PRIVATE_CLIENT, sizeof(XIClientRec)))
FatalError("Cannot request private for XI.\n"); FatalError("Cannot request private for XI.\n");
if (!AddCallback(&ClientStateCallback, XIClientCallback, 0)) if (!AddCallback(&ClientStateCallback, XIClientCallback, 0))
@ -1293,7 +1295,6 @@ XInputExtensionInit(void)
GERegisterExtension(IReqCode, XI2EventSwap); GERegisterExtension(IReqCode, XI2EventSwap);
memset(&xi_all_devices, 0, sizeof(xi_all_devices)); memset(&xi_all_devices, 0, sizeof(xi_all_devices));
memset(&xi_all_master_devices, 0, sizeof(xi_all_master_devices)); memset(&xi_all_master_devices, 0, sizeof(xi_all_master_devices));
xi_all_devices.id = XIAllDevices; xi_all_devices.id = XIAllDevices;
@ -1305,8 +1306,8 @@ XInputExtensionInit(void)
inputInfo.all_master_devices = &xi_all_master_devices; inputInfo.all_master_devices = &xi_all_master_devices;
XIResetProperties(); XIResetProperties();
} else { }
else {
FatalError("IExtensionInit: AddExtensions failed\n"); FatalError("IExtensionInit: AddExtensions failed\n");
} }
} }

View File

@ -109,7 +109,7 @@ ProcXGetDeviceButtonMapping(ClientPtr client)
rep.nElts = b->numButtons; rep.nElts = b->numButtons;
rep.length = bytes_to_int32(rep.nElts); rep.length = bytes_to_int32(rep.nElts);
WriteReplyToClient(client, sizeof(xGetDeviceButtonMappingReply), &rep); WriteReplyToClient(client, sizeof(xGetDeviceButtonMappingReply), &rep);
(void)WriteToClient(client, rep.nElts, (char *)&b->map[1]); (void) WriteToClient(client, rep.nElts, (char *) &b->map[1]);
return Success; return Success;
} }
@ -126,5 +126,5 @@ SRepXGetDeviceButtonMapping(ClientPtr client, int size,
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -97,7 +97,7 @@ CopySwapDeviceResolution(ClientPtr client, ValuatorClassPtr v, char *buf,
r->length = length; r->length = length;
r->num_valuators = v->numAxes; r->num_valuators = v->numAxes;
buf += sizeof(xDeviceResolutionState); buf += sizeof(xDeviceResolutionState);
iptr = (int *)buf; iptr = (int *) buf;
for (i = 0, a = v->axes; i < v->numAxes; i++, a++) for (i = 0, a = v->axes; i < v->numAxes; i++, a++)
*iptr++ = a->resolution; *iptr++ = a->resolution;
for (i = 0, a = v->axes; i < v->numAxes; i++, a++) for (i = 0, a = v->axes; i < v->numAxes; i++, a++)
@ -108,14 +108,15 @@ CopySwapDeviceResolution(ClientPtr client, ValuatorClassPtr v, char *buf,
swaps(&r->control); swaps(&r->control);
swaps(&r->length); swaps(&r->length);
swapl(&r->num_valuators); swapl(&r->num_valuators);
iptr = (int *)buf; iptr = (int *) buf;
for (i = 0; i < (3 * v->numAxes); i++, iptr++) { for (i = 0; i < (3 * v->numAxes); i++, iptr++) {
swapl(iptr); swapl(iptr);
} }
} }
} }
static void CopySwapDeviceCore (ClientPtr client, DeviceIntPtr dev, char *buf) static void
CopySwapDeviceCore(ClientPtr client, DeviceIntPtr dev, char *buf)
{ {
xDeviceCoreState *c = (xDeviceCoreState *) buf; xDeviceCoreState *c = (xDeviceCoreState *) buf;
@ -130,7 +131,8 @@ static void CopySwapDeviceCore (ClientPtr client, DeviceIntPtr dev, char *buf)
} }
} }
static void CopySwapDeviceEnable (ClientPtr client, DeviceIntPtr dev, char *buf) static void
CopySwapDeviceEnable(ClientPtr client, DeviceIntPtr dev, char *buf)
{ {
xDeviceEnableState *e = (xDeviceEnableState *) buf; xDeviceEnableState *e = (xDeviceEnableState *) buf;
@ -156,7 +158,7 @@ SRepXGetDeviceControl(ClientPtr client, int size, xGetDeviceControlReply * rep)
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }
/*********************************************************************** /***********************************************************************
@ -205,7 +207,7 @@ ProcXGetDeviceControl(ClientPtr client)
return BadValue; return BadValue;
} }
buf = (char *)malloc(total_length); buf = (char *) malloc(total_length);
if (!buf) if (!buf)
return BadAlloc; return BadAlloc;
savbuf = buf; savbuf = buf;

View File

@ -265,7 +265,7 @@ SRepXGetFeedbackControl(ClientPtr client, int size,
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
swaps(&rep->num_feedbacks); swaps(&rep->num_feedbacks);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }
/*********************************************************************** /***********************************************************************
@ -330,7 +330,7 @@ ProcXGetFeedbackControl(ClientPtr client)
if (total_length == 0) if (total_length == 0)
return BadMatch; return BadMatch;
buf = (char *)malloc(total_length); buf = (char *) malloc(total_length);
if (!buf) if (!buf)
return BadAlloc; return BadAlloc;
savbuf = buf; savbuf = buf;

View File

@ -135,5 +135,5 @@ SRepXGetDeviceFocus(ClientPtr client, int size, xGetDeviceFocusReply * rep)
swapl(&rep->length); swapl(&rep->length);
swapl(&rep->focus); swapl(&rep->focus);
swapl(&rep->time); swapl(&rep->time);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -150,5 +150,5 @@ SRepXGetDeviceKeyMapping(ClientPtr client, int size,
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -129,5 +129,5 @@ SRepXGetDeviceModifierMapping(ClientPtr client, int size,
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -113,8 +113,7 @@ ProcXGetDeviceDontPropagateList(ClientPtr client)
if ((others = wOtherInputMasks(pWin)) != 0) { if ((others = wOtherInputMasks(pWin)) != 0) {
for (i = 0; i < EMASKSIZE; i++) for (i = 0; i < EMASKSIZE; i++)
ClassFromMask(NULL, others->dontPropagateMask[i], i, ClassFromMask(NULL, others->dontPropagateMask[i], i, &count, COUNT);
&count, COUNT);
if (count) { if (count) {
rep.count = count; rep.count = count;
buf = (XEventClass *) malloc(rep.count * sizeof(XEventClass)); buf = (XEventClass *) malloc(rep.count * sizeof(XEventClass));
@ -145,7 +144,7 @@ ProcXGetDeviceDontPropagateList(ClientPtr client)
*/ */
XEventClass XEventClass
* ClassFromMask(XEventClass * buf, Mask mask, int maskndx, CARD16 * count, * ClassFromMask(XEventClass * buf, Mask mask, int maskndx, CARD16 *count,
int mode) int mode)
{ {
int i, j; int i, j;
@ -179,5 +178,5 @@ SRepXGetDeviceDontPropagateList(ClientPtr client, int size,
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
swaps(&rep->count); swaps(&rep->count);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -170,5 +170,5 @@ SRepXGetSelectedExtensionEvents(ClientPtr client, int size,
swapl(&rep->length); swapl(&rep->length);
swaps(&rep->this_client_count); swaps(&rep->this_client_count);
swaps(&rep->all_clients_count); swaps(&rep->all_clients_count);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -127,5 +127,5 @@ SRepXGetExtensionVersion(ClientPtr client, int size,
swapl(&rep->length); swapl(&rep->length);
swaps(&rep->major_version); swaps(&rep->major_version);
swaps(&rep->minor_version); swaps(&rep->minor_version);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -82,7 +82,8 @@ SProcXGrabDevice(ClientPtr client)
swapl(&stuff->time); swapl(&stuff->time);
swaps(&stuff->event_count); swaps(&stuff->event_count);
if (stuff->length != bytes_to_int32(sizeof(xGrabDeviceReq)) + stuff->event_count) if (stuff->length !=
bytes_to_int32(sizeof(xGrabDeviceReq)) + stuff->event_count)
return BadLength; return BadLength;
SwapLongs((CARD32 *) (&stuff[1]), stuff->event_count); SwapLongs((CARD32 *) (&stuff[1]), stuff->event_count);
@ -108,7 +109,8 @@ ProcXGrabDevice(ClientPtr client)
REQUEST(xGrabDeviceReq); REQUEST(xGrabDeviceReq);
REQUEST_AT_LEAST_SIZE(xGrabDeviceReq); REQUEST_AT_LEAST_SIZE(xGrabDeviceReq);
if (stuff->length != bytes_to_int32(sizeof(xGrabDeviceReq)) + stuff->event_count) if (stuff->length !=
bytes_to_int32(sizeof(xGrabDeviceReq)) + stuff->event_count)
return BadLength; return BadLength;
rep.repType = X_Reply; rep.repType = X_Reply;
@ -130,8 +132,7 @@ ProcXGrabDevice(ClientPtr client)
rc = GrabDevice(client, dev, stuff->other_devices_mode, rc = GrabDevice(client, dev, stuff->other_devices_mode,
stuff->this_device_mode, stuff->grabWindow, stuff->this_device_mode, stuff->grabWindow,
stuff->ownerEvents, stuff->time, stuff->ownerEvents, stuff->time,
&mask, XI, None, None, &mask, XI, None, None, &rep.status);
&rep.status);
if (rc != Success) if (rc != Success)
return rc; return rc;
@ -210,5 +211,5 @@ SRepXGrabDevice(ClientPtr client, int size, xGrabDeviceReply * rep)
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -122,7 +122,8 @@ ProcXGrabDeviceButton(ClientPtr client)
return ret; return ret;
if (mdev->key == NULL) if (mdev->key == NULL)
return BadMatch; return BadMatch;
} else { }
else {
mdev = PickKeyboard(client); mdev = PickKeyboard(client);
ret = XaceHook(XACE_DEVICE_ACCESS, client, mdev, DixUseAccess); ret = XaceHook(XACE_DEVICE_ACCESS, client, mdev, DixUseAccess);
if (ret != Success) if (ret != Success)
@ -145,8 +146,7 @@ ProcXGrabDeviceButton(ClientPtr client)
param.modifiers = stuff->modifiers; param.modifiers = stuff->modifiers;
mask.xi = tmp[stuff->grabbed_device].mask; mask.xi = tmp[stuff->grabbed_device].mask;
ret = GrabButton(client, dev, mdev, stuff->button, &param, ret = GrabButton(client, dev, mdev, stuff->button, &param, XI, &mask);
XI, &mask);
return ret; return ret;
} }

View File

@ -105,7 +105,8 @@ ProcXGrabDeviceKey(ClientPtr client)
REQUEST(xGrabDeviceKeyReq); REQUEST(xGrabDeviceKeyReq);
REQUEST_AT_LEAST_SIZE(xGrabDeviceKeyReq); REQUEST_AT_LEAST_SIZE(xGrabDeviceKeyReq);
if (stuff->length != bytes_to_int32(sizeof(xGrabDeviceKeyReq)) + stuff->event_count) if (stuff->length !=
bytes_to_int32(sizeof(xGrabDeviceKeyReq)) + stuff->event_count)
return BadLength; return BadLength;
ret = dixLookupDevice(&dev, stuff->grabbed_device, client, DixGrabAccess); ret = dixLookupDevice(&dev, stuff->grabbed_device, client, DixGrabAccess);
@ -119,7 +120,8 @@ ProcXGrabDeviceKey(ClientPtr client)
return ret; return ret;
if (mdev->key == NULL) if (mdev->key == NULL)
return BadMatch; return BadMatch;
} else { }
else {
mdev = PickKeyboard(client); mdev = PickKeyboard(client);
ret = XaceHook(XACE_DEVICE_ACCESS, client, mdev, DixUseAccess); ret = XaceHook(XACE_DEVICE_ACCESS, client, mdev, DixUseAccess);
if (ret != Success) if (ret != Success)
@ -133,7 +135,6 @@ ProcXGrabDeviceKey(ClientPtr client)
X_GrabDeviceKey)) != Success) X_GrabDeviceKey)) != Success)
return ret; return ret;
memset(&param, 0, sizeof(param)); memset(&param, 0, sizeof(param));
param.grabtype = XI; param.grabtype = XI;
param.ownerEvents = stuff->ownerEvents; param.ownerEvents = stuff->ownerEvents;

View File

@ -129,7 +129,7 @@ ProcXGetDeviceMotionEvents(ClientPtr client)
num_events = v->numMotionEvents; num_events = v->numMotionEvents;
if (num_events) { if (num_events) {
size = sizeof(Time) + (axes * sizeof(INT32)); size = sizeof(Time) + (axes * sizeof(INT32));
rep.nEvents = GetMotionHistory(dev, (xTimecoord **) &coords,/* XXX */ rep.nEvents = GetMotionHistory(dev, (xTimecoord **) & coords, /* XXX */
start.milliseconds, stop.milliseconds, start.milliseconds, stop.milliseconds,
(ScreenPtr) NULL, FALSE); (ScreenPtr) NULL, FALSE);
} }
@ -147,7 +147,7 @@ ProcXGetDeviceMotionEvents(ClientPtr client)
bufptr++; bufptr++;
} }
} }
WriteToClient(client, length * 4, (char *)coords); WriteToClient(client, length * 4, (char *) coords);
} }
free(coords); free(coords);
return Success; return Success;
@ -167,5 +167,5 @@ SRepXGetDeviceMotionEvents(ClientPtr client, int size,
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
swapl(&rep->nEvents); swapl(&rep->nEvents);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -68,7 +68,6 @@ SOFTWARE.
#include "listdev.h" #include "listdev.h"
/*********************************************************************** /***********************************************************************
* *
* This procedure lists the input devices available to the server. * This procedure lists the input devices available to the server.
@ -103,7 +102,7 @@ SizeDeviceInfo(DeviceIntPtr d, int *namesize, int *size)
if (d->button != NULL) if (d->button != NULL)
*size += sizeof(xButtonInfo); *size += sizeof(xButtonInfo);
if (d->valuator != NULL) { if (d->valuator != NULL) {
chunks = ((int)d->valuator->numAxes + 19) / VPC; chunks = ((int) d->valuator->numAxes + 19) / VPC;
*size += (chunks * sizeof(xValuatorInfo) + *size += (chunks * sizeof(xValuatorInfo) +
d->valuator->numAxes * sizeof(xAxisInfo)); d->valuator->numAxes * sizeof(xAxisInfo));
} }
@ -122,13 +121,14 @@ SizeDeviceInfo(DeviceIntPtr d, int *namesize, int *size)
static void static void
CopyDeviceName(char **namebuf, char *name) CopyDeviceName(char **namebuf, char *name)
{ {
char *nameptr = (char *)*namebuf; char *nameptr = (char *) *namebuf;
if (name) { if (name) {
*nameptr++ = strlen(name); *nameptr++ = strlen(name);
strcpy(nameptr, name); strcpy(nameptr, name);
*namebuf += (strlen(name) + 1); *namebuf += (strlen(name) + 1);
} else { }
else {
*nameptr++ = 0; *nameptr++ = 0;
*namebuf += 1; *namebuf += 1;
} }
@ -162,8 +162,7 @@ CopySwapButtonClass(ClientPtr client, ButtonClassPtr b, char **buf)
*/ */
static void static void
CopySwapDevice(ClientPtr client, DeviceIntPtr d, int num_classes, CopySwapDevice(ClientPtr client, DeviceIntPtr d, int num_classes, char **buf)
char **buf)
{ {
xDeviceInfoPtr dev; xDeviceInfoPtr dev;
@ -269,7 +268,7 @@ CopySwapValuatorClass(ClientPtr client, DeviceIntPtr dev, char **buf)
static void static void
CopySwapClasses(ClientPtr client, DeviceIntPtr dev, CARD8 *num_classes, CopySwapClasses(ClientPtr client, DeviceIntPtr dev, CARD8 *num_classes,
char** classbuf) char **classbuf)
{ {
if (dev->key != NULL) { if (dev->key != NULL) {
CopySwapKeyClass(client, dev->key, classbuf); CopySwapKeyClass(client, dev->key, classbuf);
@ -280,8 +279,7 @@ CopySwapClasses(ClientPtr client, DeviceIntPtr dev, CARD8 *num_classes,
(*num_classes)++; (*num_classes)++;
} }
if (dev->valuator != NULL) { if (dev->valuator != NULL) {
(*num_classes) += (*num_classes) += CopySwapValuatorClass(client, dev, classbuf);
CopySwapValuatorClass(client, dev, classbuf);
} }
} }
@ -310,16 +308,15 @@ static Bool
ShouldSkipDevice(ClientPtr client, DeviceIntPtr d) ShouldSkipDevice(ClientPtr client, DeviceIntPtr d)
{ {
/* don't send master devices other than VCP/VCK */ /* don't send master devices other than VCP/VCK */
if (!IsMaster(d) || d == inputInfo.pointer || d == inputInfo.keyboard) if (!IsMaster(d) || d == inputInfo.pointer ||d == inputInfo.keyboard) {
{
int rc = XaceHook(XACE_DEVICE_ACCESS, client, d, DixGetAttrAccess); int rc = XaceHook(XACE_DEVICE_ACCESS, client, d, DixGetAttrAccess);
if (rc == Success) if (rc == Success)
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
} }
/*********************************************************************** /***********************************************************************
* *
* This procedure lists the input devices available to the server. * This procedure lists the input devices available to the server.
@ -378,7 +375,7 @@ ProcXListInputDevices(ClientPtr client)
/* allocate space for reply */ /* allocate space for reply */
total_length = numdevs * sizeof(xDeviceInfo) + size + namesize; total_length = numdevs * sizeof(xDeviceInfo) + size + namesize;
devbuf = (char *)calloc(1, total_length); devbuf = (char *) calloc(1, total_length);
classbuf = devbuf + (numdevs * sizeof(xDeviceInfo)); classbuf = devbuf + (numdevs * sizeof(xDeviceInfo));
namebuf = classbuf + size; namebuf = classbuf + size;
savbuf = devbuf; savbuf = devbuf;
@ -420,5 +417,5 @@ SRepXListInputDevices(ClientPtr client, int size, xListInputDevicesReply * rep)
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -107,7 +107,8 @@ ProcXOpenDevice(ClientPtr client)
break; break;
if (dev == NULL) if (dev == NULL)
return BadDevice; return BadDevice;
} else if (status != Success) }
else if (status != Success)
return status; return status;
if (IsMaster(dev)) if (IsMaster(dev))
@ -150,7 +151,7 @@ ProcXOpenDevice(ClientPtr client)
rep.length = bytes_to_int32(j * sizeof(xInputClassInfo)); rep.length = bytes_to_int32(j * sizeof(xInputClassInfo));
rep.num_classes = j; rep.num_classes = j;
WriteReplyToClient(client, sizeof(xOpenDeviceReply), &rep); WriteReplyToClient(client, sizeof(xOpenDeviceReply), &rep);
WriteToClient(client, j * sizeof(xInputClassInfo), (char *)evbase); WriteToClient(client, j * sizeof(xInputClassInfo), (char *) evbase);
return Success; return Success;
} }
@ -166,5 +167,5 @@ SRepXOpenDevice(ClientPtr client, int size, xOpenDeviceReply * rep)
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -116,7 +116,7 @@ ProcXQueryDeviceState(ClientPtr client)
total_length += (sizeof(xValuatorState) + (v->numAxes * sizeof(int))); total_length += (sizeof(xValuatorState) + (v->numAxes * sizeof(int)));
num_classes++; num_classes++;
} }
buf = (char *)calloc(total_length, 1); buf = (char *) calloc(total_length, 1);
if (!buf) if (!buf)
return BadAlloc; return BadAlloc;
savbuf = buf; savbuf = buf;
@ -149,14 +149,15 @@ ProcXQueryDeviceState(ClientPtr client)
tv->length = sizeof(xValuatorState) + v->numAxes * 4; tv->length = sizeof(xValuatorState) + v->numAxes * 4;
tv->num_valuators = v->numAxes; tv->num_valuators = v->numAxes;
tv->mode = valuator_get_mode(dev, 0); tv->mode = valuator_get_mode(dev, 0);
tv->mode |= (dev->proximity && !dev->proximity->in_proximity) ? OutOfProximity : 0; tv->mode |= (dev->proximity &&
!dev->proximity->in_proximity) ? OutOfProximity : 0;
buf += sizeof(xValuatorState); buf += sizeof(xValuatorState);
for (i = 0, values = v->axisVal; i < v->numAxes; i++) { for (i = 0, values = v->axisVal; i < v->numAxes; i++) {
if (rc != BadAccess) if (rc != BadAccess)
*((int *)buf) = *values; *((int *) buf) = *values;
values++; values++;
if (client->swapped) { if (client->swapped) {
swapl((int *)buf); swapl((int *) buf);
} }
buf += sizeof(int); buf += sizeof(int);
} }
@ -183,5 +184,5 @@ SRepXQueryDeviceState(ClientPtr client, int size, xQueryDeviceStateReply * rep)
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -50,7 +50,6 @@ SOFTWARE.
* *
*/ */
#ifdef HAVE_DIX_CONFIG_H #ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h> #include <dix-config.h>
#endif #endif
@ -70,7 +69,7 @@ extern Mask ExtExclusiveMasks[];
static int static int
HandleDevicePresenceMask(ClientPtr client, WindowPtr win, HandleDevicePresenceMask(ClientPtr client, WindowPtr win,
XEventClass *cls, CARD16 *count) XEventClass * cls, CARD16 *count)
{ {
int i, j; int i, j;
Mask mask; Mask mask;
@ -106,7 +105,7 @@ HandleDevicePresenceMask(ClientPtr client, WindowPtr win,
/* We always only use mksidx = AllDevices for events not bound to /* We always only use mksidx = AllDevices for events not bound to
* devices */ * devices */
if (AddExtensionClient (win, client, mask, XIAllDevices) != Success) if (AddExtensionClient(win, client, mask, XIAllDevices) != Success)
return BadAlloc; return BadAlloc;
RecalculateDeviceDeliverableEvents(win); RecalculateDeviceDeliverableEvents(win);
@ -128,8 +127,7 @@ SProcXSelectExtensionEvent(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xSelectExtensionEventReq); REQUEST_AT_LEAST_SIZE(xSelectExtensionEventReq);
swapl(&stuff->window); swapl(&stuff->window);
swaps(&stuff->count); swaps(&stuff->count);
REQUEST_FIXED_SIZE(xSelectExtensionEventReq, REQUEST_FIXED_SIZE(xSelectExtensionEventReq, stuff->count * sizeof(CARD32));
stuff->count * sizeof(CARD32));
SwapLongs((CARD32 *) (&stuff[1]), stuff->count); SwapLongs((CARD32 *) (&stuff[1]), stuff->count);
return (ProcXSelectExtensionEvent(client)); return (ProcXSelectExtensionEvent(client));
@ -152,7 +150,8 @@ ProcXSelectExtensionEvent(ClientPtr client)
REQUEST(xSelectExtensionEventReq); REQUEST(xSelectExtensionEventReq);
REQUEST_AT_LEAST_SIZE(xSelectExtensionEventReq); REQUEST_AT_LEAST_SIZE(xSelectExtensionEventReq);
if (stuff->length != bytes_to_int32(sizeof(xSelectExtensionEventReq)) + stuff->count) if (stuff->length !=
bytes_to_int32(sizeof(xSelectExtensionEventReq)) + stuff->count)
return BadLength; return BadLength;
ret = dixLookupWindow(&pWin, stuff->window, client, DixReceiveAccess); ret = dixLookupWindow(&pWin, stuff->window, client, DixReceiveAccess);
@ -176,7 +175,7 @@ ProcXSelectExtensionEvent(ClientPtr client)
} }
if ((ret = if ((ret =
SelectForWindow((DeviceIntPtr) tmp[i].dev, pWin, client, SelectForWindow((DeviceIntPtr) tmp[i].dev, pWin, client,
tmp[i].mask, ExtExclusiveMasks[i]))!= Success) tmp[i].mask, ExtExclusiveMasks[i])) != Success)
return ret; return ret;
} }

View File

@ -88,11 +88,12 @@ SProcXSendExtensionEvent(ClientPtr client)
swapl(&stuff->destination); swapl(&stuff->destination);
swaps(&stuff->count); swaps(&stuff->count);
if (stuff->length != bytes_to_int32(sizeof(xSendExtensionEventReq)) + stuff->count + if (stuff->length !=
bytes_to_int32(sizeof(xSendExtensionEventReq)) + stuff->count +
bytes_to_int32(stuff->num_events * sizeof(xEvent))) bytes_to_int32(stuff->num_events * sizeof(xEvent)))
return BadLength; return BadLength;
eventP = (xEvent *) & stuff[1]; eventP = (xEvent *) &stuff[1];
for (i = 0; i < stuff->num_events; i++, eventP++) { for (i = 0; i < stuff->num_events; i++, eventP++) {
proc = EventSwapVector[eventP->u.u.type & 0177]; proc = EventSwapVector[eventP->u.u.type & 0177];
if (proc == NotImplemented) /* no swapping proc; invalid event type? */ if (proc == NotImplemented) /* no swapping proc; invalid event type? */
@ -101,7 +102,7 @@ SProcXSendExtensionEvent(ClientPtr client)
*eventP = eventT; *eventP = eventT;
} }
p = (CARD32 *)(((xEvent *) & stuff[1]) + stuff->num_events); p = (CARD32 *) (((xEvent *) &stuff[1]) + stuff->num_events);
SwapLongs(p, stuff->count); SwapLongs(p, stuff->count);
return (ProcXSendExtensionEvent(client)); return (ProcXSendExtensionEvent(client));
} }
@ -125,7 +126,8 @@ ProcXSendExtensionEvent(ClientPtr client)
REQUEST(xSendExtensionEventReq); REQUEST(xSendExtensionEventReq);
REQUEST_AT_LEAST_SIZE(xSendExtensionEventReq); REQUEST_AT_LEAST_SIZE(xSendExtensionEventReq);
if (stuff->length != bytes_to_int32(sizeof(xSendExtensionEventReq)) + stuff->count + if (stuff->length !=
bytes_to_int32(sizeof(xSendExtensionEventReq)) + stuff->count +
(stuff->num_events * bytes_to_int32(sizeof(xEvent)))) (stuff->num_events * bytes_to_int32(sizeof(xEvent))))
return BadLength; return BadLength;
@ -135,7 +137,7 @@ ProcXSendExtensionEvent(ClientPtr client)
/* The client's event type must be one defined by an extension. */ /* The client's event type must be one defined by an extension. */
first = ((xEvent *) & stuff[1]); first = ((xEvent *) &stuff[1]);
if (!((EXTENSION_EVENT_BASE <= first->u.u.type) && if (!((EXTENSION_EVENT_BASE <= first->u.u.type) &&
(first->u.u.type < lastEvent))) { (first->u.u.type < lastEvent))) {
client->errorValue = first->u.u.type; client->errorValue = first->u.u.type;
@ -148,7 +150,7 @@ ProcXSendExtensionEvent(ClientPtr client)
return ret; return ret;
ret = (SendEvent(client, dev, stuff->destination, ret = (SendEvent(client, dev, stuff->destination,
stuff->propagate, (xEvent *) & stuff[1], stuff->propagate, (xEvent *) &stuff[1],
tmp[stuff->deviceid].mask, stuff->num_events)); tmp[stuff->deviceid].mask, stuff->num_events));
return ret; return ret;

View File

@ -106,7 +106,9 @@ ProcXSetDeviceButtonMapping(ClientPtr client)
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
rep.status = MappingSuccess; rep.status = MappingSuccess;
ret = ApplyPointerMapping(dev, (CARD8 *) &stuff[1], stuff->map_length, client); ret =
ApplyPointerMapping(dev, (CARD8 *) &stuff[1], stuff->map_length,
client);
if (ret == -1) if (ret == -1)
return BadValue; return BadValue;
else if (ret == MappingBusy) else if (ret == MappingBusy)
@ -132,5 +134,5 @@ SRepXSetDeviceButtonMapping(ClientPtr client, int size,
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -114,7 +114,7 @@ ProcXSetDeviceValuators(ClientPtr client)
if ((dev->deviceGrab.grab) && !SameClient(dev->deviceGrab.grab, client)) if ((dev->deviceGrab.grab) && !SameClient(dev->deviceGrab.grab, client))
rep.status = AlreadyGrabbed; rep.status = AlreadyGrabbed;
else else
rep.status = SetDeviceValuators(client, dev, (int *)&stuff[1], rep.status = SetDeviceValuators(client, dev, (int *) &stuff[1],
stuff->first_valuator, stuff->first_valuator,
stuff->num_valuators); stuff->num_valuators);
@ -138,5 +138,5 @@ SRepXSetDeviceValuators(ClientPtr client, int size,
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -140,5 +140,5 @@ SRepXSetDeviceModifierMapping(ClientPtr client, int size,
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -109,9 +109,8 @@ ProcXSetDeviceMode(ClientPtr client)
if (rep.status == Success) if (rep.status == Success)
valuator_set_mode(dev, VALUATOR_MODE_ALL_AXES, stuff->mode); valuator_set_mode(dev, VALUATOR_MODE_ALL_AXES, stuff->mode);
else if (rep.status != AlreadyGrabbed) else if (rep.status != AlreadyGrabbed) {
{ switch (rep.status) {
switch(rep.status) {
case BadMatch: case BadMatch:
case BadImplementation: case BadImplementation:
case BadAlloc: case BadAlloc:
@ -138,5 +137,5 @@ SRepXSetDeviceMode(ClientPtr client, int size, xSetDeviceModeReply * rep)
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -112,13 +112,11 @@ SetDeviceValuators(ClientPtr client, DeviceIntPtr dev,
*/ */
int int
ChangeDeviceControl(ClientPtr client, DeviceIntPtr dev, ChangeDeviceControl(ClientPtr client, DeviceIntPtr dev, xDeviceCtl * control)
xDeviceCtl * control)
{ {
return BadMatch; return BadMatch;
} }
/**************************************************************************** /****************************************************************************
* *
* Caller: configAddDevice (and others) * Caller: configAddDevice (and others)
@ -127,7 +125,7 @@ ChangeDeviceControl(ClientPtr client, DeviceIntPtr dev,
* *
*/ */
int int
NewInputDeviceRequest(InputOption *options, InputAttributes *attrs, NewInputDeviceRequest(InputOption *options, InputAttributes * attrs,
DeviceIntPtr *pdev) DeviceIntPtr *pdev)
{ {
return BadValue; return BadValue;

View File

@ -115,7 +115,8 @@ ProcXUngrabDeviceButton(ClientPtr client)
return BadDevice; return BadDevice;
if (mdev->key == NULL) if (mdev->key == NULL)
return BadMatch; return BadMatch;
} else }
else
mdev = PickKeyboard(client); mdev = PickKeyboard(client);
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixSetAttrAccess); rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixSetAttrAccess);

View File

@ -117,7 +117,8 @@ ProcXUngrabDeviceKey(ClientPtr client)
return BadDevice; return BadDevice;
if (mdev->key == NULL) if (mdev->key == NULL)
return BadMatch; return BadMatch;
} else }
else
mdev = PickKeyboard(client); mdev = PickKeyboard(client);
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixSetAttrAccess); rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixSetAttrAccess);

View File

@ -52,9 +52,9 @@ SProcXIAllowEvents(ClientPtr client)
swaps(&stuff->length); swaps(&stuff->length);
swaps(&stuff->deviceid); swaps(&stuff->deviceid);
swapl(&stuff->time); swapl(&stuff->time);
if (stuff->length > 3) if (stuff->length > 3) {
{ xXI2_2AllowEventsReq *req_xi22 = (xXI2_2AllowEventsReq *) stuff;
xXI2_2AllowEventsReq *req_xi22 = (xXI2_2AllowEventsReq*)stuff;
swapl(&req_xi22->touchid); swapl(&req_xi22->touchid);
swapl(&req_xi22->grab_window); swapl(&req_xi22->grab_window);
} }
@ -70,17 +70,17 @@ ProcXIAllowEvents(ClientPtr client)
int ret = Success; int ret = Success;
XIClientPtr xi_client; XIClientPtr xi_client;
Bool have_xi22 = FALSE; Bool have_xi22 = FALSE;
REQUEST(xXI2_2AllowEventsReq); REQUEST(xXI2_2AllowEventsReq);
xi_client = dixLookupPrivate(&client->devPrivates, XIClientPrivateKey); xi_client = dixLookupPrivate(&client->devPrivates, XIClientPrivateKey);
if (version_compare(xi_client->major_version, if (version_compare(xi_client->major_version,
xi_client->minor_version, 2, 2) >= 0) xi_client->minor_version, 2, 2) >= 0) {
{
REQUEST_AT_LEAST_SIZE(xXI2_2AllowEventsReq); REQUEST_AT_LEAST_SIZE(xXI2_2AllowEventsReq);
have_xi22 = TRUE; have_xi22 = TRUE;
} else }
{ else {
REQUEST_SIZE_MATCH(xXIAllowEventsReq); REQUEST_SIZE_MATCH(xXIAllowEventsReq);
} }
@ -136,4 +136,3 @@ ProcXIAllowEvents(ClientPtr client)
return ret; return ret;
} }

View File

@ -65,7 +65,8 @@ SProcXIChangeCursor(ClientPtr client)
return (ProcXIChangeCursor(client)); return (ProcXIChangeCursor(client));
} }
int ProcXIChangeCursor(ClientPtr client) int
ProcXIChangeCursor(ClientPtr client)
{ {
int rc; int rc;
WindowPtr pWin = NULL; WindowPtr pWin = NULL;
@ -82,23 +83,20 @@ int ProcXIChangeCursor(ClientPtr client)
if (!IsMaster(pDev) || !IsPointerDevice(pDev)) if (!IsMaster(pDev) || !IsPointerDevice(pDev))
return BadDevice; return BadDevice;
if (stuff->win != None) if (stuff->win != None) {
{
rc = dixLookupWindow(&pWin, stuff->win, client, DixSetAttrAccess); rc = dixLookupWindow(&pWin, stuff->win, client, DixSetAttrAccess);
if (rc != Success) if (rc != Success)
return rc; return rc;
} }
if (stuff->cursor == None) if (stuff->cursor == None) {
{
if (pWin == pWin->drawable.pScreen->root) if (pWin == pWin->drawable.pScreen->root)
pCursor = rootCursor; pCursor = rootCursor;
else else
pCursor = (CursorPtr)None; pCursor = (CursorPtr) None;
} }
else else {
{ rc = dixLookupResourceByType((pointer *) &pCursor, stuff->cursor,
rc = dixLookupResourceByType((pointer *)&pCursor, stuff->cursor,
RT_CURSOR, client, DixUseAccess); RT_CURSOR, client, DixUseAccess);
if (rc != Success) if (rc != Success)
return rc; return rc;
@ -108,4 +106,3 @@ int ProcXIChangeCursor(ClientPtr client)
return Success; return Success;
} }

View File

@ -30,7 +30,7 @@
#ifndef CHDEVCUR_H #ifndef CHDEVCUR_H
#define CHDEVCUR_H 1 #define CHDEVCUR_H 1
int SProcXIChangeCursor(ClientPtr /* client */); int SProcXIChangeCursor(ClientPtr /* client */ );
int ProcXIChangeCursor(ClientPtr /* client */); int ProcXIChangeCursor(ClientPtr /* client */ );
#endif /* CHDEVCUR_H */ #endif /* CHDEVCUR_H */

View File

@ -30,7 +30,6 @@
* *
*/ */
#ifdef HAVE_DIX_CONFIG_H #ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h> #include <dix-config.h>
#endif #endif
@ -57,7 +56,8 @@
/** /**
* Send the current state of the device hierarchy to all clients. * Send the current state of the device hierarchy to all clients.
*/ */
void XISendDeviceHierarchyEvent(int flags[MAXDEVICES]) void
XISendDeviceHierarchyEvent(int flags[MAXDEVICES])
{ {
xXIHierarchyEvent *ev; xXIHierarchyEvent *ev;
xXIHierarchyInfo *info; xXIHierarchyInfo *info;
@ -79,9 +79,8 @@ void XISendDeviceHierarchyEvent(int flags[MAXDEVICES])
ev->flags = 0; ev->flags = 0;
ev->num_info = inputInfo.numDevices; ev->num_info = inputInfo.numDevices;
info = (xXIHierarchyInfo*)&ev[1]; info = (xXIHierarchyInfo *) & ev[1];
for (dev = inputInfo.devices; dev; dev = dev->next) for (dev = inputInfo.devices; dev; dev = dev->next) {
{
info->deviceid = dev->id; info->deviceid = dev->id;
info->enabled = dev->enabled; info->enabled = dev->enabled;
info->use = GetDeviceUse(dev, &info->attachment); info->use = GetDeviceUse(dev, &info->attachment);
@ -89,8 +88,7 @@ void XISendDeviceHierarchyEvent(int flags[MAXDEVICES])
ev->flags |= info->flags; ev->flags |= info->flags;
info++; info++;
} }
for (dev = inputInfo.off_devices; dev; dev = dev->next) for (dev = inputInfo.off_devices; dev; dev = dev->next) {
{
info->deviceid = dev->id; info->deviceid = dev->id;
info->enabled = dev->enabled; info->enabled = dev->enabled;
info->use = GetDeviceUse(dev, &info->attachment); info->use = GetDeviceUse(dev, &info->attachment);
@ -99,11 +97,8 @@ void XISendDeviceHierarchyEvent(int flags[MAXDEVICES])
info++; info++;
} }
for (i = 0; i < MAXDEVICES; i++) {
for (i = 0; i < MAXDEVICES; i++) if (flags[i] & (XIMasterRemoved | XISlaveRemoved)) {
{
if (flags[i] & (XIMasterRemoved | XISlaveRemoved))
{
info->deviceid = i; info->deviceid = i;
info->enabled = FALSE; info->enabled = FALSE;
info->flags = flags[i]; info->flags = flags[i];
@ -119,11 +114,11 @@ void XISendDeviceHierarchyEvent(int flags[MAXDEVICES])
memset(&dummyDev, 0, sizeof(dummyDev)); memset(&dummyDev, 0, sizeof(dummyDev));
dummyDev.id = XIAllDevices; dummyDev.id = XIAllDevices;
dummyDev.type = SLAVE; dummyDev.type = SLAVE;
SendEventToAllWindows(&dummyDev, (XI_HierarchyChangedMask >> 8), (xEvent*)ev, 1); SendEventToAllWindows(&dummyDev, (XI_HierarchyChangedMask >> 8),
(xEvent *) ev, 1);
free(ev); free(ev);
} }
/*********************************************************************** /***********************************************************************
* *
* This procedure allows a client to change the device hierarchy through * This procedure allows a client to change the device hierarchy through
@ -131,7 +126,8 @@ void XISendDeviceHierarchyEvent(int flags[MAXDEVICES])
* *
*/ */
int SProcXIChangeHierarchy(ClientPtr client) int
SProcXIChangeHierarchy(ClientPtr client)
{ {
REQUEST(xXIChangeHierarchyReq); REQUEST(xXIChangeHierarchyReq);
swaps(&stuff->length); swaps(&stuff->length);
@ -139,14 +135,14 @@ int SProcXIChangeHierarchy(ClientPtr client)
} }
static int static int
add_master(ClientPtr client, xXIAddMasterInfo *c, int flags[MAXDEVICES]) add_master(ClientPtr client, xXIAddMasterInfo * c, int flags[MAXDEVICES])
{ {
DeviceIntPtr ptr, keybd, XTestptr, XTestkeybd; DeviceIntPtr ptr, keybd, XTestptr, XTestkeybd;
char* name; char *name;
int rc; int rc;
name = calloc(c->name_len + 1, sizeof(char)); name = calloc(c->name_len + 1, sizeof(char));
strncpy(name, (char*)&c[1], c->name_len); strncpy(name, (char *) &c[1], c->name_len);
rc = AllocDevicePair(client, name, &ptr, &keybd, rc = AllocDevicePair(client, name, &ptr, &keybd,
CorePointerProc, CoreKeyboardProc, TRUE); CorePointerProc, CoreKeyboardProc, TRUE);
@ -158,8 +154,7 @@ add_master(ClientPtr client, xXIAddMasterInfo *c, int flags[MAXDEVICES])
/* Allocate virtual slave devices for xtest events */ /* Allocate virtual slave devices for xtest events */
rc = AllocXTestDevice(client, name, &XTestptr, &XTestkeybd, ptr, keybd); rc = AllocXTestDevice(client, name, &XTestptr, &XTestkeybd, ptr, keybd);
if (rc != Success) if (rc != Success) {
{
DeleteInputDeviceRequest(ptr); DeleteInputDeviceRequest(ptr);
DeleteInputDeviceRequest(keybd); DeleteInputDeviceRequest(keybd);
goto unwind; goto unwind;
@ -175,8 +170,7 @@ add_master(ClientPtr client, xXIAddMasterInfo *c, int flags[MAXDEVICES])
flags[XTestptr->id] |= XISlaveAdded; flags[XTestptr->id] |= XISlaveAdded;
flags[XTestkeybd->id] |= XISlaveAdded; flags[XTestkeybd->id] |= XISlaveAdded;
if (c->enable) if (c->enable) {
{
EnableDevice(ptr, FALSE); EnableDevice(ptr, FALSE);
EnableDevice(keybd, FALSE); EnableDevice(keybd, FALSE);
flags[ptr->id] |= XIDeviceEnabled; flags[ptr->id] |= XIDeviceEnabled;
@ -195,7 +189,7 @@ add_master(ClientPtr client, xXIAddMasterInfo *c, int flags[MAXDEVICES])
flags[XTestptr->id] |= XISlaveAttached; flags[XTestptr->id] |= XISlaveAttached;
flags[XTestkeybd->id] |= XISlaveAttached; flags[XTestkeybd->id] |= XISlaveAttached;
unwind: unwind:
free(name); free(name);
return rc; return rc;
} }
@ -205,44 +199,39 @@ disable_clientpointer(DeviceIntPtr dev)
{ {
int i; int i;
for (i = 0; i < currentMaxClients; i++) for (i = 0; i < currentMaxClients; i++) {
{
ClientPtr client = clients[i]; ClientPtr client = clients[i];
if (client && client->clientPtr == dev) if (client && client->clientPtr == dev)
client->clientPtr = NULL; client->clientPtr = NULL;
} }
} }
static int static int
remove_master(ClientPtr client, xXIRemoveMasterInfo *r, remove_master(ClientPtr client, xXIRemoveMasterInfo * r, int flags[MAXDEVICES])
int flags[MAXDEVICES])
{ {
DeviceIntPtr ptr, keybd, XTestptr, XTestkeybd; DeviceIntPtr ptr, keybd, XTestptr, XTestkeybd;
int rc = Success; int rc = Success;
if (r->return_mode != XIAttachToMaster && if (r->return_mode != XIAttachToMaster && r->return_mode != XIFloating)
r->return_mode != XIFloating)
return BadValue; return BadValue;
rc = dixLookupDevice(&ptr, r->deviceid, client, DixDestroyAccess); rc = dixLookupDevice(&ptr, r->deviceid, client, DixDestroyAccess);
if (rc != Success) if (rc != Success)
goto unwind; goto unwind;
if (!IsMaster(ptr)) if (!IsMaster(ptr)) {
{
client->errorValue = r->deviceid; client->errorValue = r->deviceid;
rc = BadDevice; rc = BadDevice;
goto unwind; goto unwind;
} }
/* XXX: For now, don't allow removal of VCP, VCK */ /* XXX: For now, don't allow removal of VCP, VCK */
if (ptr == inputInfo.pointer || ptr == inputInfo.keyboard) if (ptr == inputInfo.pointer ||ptr == inputInfo.keyboard) {
{
rc = BadDevice; rc = BadDevice;
goto unwind; goto unwind;
} }
ptr = GetMaster(ptr, MASTER_POINTER); ptr = GetMaster(ptr, MASTER_POINTER);
rc = dixLookupDevice(&ptr, ptr->id, client, DixDestroyAccess); rc = dixLookupDevice(&ptr, ptr->id, client, DixDestroyAccess);
if (rc != Success) if (rc != Success)
@ -258,8 +247,7 @@ remove_master(ClientPtr client, xXIRemoveMasterInfo *r,
goto unwind; goto unwind;
XTestkeybd = GetXTestDevice(keybd); XTestkeybd = GetXTestDevice(keybd);
rc = dixLookupDevice(&XTestkeybd, XTestkeybd->id, client, rc = dixLookupDevice(&XTestkeybd, XTestkeybd->id, client, DixDestroyAccess);
DixDestroyAccess);
if (rc != Success) if (rc != Success)
goto unwind; goto unwind;
@ -267,18 +255,14 @@ remove_master(ClientPtr client, xXIRemoveMasterInfo *r,
/* Disabling sends the devices floating, reattach them if /* Disabling sends the devices floating, reattach them if
* desired. */ * desired. */
if (r->return_mode == XIAttachToMaster) if (r->return_mode == XIAttachToMaster) {
{ DeviceIntPtr attached, newptr, newkeybd;
DeviceIntPtr attached,
newptr,
newkeybd;
rc = dixLookupDevice(&newptr, r->return_pointer, client, DixAddAccess); rc = dixLookupDevice(&newptr, r->return_pointer, client, DixAddAccess);
if (rc != Success) if (rc != Success)
goto unwind; goto unwind;
if (!IsMaster(newptr)) if (!IsMaster(newptr)) {
{
client->errorValue = r->return_pointer; client->errorValue = r->return_pointer;
rc = BadDevice; rc = BadDevice;
goto unwind; goto unwind;
@ -289,23 +273,19 @@ remove_master(ClientPtr client, xXIRemoveMasterInfo *r,
if (rc != Success) if (rc != Success)
goto unwind; goto unwind;
if (!IsMaster(newkeybd)) if (!IsMaster(newkeybd)) {
{
client->errorValue = r->return_keyboard; client->errorValue = r->return_keyboard;
rc = BadDevice; rc = BadDevice;
goto unwind; goto unwind;
} }
for (attached = inputInfo.devices; attached; attached = attached->next) for (attached = inputInfo.devices; attached; attached = attached->next) {
{
if (!IsMaster(attached)) { if (!IsMaster(attached)) {
if (GetMaster(attached, MASTER_ATTACHED) == ptr) if (GetMaster(attached, MASTER_ATTACHED) == ptr) {
{
AttachDevice(client, attached, newptr); AttachDevice(client, attached, newptr);
flags[attached->id] |= XISlaveAttached; flags[attached->id] |= XISlaveAttached;
} }
if (GetMaster(attached, MASTER_ATTACHED) == keybd) if (GetMaster(attached, MASTER_ATTACHED) == keybd) {
{
AttachDevice(client, attached, newkeybd); AttachDevice(client, attached, newkeybd);
flags[attached->id] |= XISlaveAttached; flags[attached->id] |= XISlaveAttached;
} }
@ -339,12 +319,12 @@ remove_master(ClientPtr client, xXIRemoveMasterInfo *r,
flags[keybd->id] |= XIMasterRemoved; flags[keybd->id] |= XIMasterRemoved;
flags[ptr->id] |= XIMasterRemoved; flags[ptr->id] |= XIMasterRemoved;
unwind: unwind:
return rc; return rc;
} }
static int static int
detach_slave(ClientPtr client, xXIDetachSlaveInfo *c, int flags[MAXDEVICES]) detach_slave(ClientPtr client, xXIDetachSlaveInfo * c, int flags[MAXDEVICES])
{ {
DeviceIntPtr dev; DeviceIntPtr dev;
int rc; int rc;
@ -353,16 +333,14 @@ detach_slave(ClientPtr client, xXIDetachSlaveInfo *c, int flags[MAXDEVICES])
if (rc != Success) if (rc != Success)
goto unwind; goto unwind;
if (IsMaster(dev)) if (IsMaster(dev)) {
{
client->errorValue = c->deviceid; client->errorValue = c->deviceid;
rc = BadDevice; rc = BadDevice;
goto unwind; goto unwind;
} }
/* Don't allow changes to XTest Devices, these are fixed */ /* Don't allow changes to XTest Devices, these are fixed */
if (IsXTestDevice(dev, NULL)) if (IsXTestDevice(dev, NULL)) {
{
client->errorValue = c->deviceid; client->errorValue = c->deviceid;
rc = BadDevice; rc = BadDevice;
goto unwind; goto unwind;
@ -372,13 +350,12 @@ detach_slave(ClientPtr client, xXIDetachSlaveInfo *c, int flags[MAXDEVICES])
AttachDevice(client, dev, NULL); AttachDevice(client, dev, NULL);
flags[dev->id] |= XISlaveDetached; flags[dev->id] |= XISlaveDetached;
unwind: unwind:
return rc; return rc;
} }
static int static int
attach_slave(ClientPtr client, xXIAttachSlaveInfo *c, attach_slave(ClientPtr client, xXIAttachSlaveInfo * c, int flags[MAXDEVICES])
int flags[MAXDEVICES])
{ {
DeviceIntPtr dev; DeviceIntPtr dev;
DeviceIntPtr newmaster; DeviceIntPtr newmaster;
@ -388,16 +365,14 @@ attach_slave(ClientPtr client, xXIAttachSlaveInfo *c,
if (rc != Success) if (rc != Success)
goto unwind; goto unwind;
if (IsMaster(dev)) if (IsMaster(dev)) {
{
client->errorValue = c->deviceid; client->errorValue = c->deviceid;
rc = BadDevice; rc = BadDevice;
goto unwind; goto unwind;
} }
/* Don't allow changes to XTest Devices, these are fixed */ /* Don't allow changes to XTest Devices, these are fixed */
if (IsXTestDevice(dev, NULL)) if (IsXTestDevice(dev, NULL)) {
{
client->errorValue = c->deviceid; client->errorValue = c->deviceid;
rc = BadDevice; rc = BadDevice;
goto unwind; goto unwind;
@ -406,16 +381,14 @@ attach_slave(ClientPtr client, xXIAttachSlaveInfo *c,
rc = dixLookupDevice(&newmaster, c->new_master, client, DixAddAccess); rc = dixLookupDevice(&newmaster, c->new_master, client, DixAddAccess);
if (rc != Success) if (rc != Success)
goto unwind; goto unwind;
if (!IsMaster(newmaster)) if (!IsMaster(newmaster)) {
{
client->errorValue = c->new_master; client->errorValue = c->new_master;
rc = BadDevice; rc = BadDevice;
goto unwind; goto unwind;
} }
if (!((IsPointerDevice(newmaster) && IsPointerDevice(dev)) || if (!((IsPointerDevice(newmaster) && IsPointerDevice(dev)) ||
(IsKeyboardDevice(newmaster) && IsKeyboardDevice(dev)))) (IsKeyboardDevice(newmaster) && IsKeyboardDevice(dev)))) {
{
rc = BadDevice; rc = BadDevice;
goto unwind; goto unwind;
} }
@ -424,12 +397,10 @@ attach_slave(ClientPtr client, xXIAttachSlaveInfo *c,
AttachDevice(client, dev, newmaster); AttachDevice(client, dev, newmaster);
flags[dev->id] |= XISlaveAttached; flags[dev->id] |= XISlaveAttached;
unwind: unwind:
return rc; return rc;
} }
#define SWAPIF(cmd) if (client->swapped) { cmd; } #define SWAPIF(cmd) if (client->swapped) { cmd; }
int int
@ -438,7 +409,7 @@ ProcXIChangeHierarchy(ClientPtr client)
xXIAnyHierarchyChangeInfo *any; xXIAnyHierarchyChangeInfo *any;
int required_len = sizeof(xXIChangeHierarchyReq); int required_len = sizeof(xXIChangeHierarchyReq);
int rc = Success; int rc = Success;
int flags[MAXDEVICES] = {0}; int flags[MAXDEVICES] = { 0 };
REQUEST(xXIChangeHierarchyReq); REQUEST(xXIChangeHierarchyReq);
REQUEST_AT_LEAST_SIZE(xXIChangeHierarchyReq); REQUEST_AT_LEAST_SIZE(xXIChangeHierarchyReq);
@ -446,9 +417,8 @@ ProcXIChangeHierarchy(ClientPtr client)
if (!stuff->num_changes) if (!stuff->num_changes)
return rc; return rc;
any = (xXIAnyHierarchyChangeInfo*)&stuff[1]; any = (xXIAnyHierarchyChangeInfo *) & stuff[1];
while(stuff->num_changes--) while (stuff->num_changes--) {
{
SWAPIF(swaps(&any->type)); SWAPIF(swaps(&any->type));
SWAPIF(swaps(&any->length)); SWAPIF(swaps(&any->length));
@ -456,11 +426,11 @@ ProcXIChangeHierarchy(ClientPtr client)
if ((stuff->length * 4) < required_len) if ((stuff->length * 4) < required_len)
return BadLength; return BadLength;
switch(any->type) switch (any->type) {
{
case XIAddMaster: case XIAddMaster:
{ {
xXIAddMasterInfo* c = (xXIAddMasterInfo*)any; xXIAddMasterInfo *c = (xXIAddMasterInfo *) any;
SWAPIF(swaps(&c->name_len)); SWAPIF(swaps(&c->name_len));
rc = add_master(client, c, flags); rc = add_master(client, c, flags);
@ -470,7 +440,7 @@ ProcXIChangeHierarchy(ClientPtr client)
break; break;
case XIRemoveMaster: case XIRemoveMaster:
{ {
xXIRemoveMasterInfo* r = (xXIRemoveMasterInfo*)any; xXIRemoveMasterInfo *r = (xXIRemoveMasterInfo *) any;
rc = remove_master(client, r, flags); rc = remove_master(client, r, flags);
if (rc != Success) if (rc != Success)
@ -479,7 +449,7 @@ ProcXIChangeHierarchy(ClientPtr client)
break; break;
case XIDetachSlave: case XIDetachSlave:
{ {
xXIDetachSlaveInfo* c = (xXIDetachSlaveInfo*)any; xXIDetachSlaveInfo *c = (xXIDetachSlaveInfo *) any;
rc = detach_slave(client, c, flags); rc = detach_slave(client, c, flags);
if (rc != Success) if (rc != Success)
@ -488,7 +458,7 @@ ProcXIChangeHierarchy(ClientPtr client)
break; break;
case XIAttachSlave: case XIAttachSlave:
{ {
xXIAttachSlaveInfo* c = (xXIAttachSlaveInfo*)any; xXIAttachSlaveInfo *c = (xXIAttachSlaveInfo *) any;
rc = attach_slave(client, c, flags); rc = attach_slave(client, c, flags);
if (rc != Success) if (rc != Success)
@ -497,12 +467,11 @@ ProcXIChangeHierarchy(ClientPtr client)
break; break;
} }
any = (xXIAnyHierarchyChangeInfo*)((char*)any + any->length * 4); any = (xXIAnyHierarchyChangeInfo *) ((char *) any + any->length * 4);
} }
unwind: unwind:
XISendDeviceHierarchyEvent(flags); XISendDeviceHierarchyEvent(flags);
return rc; return rc;
} }

View File

@ -36,8 +36,8 @@
#ifndef CHDEVHIER_H #ifndef CHDEVHIER_H
#define CHDEVHIER_H 1 #define CHDEVHIER_H 1
int SProcXIChangeHierarchy(ClientPtr /* client */); int SProcXIChangeHierarchy(ClientPtr /* client */ );
int ProcXIChangeHierarchy(ClientPtr /* client */); int ProcXIChangeHierarchy(ClientPtr /* client */ );
void XISendDeviceHierarchyEvent(int flags[]); void XISendDeviceHierarchyEvent(int flags[]);

View File

@ -56,22 +56,23 @@ SProcXIGetClientPointer(ClientPtr client)
return ProcXIGetClientPointer(client); return ProcXIGetClientPointer(client);
} }
int ProcXIGetClientPointer(ClientPtr client) int
ProcXIGetClientPointer(ClientPtr client)
{ {
int rc; int rc;
ClientPtr winclient; ClientPtr winclient;
xXIGetClientPointerReply rep; xXIGetClientPointerReply rep;
REQUEST(xXIGetClientPointerReq); REQUEST(xXIGetClientPointerReq);
REQUEST_SIZE_MATCH(xXIGetClientPointerReq); REQUEST_SIZE_MATCH(xXIGetClientPointerReq);
if (stuff->win != None) if (stuff->win != None) {
{ rc = dixLookupClient(&winclient, stuff->win, client, DixGetAttrAccess);
rc = dixLookupClient(&winclient, stuff->win, client,
DixGetAttrAccess);
if (rc != Success) if (rc != Success)
return BadWindow; return BadWindow;
} else }
else
winclient = client; winclient = client;
rep.repType = X_Reply; rep.repType = X_Reply;
@ -94,11 +95,10 @@ int ProcXIGetClientPointer(ClientPtr client)
void void
SRepXIGetClientPointer(ClientPtr client, int size, SRepXIGetClientPointer(ClientPtr client, int size,
xXIGetClientPointerReply* rep) xXIGetClientPointerReply * rep)
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
swaps(&rep->deviceid); swaps(&rep->deviceid);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -29,10 +29,10 @@
#ifndef GETCPTR_H #ifndef GETCPTR_H
#define GETCPTR_H 1 #define GETCPTR_H 1
int SProcXIGetClientPointer(ClientPtr /* client */); int SProcXIGetClientPointer(ClientPtr /* client */ );
int ProcXIGetClientPointer(ClientPtr /* client */); int ProcXIGetClientPointer(ClientPtr /* client */ );
void SRepXIGetClientPointer(ClientPtr /* client */, void SRepXIGetClientPointer(ClientPtr /* client */ ,
int /* size */, int /* size */ ,
xXIGetClientPointerReply* /* rep */); xXIGetClientPointerReply * /* rep */ );
#endif /* GETCPTR_H */ #endif /* GETCPTR_H */

View File

@ -78,7 +78,7 @@ ProcXIGrabDevice(ClientPtr client)
if (!IsMaster(dev)) if (!IsMaster(dev))
stuff->paired_device_mode = GrabModeAsync; stuff->paired_device_mode = GrabModeAsync;
if (XICheckInvalidMaskBits(client, (unsigned char*)&stuff[1], if (XICheckInvalidMaskBits(client, (unsigned char *) &stuff[1],
stuff->mask_len * 4) != Success) stuff->mask_len * 4) != Success)
return BadValue; return BadValue;
@ -88,17 +88,15 @@ ProcXIGrabDevice(ClientPtr client)
mask_len = min(xi2mask_mask_size(mask.xi2mask), stuff->mask_len * 4); mask_len = min(xi2mask_mask_size(mask.xi2mask), stuff->mask_len * 4);
/* FIXME: I think the old code was broken here */ /* FIXME: I think the old code was broken here */
xi2mask_set_one_mask(mask.xi2mask, dev->id, (unsigned char*)&stuff[1], mask_len); xi2mask_set_one_mask(mask.xi2mask, dev->id, (unsigned char *) &stuff[1],
mask_len);
ret = GrabDevice(client, dev, stuff->grab_mode, ret = GrabDevice(client, dev, stuff->grab_mode,
stuff->paired_device_mode, stuff->paired_device_mode,
stuff->grab_window, stuff->grab_window,
stuff->owner_events, stuff->owner_events,
stuff->time, stuff->time,
&mask, &mask, XI2, stuff->cursor, None /* confineTo */ ,
XI2,
stuff->cursor,
None /* confineTo */,
&status); &status);
xi2mask_free(&mask.xi2mask); xi2mask_free(&mask.xi2mask);
@ -112,7 +110,6 @@ ProcXIGrabDevice(ClientPtr client)
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
rep.status = status; rep.status = status;
WriteReplyToClient(client, sizeof(rep), &rep); WriteReplyToClient(client, sizeof(rep), &rep);
return ret; return ret;
} }
@ -154,9 +151,10 @@ ProcXIUngrabDevice(ClientPtr client)
return Success; return Success;
} }
void SRepXIGrabDevice(ClientPtr client, int size, xXIGrabDeviceReply * rep) void
SRepXIGrabDevice(ClientPtr client, int size, xXIGrabDeviceReply * rep)
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -63,10 +63,9 @@ SProcXIPassiveGrabDevice(ClientPtr client)
swaps(&stuff->mask_len); swaps(&stuff->mask_len);
swaps(&stuff->num_modifiers); swaps(&stuff->num_modifiers);
mods = (xXIModifierInfo*)&stuff[1]; mods = (xXIModifierInfo *) & stuff[1];
for (i = 0; i < stuff->num_modifiers; i++, mods++) for (i = 0; i < stuff->num_modifiers; i++, mods++) {
{
swapl(&mods->base_mods); swapl(&mods->base_mods);
swapl(&mods->latched_mods); swapl(&mods->latched_mods);
swapl(&mods->locked_mods); swapl(&mods->locked_mods);
@ -95,11 +94,9 @@ ProcXIPassiveGrabDevice(ClientPtr client)
dev = inputInfo.all_devices; dev = inputInfo.all_devices;
else if (stuff->deviceid == XIAllMasterDevices) else if (stuff->deviceid == XIAllMasterDevices)
dev = inputInfo.all_master_devices; dev = inputInfo.all_master_devices;
else else {
{
ret = dixLookupDevice(&dev, stuff->deviceid, client, DixGrabAccess); ret = dixLookupDevice(&dev, stuff->deviceid, client, DixGrabAccess);
if (ret != Success) if (ret != Success) {
{
client->errorValue = stuff->deviceid; client->errorValue = stuff->deviceid;
return ret; return ret;
} }
@ -109,29 +106,26 @@ ProcXIPassiveGrabDevice(ClientPtr client)
stuff->grab_type != XIGrabtypeKeycode && stuff->grab_type != XIGrabtypeKeycode &&
stuff->grab_type != XIGrabtypeEnter && stuff->grab_type != XIGrabtypeEnter &&
stuff->grab_type != XIGrabtypeFocusIn && stuff->grab_type != XIGrabtypeFocusIn &&
stuff->grab_type != XIGrabtypeTouchBegin) stuff->grab_type != XIGrabtypeTouchBegin) {
{
client->errorValue = stuff->grab_type; client->errorValue = stuff->grab_type;
return BadValue; return BadValue;
} }
if ((stuff->grab_type == XIGrabtypeEnter || if ((stuff->grab_type == XIGrabtypeEnter ||
stuff->grab_type == XIGrabtypeFocusIn || stuff->grab_type == XIGrabtypeFocusIn ||
stuff->grab_type == XIGrabtypeTouchBegin) && stuff->detail != 0) stuff->grab_type == XIGrabtypeTouchBegin) && stuff->detail != 0) {
{
client->errorValue = stuff->detail; client->errorValue = stuff->detail;
return BadValue; return BadValue;
} }
if (stuff->grab_type == XIGrabtypeTouchBegin && if (stuff->grab_type == XIGrabtypeTouchBegin &&
(stuff->grab_mode != XIGrabModeTouch || (stuff->grab_mode != XIGrabModeTouch ||
stuff->paired_device_mode != GrabModeAsync)) stuff->paired_device_mode != GrabModeAsync)) {
{
client->errorValue = stuff->grab_mode; client->errorValue = stuff->grab_mode;
return BadValue; return BadValue;
} }
if (XICheckInvalidMaskBits(client, (unsigned char*)&stuff[1], if (XICheckInvalidMaskBits(client, (unsigned char *) &stuff[1],
stuff->mask_len * 4) != Success) stuff->mask_len * 4) != Success)
return BadValue; return BadValue;
@ -140,7 +134,8 @@ ProcXIPassiveGrabDevice(ClientPtr client)
return BadAlloc; return BadAlloc;
mask_len = min(xi2mask_mask_size(mask.xi2mask), stuff->mask_len * 4); mask_len = min(xi2mask_mask_size(mask.xi2mask), stuff->mask_len * 4);
xi2mask_set_one_mask(mask.xi2mask, stuff->deviceid, (unsigned char*)&stuff[1], mask_len * 4); xi2mask_set_one_mask(mask.xi2mask, stuff->deviceid,
(unsigned char *) &stuff[1], mask_len * 4);
rep.repType = X_Reply; rep.repType = X_Reply;
rep.RepType = X_XIPassiveGrabDevice; rep.RepType = X_XIPassiveGrabDevice;
@ -157,23 +152,24 @@ ProcXIPassiveGrabDevice(ClientPtr client)
if (IsKeyboardDevice(dev)) { if (IsKeyboardDevice(dev)) {
param.this_device_mode = stuff->grab_mode; param.this_device_mode = stuff->grab_mode;
param.other_devices_mode = stuff->paired_device_mode; param.other_devices_mode = stuff->paired_device_mode;
} else { }
else {
param.this_device_mode = stuff->paired_device_mode; param.this_device_mode = stuff->paired_device_mode;
param.other_devices_mode = stuff->grab_mode; param.other_devices_mode = stuff->grab_mode;
} }
if (stuff->cursor != None) if (stuff->cursor != None) {
{
ret = dixLookupResourceByType(&tmp, stuff->cursor, ret = dixLookupResourceByType(&tmp, stuff->cursor,
RT_CURSOR, client, DixUseAccess); RT_CURSOR, client, DixUseAccess);
if (ret != Success) if (ret != Success) {
{
client->errorValue = stuff->cursor; client->errorValue = stuff->cursor;
goto out; goto out;
} }
} }
ret = dixLookupWindow((WindowPtr*)&tmp, stuff->grab_window, client, DixSetAttrAccess); ret =
dixLookupWindow((WindowPtr *) &tmp, stuff->grab_window, client,
DixSetAttrAccess);
if (ret != Success) if (ret != Success)
goto out; goto out;
@ -181,8 +177,9 @@ ProcXIPassiveGrabDevice(ClientPtr client)
if (ret != Success) if (ret != Success)
goto out; goto out;
modifiers = (uint32_t*)&stuff[1] + stuff->mask_len; modifiers = (uint32_t *) & stuff[1] + stuff->mask_len;
modifiers_failed = calloc(stuff->num_modifiers, sizeof(xXIGrabModifierInfo)); modifiers_failed =
calloc(stuff->num_modifiers, sizeof(xXIGrabModifierInfo));
if (!modifiers_failed) { if (!modifiers_failed) {
ret = BadAlloc; ret = BadAlloc;
goto out; goto out;
@ -190,13 +187,11 @@ ProcXIPassiveGrabDevice(ClientPtr client)
mod_dev = (IsFloating(dev)) ? dev : GetMaster(dev, MASTER_KEYBOARD); mod_dev = (IsFloating(dev)) ? dev : GetMaster(dev, MASTER_KEYBOARD);
for (i = 0; i < stuff->num_modifiers; i++, modifiers++) for (i = 0; i < stuff->num_modifiers; i++, modifiers++) {
{
uint8_t status = Success; uint8_t status = Success;
param.modifiers = *modifiers; param.modifiers = *modifiers;
switch(stuff->grab_type) switch (stuff->grab_type) {
{
case XIGrabtypeButton: case XIGrabtypeButton:
status = GrabButton(client, dev, mod_dev, stuff->detail, status = GrabButton(client, dev, mod_dev, stuff->detail,
&param, XI2, &mask); &param, XI2, &mask);
@ -207,16 +202,14 @@ ProcXIPassiveGrabDevice(ClientPtr client)
break; break;
case XIGrabtypeEnter: case XIGrabtypeEnter:
case XIGrabtypeFocusIn: case XIGrabtypeFocusIn:
status = GrabWindow(client, dev, stuff->grab_type, status = GrabWindow(client, dev, stuff->grab_type, &param, &mask);
&param, &mask);
break; break;
case XIGrabtypeTouchBegin: case XIGrabtypeTouchBegin:
status = GrabTouch(client, dev, mod_dev, &param, &mask); status = GrabTouch(client, dev, mod_dev, &param, &mask);
break; break;
} }
if (status != GrabSuccess) if (status != GrabSuccess) {
{
xXIGrabModifierInfo *info = modifiers_failed + rep.num_modifiers; xXIGrabModifierInfo *info = modifiers_failed + rep.num_modifiers;
info->status = status; info->status = status;
@ -231,10 +224,10 @@ ProcXIPassiveGrabDevice(ClientPtr client)
WriteReplyToClient(client, sizeof(rep), &rep); WriteReplyToClient(client, sizeof(rep), &rep);
if (rep.num_modifiers) if (rep.num_modifiers)
WriteToClient(client, rep.length * 4, (char*)modifiers_failed); WriteToClient(client, rep.length * 4, (char *) modifiers_failed);
free(modifiers_failed); free(modifiers_failed);
out: out:
xi2mask_free(&mask.xi2mask); xi2mask_free(&mask.xi2mask);
return ret; return ret;
} }
@ -247,7 +240,7 @@ SRepXIPassiveGrabDevice(ClientPtr client, int size,
swapl(&rep->length); swapl(&rep->length);
swaps(&rep->num_modifiers); swaps(&rep->num_modifiers);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }
int int
@ -264,7 +257,7 @@ SProcXIPassiveUngrabDevice(ClientPtr client)
swapl(&stuff->detail); swapl(&stuff->detail);
swaps(&stuff->num_modifiers); swaps(&stuff->num_modifiers);
modifiers = (uint32_t*)&stuff[1]; modifiers = (uint32_t *) & stuff[1];
for (i = 0; i < stuff->num_modifiers; i++, modifiers++) for (i = 0; i < stuff->num_modifiers; i++, modifiers++)
swapl(modifiers); swapl(modifiers);
@ -278,7 +271,7 @@ ProcXIPassiveUngrabDevice(ClientPtr client)
DeviceIntPtr dev, mod_dev; DeviceIntPtr dev, mod_dev;
WindowPtr win; WindowPtr win;
GrabPtr tempGrab; GrabPtr tempGrab;
uint32_t* modifiers; uint32_t *modifiers;
int i, rc; int i, rc;
REQUEST(xXIPassiveUngrabDeviceReq); REQUEST(xXIPassiveUngrabDeviceReq);
@ -288,8 +281,7 @@ ProcXIPassiveUngrabDevice(ClientPtr client)
dev = inputInfo.all_devices; dev = inputInfo.all_devices;
else if (stuff->deviceid == XIAllMasterDevices) else if (stuff->deviceid == XIAllMasterDevices)
dev = inputInfo.all_master_devices; dev = inputInfo.all_master_devices;
else else {
{
rc = dixLookupDevice(&dev, stuff->deviceid, client, DixGrabAccess); rc = dixLookupDevice(&dev, stuff->deviceid, client, DixGrabAccess);
if (rc != Success) if (rc != Success)
return rc; return rc;
@ -298,15 +290,13 @@ ProcXIPassiveUngrabDevice(ClientPtr client)
if (stuff->grab_type != XIGrabtypeButton && if (stuff->grab_type != XIGrabtypeButton &&
stuff->grab_type != XIGrabtypeKeycode && stuff->grab_type != XIGrabtypeKeycode &&
stuff->grab_type != XIGrabtypeEnter && stuff->grab_type != XIGrabtypeEnter &&
stuff->grab_type != XIGrabtypeFocusIn) stuff->grab_type != XIGrabtypeFocusIn) {
{
client->errorValue = stuff->grab_type; client->errorValue = stuff->grab_type;
return BadValue; return BadValue;
} }
if ((stuff->grab_type == XIGrabtypeEnter || if ((stuff->grab_type == XIGrabtypeEnter ||
stuff->grab_type == XIGrabtypeFocusIn) && stuff->detail != 0) stuff->grab_type == XIGrabtypeFocusIn) && stuff->detail != 0) {
{
client->errorValue = stuff->detail; client->errorValue = stuff->detail;
return BadValue; return BadValue;
} }
@ -317,7 +307,6 @@ ProcXIPassiveUngrabDevice(ClientPtr client)
mod_dev = (IsFloating(dev)) ? dev : GetMaster(dev, MASTER_KEYBOARD); mod_dev = (IsFloating(dev)) ? dev : GetMaster(dev, MASTER_KEYBOARD);
tempGrab = AllocGrab(); tempGrab = AllocGrab();
if (!tempGrab) if (!tempGrab)
return BadAlloc; return BadAlloc;
@ -325,12 +314,19 @@ ProcXIPassiveUngrabDevice(ClientPtr client)
tempGrab->resource = client->clientAsMask; tempGrab->resource = client->clientAsMask;
tempGrab->device = dev; tempGrab->device = dev;
tempGrab->window = win; tempGrab->window = win;
switch(stuff->grab_type) switch (stuff->grab_type) {
{ case XIGrabtypeButton:
case XIGrabtypeButton: tempGrab->type = XI_ButtonPress; break; tempGrab->type = XI_ButtonPress;
case XIGrabtypeKeycode: tempGrab->type = XI_KeyPress; break; break;
case XIGrabtypeEnter: tempGrab->type = XI_Enter; break; case XIGrabtypeKeycode:
case XIGrabtypeFocusIn: tempGrab->type = XI_FocusIn; break; tempGrab->type = XI_KeyPress;
break;
case XIGrabtypeEnter:
tempGrab->type = XI_Enter;
break;
case XIGrabtypeFocusIn:
tempGrab->type = XI_FocusIn;
break;
} }
tempGrab->grabtype = XI2; tempGrab->grabtype = XI2;
tempGrab->modifierDevice = mod_dev; tempGrab->modifierDevice = mod_dev;
@ -338,10 +334,9 @@ ProcXIPassiveUngrabDevice(ClientPtr client)
tempGrab->detail.exact = stuff->detail; tempGrab->detail.exact = stuff->detail;
tempGrab->detail.pMask = NULL; tempGrab->detail.pMask = NULL;
modifiers = (uint32_t*)&stuff[1]; modifiers = (uint32_t *) & stuff[1];
for (i = 0; i < stuff->num_modifiers; i++, modifiers++) for (i = 0; i < stuff->num_modifiers; i++, modifiers++) {
{
tempGrab->modifiersDetail.exact = *modifiers; tempGrab->modifiersDetail.exact = *modifiers;
DeletePassiveGrabFromList(tempGrab); DeletePassiveGrabFromList(tempGrab);
} }

View File

@ -32,7 +32,8 @@
int SProcXIPassiveUngrabDevice(ClientPtr client); int SProcXIPassiveUngrabDevice(ClientPtr client);
int ProcXIPassiveUngrabDevice(ClientPtr client); int ProcXIPassiveUngrabDevice(ClientPtr client);
void SRepXIPassiveGrabDevice(ClientPtr client, int size, xXIPassiveGrabDeviceReply * rep); void SRepXIPassiveGrabDevice(ClientPtr client, int size,
xXIPassiveGrabDeviceReply * rep);
int ProcXIPassiveGrabDevice(ClientPtr client); int ProcXIPassiveGrabDevice(ClientPtr client);
int SProcXIPassiveGrabDevice(ClientPtr client); int SProcXIPassiveGrabDevice(ClientPtr client);

File diff suppressed because it is too large Load Diff

View File

@ -30,38 +30,37 @@
#ifndef XIPROPERTY_H #ifndef XIPROPERTY_H
#define XIPROPERTY_H 1 #define XIPROPERTY_H 1
int ProcXListDeviceProperties (ClientPtr client); int ProcXListDeviceProperties(ClientPtr client);
int ProcXChangeDeviceProperty (ClientPtr client); int ProcXChangeDeviceProperty(ClientPtr client);
int ProcXDeleteDeviceProperty (ClientPtr client); int ProcXDeleteDeviceProperty(ClientPtr client);
int ProcXGetDeviceProperty (ClientPtr client); int ProcXGetDeviceProperty(ClientPtr client);
/* request swapping */ /* request swapping */
int SProcXListDeviceProperties (ClientPtr client); int SProcXListDeviceProperties(ClientPtr client);
int SProcXChangeDeviceProperty (ClientPtr client); int SProcXChangeDeviceProperty(ClientPtr client);
int SProcXDeleteDeviceProperty (ClientPtr client); int SProcXDeleteDeviceProperty(ClientPtr client);
int SProcXGetDeviceProperty (ClientPtr client); int SProcXGetDeviceProperty(ClientPtr client);
/* reply swapping */ /* reply swapping */
void SRepXListDeviceProperties(ClientPtr client, int size, void SRepXListDeviceProperties(ClientPtr client, int size,
xListDevicePropertiesReply *rep); xListDevicePropertiesReply * rep);
void SRepXGetDeviceProperty(ClientPtr client, int size, void SRepXGetDeviceProperty(ClientPtr client, int size,
xGetDevicePropertyReply *rep); xGetDevicePropertyReply * rep);
/* XI2 request/reply handling */ /* XI2 request/reply handling */
int ProcXIListProperties (ClientPtr client); int ProcXIListProperties(ClientPtr client);
int ProcXIChangeProperty (ClientPtr client); int ProcXIChangeProperty(ClientPtr client);
int ProcXIDeleteProperty (ClientPtr client); int ProcXIDeleteProperty(ClientPtr client);
int ProcXIGetProperty (ClientPtr client); int ProcXIGetProperty(ClientPtr client);
int SProcXIListProperties (ClientPtr client); int SProcXIListProperties(ClientPtr client);
int SProcXIChangeProperty (ClientPtr client); int SProcXIChangeProperty(ClientPtr client);
int SProcXIDeleteProperty (ClientPtr client); int SProcXIDeleteProperty(ClientPtr client);
int SProcXIGetProperty (ClientPtr client); int SProcXIGetProperty(ClientPtr client);
void SRepXIListProperties(ClientPtr client, int size, void SRepXIListProperties(ClientPtr client, int size,
xXIListPropertiesReply *rep); xXIListPropertiesReply * rep);
void SRepXIGetProperty(ClientPtr client, int size, void SRepXIGetProperty(ClientPtr client, int size, xXIGetPropertyReply * rep);
xXIGetPropertyReply *rep);
void XIResetProperties(void); void XIResetProperties(void);

View File

@ -47,9 +47,9 @@
static Bool ShouldSkipDevice(ClientPtr client, int deviceid, DeviceIntPtr d); static Bool ShouldSkipDevice(ClientPtr client, int deviceid, DeviceIntPtr d);
static int static int
ListDeviceInfo(ClientPtr client, DeviceIntPtr dev, xXIDeviceInfo* info); ListDeviceInfo(ClientPtr client, DeviceIntPtr dev, xXIDeviceInfo * info);
static int SizeDeviceInfo(DeviceIntPtr dev); static int SizeDeviceInfo(DeviceIntPtr dev);
static void SwapDeviceInfo(DeviceIntPtr dev, xXIDeviceInfo* info); static void SwapDeviceInfo(DeviceIntPtr dev, xXIDeviceInfo * info);
int int
SProcXIQueryDevice(ClientPtr client) SProcXIQueryDevice(ClientPtr client)
{ {
@ -74,31 +74,27 @@ ProcXIQueryDevice(ClientPtr client)
REQUEST(xXIQueryDeviceReq); REQUEST(xXIQueryDeviceReq);
REQUEST_SIZE_MATCH(xXIQueryDeviceReq); REQUEST_SIZE_MATCH(xXIQueryDeviceReq);
if (stuff->deviceid != XIAllDevices && stuff->deviceid != XIAllMasterDevices) if (stuff->deviceid != XIAllDevices &&
{ stuff->deviceid != XIAllMasterDevices) {
rc = dixLookupDevice(&dev, stuff->deviceid, client, DixGetAttrAccess); rc = dixLookupDevice(&dev, stuff->deviceid, client, DixGetAttrAccess);
if (rc != Success) if (rc != Success) {
{
client->errorValue = stuff->deviceid; client->errorValue = stuff->deviceid;
return rc; return rc;
} }
len += SizeDeviceInfo(dev); len += SizeDeviceInfo(dev);
} }
else else {
{
skip = calloc(sizeof(Bool), inputInfo.numDevices); skip = calloc(sizeof(Bool), inputInfo.numDevices);
if (!skip) if (!skip)
return BadAlloc; return BadAlloc;
for (dev = inputInfo.devices; dev; dev = dev->next, i++) for (dev = inputInfo.devices; dev; dev = dev->next, i++) {
{
skip[i] = ShouldSkipDevice(client, stuff->deviceid, dev); skip[i] = ShouldSkipDevice(client, stuff->deviceid, dev);
if (!skip[i]) if (!skip[i])
len += SizeDeviceInfo(dev); len += SizeDeviceInfo(dev);
} }
for (dev = inputInfo.off_devices; dev; dev = dev->next, i++) for (dev = inputInfo.off_devices; dev; dev = dev->next, i++) {
{
skip[i] = ShouldSkipDevice(client, stuff->deviceid, dev); skip[i] = ShouldSkipDevice(client, stuff->deviceid, dev);
if (!skip[i]) if (!skip[i])
len += SizeDeviceInfo(dev); len += SizeDeviceInfo(dev);
@ -115,39 +111,34 @@ ProcXIQueryDevice(ClientPtr client)
rep.repType = X_Reply; rep.repType = X_Reply;
rep.RepType = X_XIQueryDevice; rep.RepType = X_XIQueryDevice;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
rep.length = len/4; rep.length = len / 4;
rep.num_devices = 0; rep.num_devices = 0;
ptr = info; ptr = info;
if (dev) if (dev) {
{ len = ListDeviceInfo(client, dev, (xXIDeviceInfo *) info);
len = ListDeviceInfo(client, dev, (xXIDeviceInfo*)info);
if (client->swapped) if (client->swapped)
SwapDeviceInfo(dev, (xXIDeviceInfo*)info); SwapDeviceInfo(dev, (xXIDeviceInfo *) info);
info += len; info += len;
rep.num_devices = 1; rep.num_devices = 1;
} else }
{ else {
i = 0; i = 0;
for (dev = inputInfo.devices; dev; dev = dev->next, i++) for (dev = inputInfo.devices; dev; dev = dev->next, i++) {
{ if (!skip[i]) {
if (!skip[i]) len = ListDeviceInfo(client, dev, (xXIDeviceInfo *) info);
{
len = ListDeviceInfo(client, dev, (xXIDeviceInfo*)info);
if (client->swapped) if (client->swapped)
SwapDeviceInfo(dev, (xXIDeviceInfo*)info); SwapDeviceInfo(dev, (xXIDeviceInfo *) info);
info += len; info += len;
rep.num_devices++; rep.num_devices++;
} }
} }
for (dev = inputInfo.off_devices; dev; dev = dev->next, i++) for (dev = inputInfo.off_devices; dev; dev = dev->next, i++) {
{ if (!skip[i]) {
if (!skip[i]) len = ListDeviceInfo(client, dev, (xXIDeviceInfo *) info);
{
len = ListDeviceInfo(client, dev, (xXIDeviceInfo*)info);
if (client->swapped) if (client->swapped)
SwapDeviceInfo(dev, (xXIDeviceInfo*)info); SwapDeviceInfo(dev, (xXIDeviceInfo *) info);
info += len; info += len;
rep.num_devices++; rep.num_devices++;
} }
@ -163,7 +154,7 @@ ProcXIQueryDevice(ClientPtr client)
} }
void void
SRepXIQueryDevice(ClientPtr client, int size, xXIQueryDeviceReply *rep) SRepXIQueryDevice(ClientPtr client, int size, xXIQueryDeviceReply * rep)
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
@ -171,10 +162,9 @@ SRepXIQueryDevice(ClientPtr client, int size, xXIQueryDeviceReply *rep)
/* Device info is already swapped, see ProcXIQueryDevice */ /* Device info is already swapped, see ProcXIQueryDevice */
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }
/** /**
* @return Whether the device should be included in the returned list. * @return Whether the device should be included in the returned list.
*/ */
@ -182,9 +172,9 @@ static Bool
ShouldSkipDevice(ClientPtr client, int deviceid, DeviceIntPtr dev) ShouldSkipDevice(ClientPtr client, int deviceid, DeviceIntPtr dev)
{ {
/* if all devices are not being queried, only master devices are */ /* if all devices are not being queried, only master devices are */
if (deviceid == XIAllDevices || IsMaster(dev)) if (deviceid == XIAllDevices || IsMaster(dev)) {
{
int rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixGetAttrAccess); int rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixGetAttrAccess);
if (rc == Success) if (rc == Success)
return FALSE; return FALSE;
} }
@ -215,23 +205,22 @@ SizeDeviceClasses(DeviceIntPtr dev)
{ {
int len = 0; int len = 0;
if (dev->button) if (dev->button) {
{
len += sizeof(xXIButtonInfo); len += sizeof(xXIButtonInfo);
len += dev->button->numButtons * sizeof(Atom); len += dev->button->numButtons * sizeof(Atom);
len += pad_to_int32(bits_to_bytes(dev->button->numButtons)); len += pad_to_int32(bits_to_bytes(dev->button->numButtons));
} }
if (dev->key) if (dev->key) {
{
XkbDescPtr xkb = dev->key->xkbInfo->desc; XkbDescPtr xkb = dev->key->xkbInfo->desc;
len += sizeof(xXIKeyInfo); len += sizeof(xXIKeyInfo);
len += (xkb->max_key_code - xkb->min_key_code + 1) * sizeof(uint32_t); len += (xkb->max_key_code - xkb->min_key_code + 1) * sizeof(uint32_t);
} }
if (dev->valuator) if (dev->valuator) {
{
int i; int i;
len += (sizeof(xXIValuatorInfo)) * dev->valuator->numAxes; len += (sizeof(xXIValuatorInfo)) * dev->valuator->numAxes;
for (i = 0; i < dev->valuator->numAxes; i++) { for (i = 0; i < dev->valuator->numAxes; i++) {
@ -246,13 +235,12 @@ SizeDeviceClasses(DeviceIntPtr dev)
return len; return len;
} }
/** /**
* Write button information into info. * Write button information into info.
* @return Number of bytes written into info. * @return Number of bytes written into info.
*/ */
int int
ListButtonInfo(DeviceIntPtr dev, xXIButtonInfo* info, Bool reportState) ListButtonInfo(DeviceIntPtr dev, xXIButtonInfo * info, Bool reportState)
{ {
unsigned char *bits; unsigned char *bits;
int mask_len; int mask_len;
@ -269,7 +257,7 @@ ListButtonInfo(DeviceIntPtr dev, xXIButtonInfo* info, Bool reportState)
info->num_buttons + mask_len; info->num_buttons + mask_len;
info->sourceid = dev->button->sourceid; info->sourceid = dev->button->sourceid;
bits = (unsigned char*)&info[1]; bits = (unsigned char *) &info[1];
memset(bits, 0, mask_len * 4); memset(bits, 0, mask_len * 4);
if (reportState) if (reportState)
@ -284,15 +272,16 @@ ListButtonInfo(DeviceIntPtr dev, xXIButtonInfo* info, Bool reportState)
} }
static void static void
SwapButtonInfo(DeviceIntPtr dev, xXIButtonInfo* info) SwapButtonInfo(DeviceIntPtr dev, xXIButtonInfo * info)
{ {
Atom *btn; Atom *btn;
int i; int i;
swaps(&info->type); swaps(&info->type);
swaps(&info->length); swaps(&info->length);
swaps(&info->sourceid); swaps(&info->sourceid);
for (i = 0, btn = (Atom*)&info[1]; i < info->num_buttons; i++, btn++) for (i = 0, btn = (Atom *) &info[1]; i < info->num_buttons; i++, btn++)
swapl(btn); swapl(btn);
swaps(&info->num_buttons); swaps(&info->num_buttons);
@ -303,7 +292,7 @@ SwapButtonInfo(DeviceIntPtr dev, xXIButtonInfo* info)
* @return Number of bytes written into info. * @return Number of bytes written into info.
*/ */
int int
ListKeyInfo(DeviceIntPtr dev, xXIKeyInfo* info) ListKeyInfo(DeviceIntPtr dev, xXIKeyInfo * info)
{ {
int i; int i;
XkbDescPtr xkb = dev->key->xkbInfo->desc; XkbDescPtr xkb = dev->key->xkbInfo->desc;
@ -311,10 +300,10 @@ ListKeyInfo(DeviceIntPtr dev, xXIKeyInfo* info)
info->type = KeyClass; info->type = KeyClass;
info->num_keycodes = xkb->max_key_code - xkb->min_key_code + 1; info->num_keycodes = xkb->max_key_code - xkb->min_key_code + 1;
info->length = sizeof(xXIKeyInfo)/4 + info->num_keycodes; info->length = sizeof(xXIKeyInfo) / 4 + info->num_keycodes;
info->sourceid = dev->key->sourceid; info->sourceid = dev->key->sourceid;
kc = (uint32_t*)&info[1]; kc = (uint32_t *) & info[1];
for (i = xkb->min_key_code; i <= xkb->max_key_code; i++, kc++) for (i = xkb->min_key_code; i <= xkb->max_key_code; i++, kc++)
*kc = i; *kc = i;
@ -322,15 +311,17 @@ ListKeyInfo(DeviceIntPtr dev, xXIKeyInfo* info)
} }
static void static void
SwapKeyInfo(DeviceIntPtr dev, xXIKeyInfo* info) SwapKeyInfo(DeviceIntPtr dev, xXIKeyInfo * info)
{ {
uint32_t *key; uint32_t *key;
int i; int i;
swaps(&info->type); swaps(&info->type);
swaps(&info->length); swaps(&info->length);
swaps(&info->sourceid); swaps(&info->sourceid);
for (i = 0, key = (uint32_t*)&info[1]; i < info->num_keycodes; i++, key++) for (i = 0, key = (uint32_t *) & info[1]; i < info->num_keycodes;
i++, key++)
swapl(key); swapl(key);
swaps(&info->num_keycodes); swaps(&info->num_keycodes);
@ -342,13 +333,13 @@ SwapKeyInfo(DeviceIntPtr dev, xXIKeyInfo* info)
* @return The number of bytes written into info. * @return The number of bytes written into info.
*/ */
int int
ListValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo* info, int axisnumber, ListValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo * info, int axisnumber,
Bool reportState) Bool reportState)
{ {
ValuatorClassPtr v = dev->valuator; ValuatorClassPtr v = dev->valuator;
info->type = ValuatorClass; info->type = ValuatorClass;
info->length = sizeof(xXIValuatorInfo)/4; info->length = sizeof(xXIValuatorInfo) / 4;
info->label = v->axes[axisnumber].label; info->label = v->axes[axisnumber].label;
info->min.integral = v->axes[axisnumber].min_value; info->min.integral = v->axes[axisnumber].min_value;
info->min.frac = 0; info->min.frac = 0;
@ -367,7 +358,7 @@ ListValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo* info, int axisnumber,
} }
static void static void
SwapValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo* info) SwapValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo * info)
{ {
swaps(&info->type); swaps(&info->type);
swaps(&info->length); swaps(&info->length);
@ -381,7 +372,7 @@ SwapValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo* info)
} }
int int
ListScrollInfo(DeviceIntPtr dev, xXIScrollInfo *info, int axisnumber) ListScrollInfo(DeviceIntPtr dev, xXIScrollInfo * info, int axisnumber)
{ {
ValuatorClassPtr v = dev->valuator; ValuatorClassPtr v = dev->valuator;
AxisInfoPtr axis = &v->axes[axisnumber]; AxisInfoPtr axis = &v->axes[axisnumber];
@ -390,10 +381,9 @@ ListScrollInfo(DeviceIntPtr dev, xXIScrollInfo *info, int axisnumber)
return 0; return 0;
info->type = XIScrollClass; info->type = XIScrollClass;
info->length = sizeof(xXIScrollInfo)/4; info->length = sizeof(xXIScrollInfo) / 4;
info->number = axisnumber; info->number = axisnumber;
switch(axis->scroll.type) switch (axis->scroll.type) {
{
case SCROLL_TYPE_VERTICAL: case SCROLL_TYPE_VERTICAL:
info->scroll_type = XIScrollTypeVertical; info->scroll_type = XIScrollTypeVertical;
break; break;
@ -401,7 +391,8 @@ ListScrollInfo(DeviceIntPtr dev, xXIScrollInfo *info, int axisnumber)
info->scroll_type = XIScrollTypeHorizontal; info->scroll_type = XIScrollTypeHorizontal;
break; break;
default: default:
ErrorF("[Xi] Unknown scroll type %d. This is a bug.\n", axis->scroll.type); ErrorF("[Xi] Unknown scroll type %d. This is a bug.\n",
axis->scroll.type);
break; break;
} }
info->increment = double_to_fp3232(axis->scroll.increment); info->increment = double_to_fp3232(axis->scroll.increment);
@ -418,7 +409,7 @@ ListScrollInfo(DeviceIntPtr dev, xXIScrollInfo *info, int axisnumber)
} }
static void static void
SwapScrollInfo(DeviceIntPtr dev, xXIScrollInfo* info) SwapScrollInfo(DeviceIntPtr dev, xXIScrollInfo * info)
{ {
swaps(&info->type); swaps(&info->type);
swaps(&info->length); swaps(&info->length);
@ -435,7 +426,7 @@ SwapScrollInfo(DeviceIntPtr dev, xXIScrollInfo* info)
* @return The number of bytes written into info. * @return The number of bytes written into info.
*/ */
int int
ListTouchInfo(DeviceIntPtr dev, xXITouchInfo *touch) ListTouchInfo(DeviceIntPtr dev, xXITouchInfo * touch)
{ {
touch->type = XITouchClass; touch->type = XITouchClass;
touch->length = sizeof(xXITouchInfo) >> 2; touch->length = sizeof(xXITouchInfo) >> 2;
@ -447,28 +438,30 @@ ListTouchInfo(DeviceIntPtr dev, xXITouchInfo *touch)
} }
static void static void
SwapTouchInfo(DeviceIntPtr dev, xXITouchInfo* touch) SwapTouchInfo(DeviceIntPtr dev, xXITouchInfo * touch)
{ {
swaps(&touch->type); swaps(&touch->type);
swaps(&touch->length); swaps(&touch->length);
swaps(&touch->sourceid); swaps(&touch->sourceid);
} }
int GetDeviceUse(DeviceIntPtr dev, uint16_t *attachment) int
GetDeviceUse(DeviceIntPtr dev, uint16_t * attachment)
{ {
DeviceIntPtr master = GetMaster(dev, MASTER_ATTACHED); DeviceIntPtr master = GetMaster(dev, MASTER_ATTACHED);
int use; int use;
if (IsMaster(dev)) if (IsMaster(dev)) {
{
DeviceIntPtr paired = GetPairedDevice(dev); DeviceIntPtr paired = GetPairedDevice(dev);
use = IsPointerDevice(dev) ? XIMasterPointer : XIMasterKeyboard; use = IsPointerDevice(dev) ? XIMasterPointer : XIMasterKeyboard;
*attachment = (paired ? paired->id : 0); *attachment = (paired ? paired->id : 0);
} else if (!IsFloating(dev)) }
{ else if (!IsFloating(dev)) {
use = IsPointerDevice(master) ? XISlavePointer : XISlaveKeyboard; use = IsPointerDevice(master) ? XISlavePointer : XISlaveKeyboard;
*attachment = master->id; *attachment = master->id;
} else }
else
use = XIFloatingSlave; use = XIFloatingSlave;
return use; return use;
@ -480,9 +473,9 @@ int GetDeviceUse(DeviceIntPtr dev, uint16_t *attachment)
* @return The number of bytes used. * @return The number of bytes used.
*/ */
static int static int
ListDeviceInfo(ClientPtr client, DeviceIntPtr dev, xXIDeviceInfo* info) ListDeviceInfo(ClientPtr client, DeviceIntPtr dev, xXIDeviceInfo * info)
{ {
char *any = (char*)&info[1]; char *any = (char *) &info[1];
int len = 0, total_len = 0; int len = 0, total_len = 0;
info->deviceid = dev->id; info->deviceid = dev->id;
@ -509,7 +502,7 @@ ListDeviceInfo(ClientPtr client, DeviceIntPtr dev, xXIDeviceInfo* info)
*/ */
int int
ListDeviceClasses(ClientPtr client, DeviceIntPtr dev, ListDeviceClasses(ClientPtr client, DeviceIntPtr dev,
char *any, uint16_t *nclasses) char *any, uint16_t * nclasses)
{ {
int total_len = 0; int total_len = 0;
int len; int len;
@ -519,43 +512,38 @@ ListDeviceClasses(ClientPtr client, DeviceIntPtr dev,
/* Check if the current device state should be suppressed */ /* Check if the current device state should be suppressed */
rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixReadAccess); rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixReadAccess);
if (dev->button) if (dev->button) {
{
(*nclasses)++; (*nclasses)++;
len = ListButtonInfo(dev, (xXIButtonInfo*)any, rc == Success); len = ListButtonInfo(dev, (xXIButtonInfo *) any, rc == Success);
any += len; any += len;
total_len += len; total_len += len;
} }
if (dev->key) if (dev->key) {
{
(*nclasses)++; (*nclasses)++;
len = ListKeyInfo(dev, (xXIKeyInfo*)any); len = ListKeyInfo(dev, (xXIKeyInfo *) any);
any += len; any += len;
total_len += len; total_len += len;
} }
for (i = 0; dev->valuator && i < dev->valuator->numAxes; i++) for (i = 0; dev->valuator && i < dev->valuator->numAxes; i++) {
{
(*nclasses)++; (*nclasses)++;
len = ListValuatorInfo(dev, (xXIValuatorInfo*)any, i, rc == Success); len = ListValuatorInfo(dev, (xXIValuatorInfo *) any, i, rc == Success);
any += len; any += len;
total_len += len; total_len += len;
} }
for (i = 0; dev->valuator && i < dev->valuator->numAxes; i++) for (i = 0; dev->valuator && i < dev->valuator->numAxes; i++) {
{ len = ListScrollInfo(dev, (xXIScrollInfo *) any, i);
len = ListScrollInfo(dev, (xXIScrollInfo*)any, i);
if (len) if (len)
(*nclasses)++; (*nclasses)++;
any += len; any += len;
total_len += len; total_len += len;
} }
if (dev->touch) if (dev->touch) {
{
(*nclasses)++; (*nclasses)++;
len = ListTouchInfo(dev, (xXITouchInfo*)any); len = ListTouchInfo(dev, (xXITouchInfo *) any);
any += len; any += len;
total_len += len; total_len += len;
} }
@ -564,33 +552,32 @@ ListDeviceClasses(ClientPtr client, DeviceIntPtr dev,
} }
static void static void
SwapDeviceInfo(DeviceIntPtr dev, xXIDeviceInfo* info) SwapDeviceInfo(DeviceIntPtr dev, xXIDeviceInfo * info)
{ {
char *any = (char*)&info[1]; char *any = (char *) &info[1];
int i; int i;
/* Skip over name */ /* Skip over name */
any += pad_to_int32(info->name_len); any += pad_to_int32(info->name_len);
for (i = 0; i < info->num_classes; i++) for (i = 0; i < info->num_classes; i++) {
{ int len = ((xXIAnyInfo *) any)->length;
int len = ((xXIAnyInfo*)any)->length;
switch(((xXIAnyInfo*)any)->type) switch (((xXIAnyInfo *) any)->type) {
{
case XIButtonClass: case XIButtonClass:
SwapButtonInfo(dev, (xXIButtonInfo*)any); SwapButtonInfo(dev, (xXIButtonInfo *) any);
break; break;
case XIKeyClass: case XIKeyClass:
SwapKeyInfo(dev, (xXIKeyInfo*)any); SwapKeyInfo(dev, (xXIKeyInfo *) any);
break; break;
case XIValuatorClass: case XIValuatorClass:
SwapValuatorInfo(dev, (xXIValuatorInfo*)any); SwapValuatorInfo(dev, (xXIValuatorInfo *) any);
break; break;
case XIScrollClass: case XIScrollClass:
SwapScrollInfo(dev, (xXIScrollInfo*)any); SwapScrollInfo(dev, (xXIScrollInfo *) any);
break; break;
case XITouchClass: case XITouchClass:
SwapTouchInfo(dev, (xXITouchInfo*)any); SwapTouchInfo(dev, (xXITouchInfo *) any);
break; break;
} }

View File

@ -35,15 +35,15 @@
int SProcXIQueryDevice(ClientPtr client); int SProcXIQueryDevice(ClientPtr client);
int ProcXIQueryDevice(ClientPtr client); int ProcXIQueryDevice(ClientPtr client);
void SRepXIQueryDevice(ClientPtr client, int size, xXIQueryDeviceReply *rep); void SRepXIQueryDevice(ClientPtr client, int size, xXIQueryDeviceReply * rep);
int SizeDeviceClasses(DeviceIntPtr dev); int SizeDeviceClasses(DeviceIntPtr dev);
int ListDeviceClasses(ClientPtr client, DeviceIntPtr dev, int ListDeviceClasses(ClientPtr client, DeviceIntPtr dev,
char* any, uint16_t* nclasses); char *any, uint16_t * nclasses);
int GetDeviceUse(DeviceIntPtr dev, uint16_t *attachment); int GetDeviceUse(DeviceIntPtr dev, uint16_t * attachment);
int ListButtonInfo(DeviceIntPtr dev, xXIButtonInfo* info, Bool reportState); int ListButtonInfo(DeviceIntPtr dev, xXIButtonInfo * info, Bool reportState);
int ListKeyInfo(DeviceIntPtr dev, xXIKeyInfo* info); int ListKeyInfo(DeviceIntPtr dev, xXIKeyInfo * info);
int ListValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo* info, int ListValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo * info,
int axisnumber, Bool reportState); int axisnumber, Bool reportState);
int ListScrollInfo(DeviceIntPtr dev, xXIScrollInfo* info, int axisnumber); int ListScrollInfo(DeviceIntPtr dev, xXIScrollInfo * info, int axisnumber);
int ListTouchInfo(DeviceIntPtr dev, xXITouchInfo* info); int ListTouchInfo(DeviceIntPtr dev, xXITouchInfo * info);
#endif /* QUERYDEV_H */ #endif /* QUERYDEV_H */

View File

@ -84,24 +84,19 @@ ProcXIQueryPointer(ClientPtr client)
REQUEST_SIZE_MATCH(xXIQueryPointerReq); REQUEST_SIZE_MATCH(xXIQueryPointerReq);
rc = dixLookupDevice(&pDev, stuff->deviceid, client, DixReadAccess); rc = dixLookupDevice(&pDev, stuff->deviceid, client, DixReadAccess);
if (rc != Success) if (rc != Success) {
{
client->errorValue = stuff->deviceid; client->errorValue = stuff->deviceid;
return rc; return rc;
} }
if (pDev->valuator == NULL || IsKeyboardDevice(pDev) || if (pDev->valuator == NULL || IsKeyboardDevice(pDev) || (!IsMaster(pDev) && !IsFloating(pDev))) { /* no attached devices */
(!IsMaster(pDev) && !IsFloating(pDev))) /* no attached devices */
{
client->errorValue = stuff->deviceid; client->errorValue = stuff->deviceid;
return BadDevice; return BadDevice;
} }
rc = dixLookupWindow(&pWin, stuff->win, client, DixGetAttrAccess); rc = dixLookupWindow(&pWin, stuff->win, client, DixGetAttrAccess);
if (rc != Success) if (rc != Success) {
{ SendErrorToClient(client, IReqCode, X_XIQueryPointer, stuff->win, rc);
SendErrorToClient(client, IReqCode, X_XIQueryPointer,
stuff->win, rc);
return Success; return Success;
} }
@ -125,8 +120,7 @@ ProcXIQueryPointer(ClientPtr client)
rep.root_y = FP1616(pSprite->hot.y, 0); rep.root_y = FP1616(pSprite->hot.y, 0);
rep.child = None; rep.child = None;
if (kbd) if (kbd) {
{
state = &kbd->key->xkbInfo->state; state = &kbd->key->xkbInfo->state;
rep.mods.base_mods = state->base_mods; rep.mods.base_mods = state->base_mods;
rep.mods.latched_mods = state->latched_mods; rep.mods.latched_mods = state->latched_mods;
@ -137,10 +131,11 @@ ProcXIQueryPointer(ClientPtr client)
rep.group.locked_group = state->locked_group; rep.group.locked_group = state->locked_group;
} }
if (pDev->button) if (pDev->button) {
{
int i, down; int i, down;
rep.buttons_len = bytes_to_int32(bits_to_bytes(pDev->button->numButtons));
rep.buttons_len =
bytes_to_int32(bits_to_bytes(pDev->button->numButtons));
rep.length += rep.buttons_len; rep.length += rep.buttons_len;
buttons_size = rep.buttons_len * 4; buttons_size = rep.buttons_len * 4;
buttons = calloc(1, buttons_size); buttons = calloc(1, buttons_size);
@ -149,41 +144,37 @@ ProcXIQueryPointer(ClientPtr client)
down = pDev->button->buttonsDown; down = pDev->button->buttonsDown;
for (i = 0; i < pDev->button->numButtons && down; i++) for (i = 0; i < pDev->button->numButtons && down; i++) {
{ if (BitIsOn(pDev->button->down, i)) {
if (BitIsOn(pDev->button->down, i))
{
SetBit(buttons, i); SetBit(buttons, i);
down--; down--;
} }
} }
} else }
else
rep.buttons_len = 0; rep.buttons_len = 0;
if (pSprite->hot.pScreen == pWin->drawable.pScreen) if (pSprite->hot.pScreen == pWin->drawable.pScreen) {
{
rep.same_screen = xTrue; rep.same_screen = xTrue;
rep.win_x = FP1616(pSprite->hot.x - pWin->drawable.x, 0); rep.win_x = FP1616(pSprite->hot.x - pWin->drawable.x, 0);
rep.win_y = FP1616(pSprite->hot.y - pWin->drawable.y, 0); rep.win_y = FP1616(pSprite->hot.y - pWin->drawable.y, 0);
for (t = pSprite->win; t; t = t->parent) for (t = pSprite->win; t; t = t->parent)
if (t->parent == pWin) if (t->parent == pWin) {
{
rep.child = t->drawable.id; rep.child = t->drawable.id;
break; break;
} }
} else }
{ else {
rep.same_screen = xFalse; rep.same_screen = xFalse;
rep.win_x = 0; rep.win_x = 0;
rep.win_y = 0; rep.win_y = 0;
} }
#ifdef PANORAMIX #ifdef PANORAMIX
if(!noPanoramiXExtension) { if (!noPanoramiXExtension) {
rep.root_x += FP1616(screenInfo.screens[0]->x, 0); rep.root_x += FP1616(screenInfo.screens[0]->x, 0);
rep.root_y += FP1616(screenInfo.screens[0]->y, 0); rep.root_y += FP1616(screenInfo.screens[0]->y, 0);
if (stuff->win == rep.root) if (stuff->win == rep.root) {
{
rep.win_x += FP1616(screenInfo.screens[0]->x, 0); rep.win_x += FP1616(screenInfo.screens[0]->x, 0);
rep.win_y += FP1616(screenInfo.screens[0]->y, 0); rep.win_y += FP1616(screenInfo.screens[0]->y, 0);
} }
@ -207,8 +198,7 @@ ProcXIQueryPointer(ClientPtr client)
*/ */
void void
SRepXIQueryPointer(ClientPtr client, int size, SRepXIQueryPointer(ClientPtr client, int size, xXIQueryPointerReply * rep)
xXIQueryPointerReply * rep)
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
@ -220,6 +210,5 @@ SRepXIQueryPointer(ClientPtr client, int size,
swapl(&rep->win_y); swapl(&rep->win_y);
swaps(&rep->buttons_len); swaps(&rep->buttons_len);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -30,10 +30,10 @@
#ifndef QUERYDP_H #ifndef QUERYDP_H
#define QUERYDP_H 1 #define QUERYDP_H 1
int SProcXIQueryPointer(ClientPtr /* client */); int SProcXIQueryPointer(ClientPtr /* client */ );
int ProcXIQueryPointer(ClientPtr /* client */); int ProcXIQueryPointer(ClientPtr /* client */ );
void SRepXIQueryPointer(ClientPtr /* client */ , void SRepXIQueryPointer(ClientPtr /* client */ ,
int /* size */ , int /* size */ ,
xXIQueryPointerReply * /* rep */); xXIQueryPointerReply * /* rep */ );
#endif /* QUERYDP_H */ #endif /* QUERYDP_H */

View File

@ -33,7 +33,6 @@
#include <dix-config.h> #include <dix-config.h>
#endif #endif
#include "inputstr.h" #include "inputstr.h"
#include <X11/Xmd.h> #include <X11/Xmd.h>
@ -46,6 +45,7 @@
#include "misc.h" #include "misc.h"
extern XExtensionVersion XIVersion; /* defined in getvers.c */ extern XExtensionVersion XIVersion; /* defined in getvers.c */
/** /**
* Return the supported XI version. * Return the supported XI version.
* *
@ -63,8 +63,7 @@ ProcXIQueryVersion(ClientPtr client)
REQUEST_SIZE_MATCH(xXIQueryVersionReq); REQUEST_SIZE_MATCH(xXIQueryVersionReq);
/* This request only exists after XI2 */ /* This request only exists after XI2 */
if (stuff->major_version < 2) if (stuff->major_version < 2) {
{
client->errorValue = stuff->major_version; client->errorValue = stuff->major_version;
return BadValue; return BadValue;
} }
@ -72,12 +71,11 @@ ProcXIQueryVersion(ClientPtr client)
pXIClient = dixLookupPrivate(&client->devPrivates, XIClientPrivateKey); pXIClient = dixLookupPrivate(&client->devPrivates, XIClientPrivateKey);
if (version_compare(XIVersion.major_version, XIVersion.minor_version, if (version_compare(XIVersion.major_version, XIVersion.minor_version,
stuff->major_version, stuff->minor_version) > 0) stuff->major_version, stuff->minor_version) > 0) {
{
major = stuff->major_version; major = stuff->major_version;
minor = stuff->minor_version; minor = stuff->minor_version;
} else }
{ else {
major = XIVersion.major_version; major = XIVersion.major_version;
minor = XIVersion.minor_version; minor = XIVersion.minor_version;
} }
@ -112,11 +110,11 @@ SProcXIQueryVersion(ClientPtr client)
} }
void void
SRepXIQueryVersion(ClientPtr client, int size, xXIQueryVersionReply *rep) SRepXIQueryVersion(ClientPtr client, int size, xXIQueryVersionReply * rep)
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
swaps(&rep->major_version); swaps(&rep->major_version);
swaps(&rep->minor_version); swaps(&rep->minor_version);
WriteToClient(client, size, (char *)rep); WriteToClient(client, size, (char *) rep);
} }

View File

@ -35,6 +35,6 @@
int SProcXIQueryVersion(ClientPtr client); int SProcXIQueryVersion(ClientPtr client);
int ProcXIQueryVersion(ClientPtr client); int ProcXIQueryVersion(ClientPtr client);
void SRepXIQueryVersion(ClientPtr client, int size, xXIQueryVersionReply* rep); void SRepXIQueryVersion(ClientPtr client, int size, xXIQueryVersionReply * rep);
#endif /* QUERYVERSION_H */ #endif /* QUERYVERSION_H */

View File

@ -27,7 +27,6 @@
#include <dix-config.h> #include <dix-config.h>
#endif #endif
#include "dixstruct.h" #include "dixstruct.h"
#include "windowstr.h" #include "windowstr.h"
#include "exglobals.h" #include "exglobals.h"
@ -43,15 +42,14 @@
* *
* @return BadValue if at least one invalid bit is set or Success otherwise. * @return BadValue if at least one invalid bit is set or Success otherwise.
*/ */
int XICheckInvalidMaskBits(ClientPtr client, unsigned char *mask, int len) int
XICheckInvalidMaskBits(ClientPtr client, unsigned char *mask, int len)
{ {
if (len >= XIMaskLen(XI2LASTEVENT)) if (len >= XIMaskLen(XI2LASTEVENT)) {
{
int i; int i;
for (i = XI2LASTEVENT + 1; i < len * 8; i++)
{ for (i = XI2LASTEVENT + 1; i < len * 8; i++) {
if (BitIsOn(mask, i)) if (BitIsOn(mask, i)) {
{
client->errorValue = i; client->errorValue = i;
return BadValue; return BadValue;
} }
@ -65,7 +63,7 @@ int
SProcXISelectEvents(ClientPtr client) SProcXISelectEvents(ClientPtr client)
{ {
int i; int i;
xXIEventMask* evmask; xXIEventMask *evmask;
REQUEST(xXISelectEventsReq); REQUEST(xXISelectEventsReq);
swaps(&stuff->length); swaps(&stuff->length);
@ -73,12 +71,12 @@ SProcXISelectEvents(ClientPtr client)
swapl(&stuff->win); swapl(&stuff->win);
swaps(&stuff->num_masks); swaps(&stuff->num_masks);
evmask = (xXIEventMask*)&stuff[1]; evmask = (xXIEventMask *) & stuff[1];
for (i = 0; i < stuff->num_masks; i++) for (i = 0; i < stuff->num_masks; i++) {
{
swaps(&evmask->deviceid); swaps(&evmask->deviceid);
swaps(&evmask->mask_len); swaps(&evmask->mask_len);
evmask = (xXIEventMask*)(((char*)&evmask[1]) + evmask->mask_len * 4); evmask =
(xXIEventMask *) (((char *) &evmask[1]) + evmask->mask_len * 4);
} }
return (ProcXISelectEvents(client)); return (ProcXISelectEvents(client));
@ -108,10 +106,9 @@ ProcXISelectEvents(ClientPtr client)
len = sz_xXISelectEventsReq; len = sz_xXISelectEventsReq;
/* check request validity */ /* check request validity */
evmask = (xXIEventMask*)&stuff[1]; evmask = (xXIEventMask *) & stuff[1];
num_masks = stuff->num_masks; num_masks = stuff->num_masks;
while(num_masks--) while (num_masks--) {
{
len += sizeof(xXIEventMask) + evmask->mask_len * 4; len += sizeof(xXIEventMask) + evmask->mask_len * 4;
if (bytes_to_int32(len) > stuff->length) if (bytes_to_int32(len) > stuff->length)
@ -127,20 +124,19 @@ ProcXISelectEvents(ClientPtr client)
return rc; return rc;
/* hierarchy event mask is not allowed on devices */ /* hierarchy event mask is not allowed on devices */
if (evmask->deviceid != XIAllDevices && evmask->mask_len >= 1) if (evmask->deviceid != XIAllDevices && evmask->mask_len >= 1) {
{ unsigned char *bits = (unsigned char *) &evmask[1];
unsigned char *bits = (unsigned char*)&evmask[1];
if (BitIsOn(bits, XI_HierarchyChanged)) if (BitIsOn(bits, XI_HierarchyChanged)) {
{
client->errorValue = XI_HierarchyChanged; client->errorValue = XI_HierarchyChanged;
return BadValue; return BadValue;
} }
} }
/* Raw events may only be selected on root windows */ /* Raw events may only be selected on root windows */
if (win->parent && evmask->mask_len >= 1) if (win->parent && evmask->mask_len >= 1) {
{ unsigned char *bits = (unsigned char *) &evmask[1];
unsigned char *bits = (unsigned char*)&evmask[1];
if (BitIsOn(bits, XI_RawKeyPress) || if (BitIsOn(bits, XI_RawKeyPress) ||
BitIsOn(bits, XI_RawKeyRelease) || BitIsOn(bits, XI_RawKeyRelease) ||
BitIsOn(bits, XI_RawButtonPress) || BitIsOn(bits, XI_RawButtonPress) ||
@ -148,16 +144,14 @@ ProcXISelectEvents(ClientPtr client)
BitIsOn(bits, XI_RawMotion) || BitIsOn(bits, XI_RawMotion) ||
BitIsOn(bits, XI_RawTouchBegin) || BitIsOn(bits, XI_RawTouchBegin) ||
BitIsOn(bits, XI_RawTouchUpdate) || BitIsOn(bits, XI_RawTouchUpdate) ||
BitIsOn(bits, XI_RawTouchEnd)) BitIsOn(bits, XI_RawTouchEnd)) {
{
client->errorValue = XI_RawKeyPress; client->errorValue = XI_RawKeyPress;
return BadValue; return BadValue;
} }
} }
if (evmask->mask_len >= 1) if (evmask->mask_len >= 1) {
{ unsigned char *bits = (unsigned char *) &evmask[1];
unsigned char *bits = (unsigned char*)&evmask[1];
/* All three touch events must be selected at once */ /* All three touch events must be selected at once */
if ((BitIsOn(bits, XI_TouchBegin) || if ((BitIsOn(bits, XI_TouchBegin) ||
@ -166,8 +160,7 @@ ProcXISelectEvents(ClientPtr client)
BitIsOn(bits, XI_TouchEnd)) && BitIsOn(bits, XI_TouchEnd)) &&
(!BitIsOn(bits, XI_TouchBegin) || (!BitIsOn(bits, XI_TouchBegin) ||
!BitIsOn(bits, XI_TouchUpdate) || !BitIsOn(bits, XI_TouchUpdate) ||
!BitIsOn(bits, XI_TouchEnd))) !BitIsOn(bits, XI_TouchEnd))) {
{
client->errorValue = XI_TouchBegin; client->errorValue = XI_TouchBegin;
return BadValue; return BadValue;
} }
@ -175,20 +168,20 @@ ProcXISelectEvents(ClientPtr client)
/* Only one client per window may select for touch events on the /* Only one client per window may select for touch events on the
* same devices, including master devices. * same devices, including master devices.
* XXX: This breaks if a device goes from floating to attached. */ * XXX: This breaks if a device goes from floating to attached. */
if (BitIsOn(bits, XI_TouchBegin)) if (BitIsOn(bits, XI_TouchBegin)) {
{
OtherInputMasks *inputMasks = wOtherInputMasks(win); OtherInputMasks *inputMasks = wOtherInputMasks(win);
InputClients *iclient = NULL; InputClients *iclient = NULL;
if (inputMasks) if (inputMasks)
iclient = inputMasks->inputClients; iclient = inputMasks->inputClients;
for (; iclient; iclient = iclient->next) for (; iclient; iclient = iclient->next) {
{
DeviceIntPtr dummy; DeviceIntPtr dummy;
if (CLIENT_ID(iclient->resource) == client->index) if (CLIENT_ID(iclient->resource) == client->index)
continue; continue;
dixLookupDevice(&dummy, evmask->deviceid, serverClient, DixReadAccess); dixLookupDevice(&dummy, evmask->deviceid, serverClient,
DixReadAccess);
if (!dummy) if (!dummy)
return BadImplementation; /* this shouldn't happen */ return BadImplementation; /* this shouldn't happen */
@ -198,11 +191,13 @@ ProcXISelectEvents(ClientPtr client)
} }
} }
if (XICheckInvalidMaskBits(client, (unsigned char*)&evmask[1], if (XICheckInvalidMaskBits(client, (unsigned char *) &evmask[1],
evmask->mask_len * 4) != Success) evmask->mask_len * 4) != Success)
return BadValue; return BadValue;
evmask = (xXIEventMask*)(((unsigned char*)evmask) + evmask->mask_len * 4); evmask =
(xXIEventMask *) (((unsigned char *) evmask) +
evmask->mask_len * 4);
evmask++; evmask++;
} }
@ -210,21 +205,22 @@ ProcXISelectEvents(ClientPtr client)
return BadLength; return BadLength;
/* Set masks on window */ /* Set masks on window */
evmask = (xXIEventMask*)&stuff[1]; evmask = (xXIEventMask *) & stuff[1];
num_masks = stuff->num_masks; num_masks = stuff->num_masks;
while(num_masks--) while (num_masks--) {
{
if (evmask->deviceid == XIAllDevices || if (evmask->deviceid == XIAllDevices ||
evmask->deviceid == XIAllMasterDevices) evmask->deviceid == XIAllMasterDevices) {
{
dummy.id = evmask->deviceid; dummy.id = evmask->deviceid;
dev = &dummy; dev = &dummy;
} else }
else
dixLookupDevice(&dev, evmask->deviceid, client, DixUseAccess); dixLookupDevice(&dev, evmask->deviceid, client, DixUseAccess);
if (XISetEventMask(dev, win, client, evmask->mask_len * 4, if (XISetEventMask(dev, win, client, evmask->mask_len * 4,
(unsigned char*)&evmask[1]) != Success) (unsigned char *) &evmask[1]) != Success)
return BadAlloc; return BadAlloc;
evmask = (xXIEventMask*)(((unsigned char*)evmask) + evmask->mask_len * 4); evmask =
(xXIEventMask *) (((unsigned char *) evmask) +
evmask->mask_len * 4);
evmask++; evmask++;
} }
@ -234,7 +230,6 @@ ProcXISelectEvents(ClientPtr client)
return Success; return Success;
} }
int int
SProcXIGetSelectedEvents(ClientPtr client) SProcXIGetSelectedEvents(ClientPtr client)
{ {
@ -272,8 +267,7 @@ ProcXIGetSelectedEvents(ClientPtr client)
reply.num_masks = 0; reply.num_masks = 0;
masks = wOtherInputMasks(win); masks = wOtherInputMasks(win);
if (masks) if (masks) {
{
for (others = wOtherInputMasks(win)->inputClients; others; for (others = wOtherInputMasks(win)->inputClients; others;
others = others->next) { others = others->next) {
if (SameClient(others, client)) { if (SameClient(others, client)) {
@ -282,48 +276,43 @@ ProcXIGetSelectedEvents(ClientPtr client)
} }
} }
if (!others) if (!others) {
{
WriteReplyToClient(client, sizeof(xXIGetSelectedEventsReply), &reply); WriteReplyToClient(client, sizeof(xXIGetSelectedEventsReply), &reply);
return Success; return Success;
} }
buffer = calloc(MAXDEVICES, sizeof(xXIEventMask) + pad_to_int32(XI2MASKSIZE)); buffer =
calloc(MAXDEVICES, sizeof(xXIEventMask) + pad_to_int32(XI2MASKSIZE));
if (!buffer) if (!buffer)
return BadAlloc; return BadAlloc;
evmask = (xXIEventMask*)buffer; evmask = (xXIEventMask *) buffer;
for (i = 0; i < MAXDEVICES; i++) for (i = 0; i < MAXDEVICES; i++) {
{
int j; int j;
const unsigned char *devmask = xi2mask_get_one_mask(others->xi2mask, i); const unsigned char *devmask = xi2mask_get_one_mask(others->xi2mask, i);
if (i > 2) if (i > 2) {
{
rc = dixLookupDevice(&dev, i, client, DixGetAttrAccess); rc = dixLookupDevice(&dev, i, client, DixGetAttrAccess);
if (rc != Success) if (rc != Success)
continue; continue;
} }
for (j = xi2mask_mask_size(others->xi2mask) - 1; j >= 0; j--) {
if (devmask[j] != 0) {
int mask_len = (j + 4) / 4; /* j is an index, hence + 4, not + 3 */
for (j = xi2mask_mask_size(others->xi2mask) - 1; j >= 0; j--)
{
if (devmask[j] != 0)
{
int mask_len = (j + 4)/4; /* j is an index, hence + 4, not + 3 */
evmask->deviceid = i; evmask->deviceid = i;
evmask->mask_len = mask_len; evmask->mask_len = mask_len;
reply.num_masks++; reply.num_masks++;
reply.length += sizeof(xXIEventMask)/4 + evmask->mask_len; reply.length += sizeof(xXIEventMask) / 4 + evmask->mask_len;
if (client->swapped) if (client->swapped) {
{
swaps(&evmask->deviceid); swaps(&evmask->deviceid);
swaps(&evmask->mask_len); swaps(&evmask->mask_len);
} }
memcpy(&evmask[1], devmask, j + 1); memcpy(&evmask[1], devmask, j + 1);
evmask = (xXIEventMask*)((char*)evmask + evmask = (xXIEventMask *) ((char *) evmask +
sizeof(xXIEventMask) + mask_len * 4); sizeof(xXIEventMask) + mask_len * 4);
break; break;
} }
@ -339,13 +328,12 @@ ProcXIGetSelectedEvents(ClientPtr client)
return Success; return Success;
} }
void SRepXIGetSelectedEvents(ClientPtr client, void
int len, xXIGetSelectedEventsReply *rep) SRepXIGetSelectedEvents(ClientPtr client,
int len, xXIGetSelectedEventsReply * rep)
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
swaps(&rep->num_masks); swaps(&rep->num_masks);
WriteToClient(client, len, (char *)rep); WriteToClient(client, len, (char *) rep);
} }

View File

@ -35,6 +35,6 @@ int ProcXISelectEvents(ClientPtr client);
int SProcXIGetSelectedEvents(ClientPtr client); int SProcXIGetSelectedEvents(ClientPtr client);
int ProcXIGetSelectedEvents(ClientPtr client); int ProcXIGetSelectedEvents(ClientPtr client);
void SRepXIGetSelectedEvents(ClientPtr client, void SRepXIGetSelectedEvents(ClientPtr client,
int len, xXIGetSelectedEventsReply *rep); int len, xXIGetSelectedEventsReply * rep);
#endif /* _XISELECTEVENTS_H_ */ #endif /* _XISELECTEVENTS_H_ */

View File

@ -30,7 +30,6 @@
* default value. * default value.
*/ */
#ifdef HAVE_DIX_CONFIG_H #ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h> #include <dix-config.h>
#endif #endif
@ -69,36 +68,32 @@ ProcXISetClientPointer(ClientPtr client)
REQUEST(xXISetClientPointerReq); REQUEST(xXISetClientPointerReq);
REQUEST_SIZE_MATCH(xXISetClientPointerReq); REQUEST_SIZE_MATCH(xXISetClientPointerReq);
rc = dixLookupDevice(&pDev, stuff->deviceid, client, DixManageAccess); rc = dixLookupDevice(&pDev, stuff->deviceid, client, DixManageAccess);
if (rc != Success) if (rc != Success) {
{
client->errorValue = stuff->deviceid; client->errorValue = stuff->deviceid;
return rc; return rc;
} }
if (!IsMaster(pDev)) if (!IsMaster(pDev)) {
{
client->errorValue = stuff->deviceid; client->errorValue = stuff->deviceid;
return BadDevice; return BadDevice;
} }
pDev = GetMaster(pDev, MASTER_POINTER); pDev = GetMaster(pDev, MASTER_POINTER);
if (stuff->win != None) if (stuff->win != None) {
{
rc = dixLookupClient(&targetClient, stuff->win, client, rc = dixLookupClient(&targetClient, stuff->win, client,
DixManageAccess); DixManageAccess);
if (rc != Success) if (rc != Success)
return BadWindow; return BadWindow;
} else }
else
targetClient = client; targetClient = client;
rc = SetClientPointer(targetClient, pDev); rc = SetClientPointer(targetClient, pDev);
if (rc != Success) if (rc != Success) {
{
client->errorValue = stuff->deviceid; client->errorValue = stuff->deviceid;
return rc; return rc;
} }

View File

@ -30,7 +30,7 @@
#ifndef SETCPTR_H #ifndef SETCPTR_H
#define SETCPTR_H 1 #define SETCPTR_H 1
int SProcXISetClientPointer(ClientPtr /* client */); int SProcXISetClientPointer(ClientPtr /* client */ );
int ProcXISetClientPointer(ClientPtr /* client */); int ProcXISetClientPointer(ClientPtr /* client */ );
#endif /* SETCPTR_H */ #endif /* SETCPTR_H */

View File

@ -116,10 +116,10 @@ ProcXIGetFocus(ClientPtr client)
} }
void void
SRepXIGetFocus(ClientPtr client, int len, xXIGetFocusReply *rep) SRepXIGetFocus(ClientPtr client, int len, xXIGetFocusReply * rep)
{ {
swaps(&rep->sequenceNumber); swaps(&rep->sequenceNumber);
swapl(&rep->length); swapl(&rep->length);
swapl(&rep->focus); swapl(&rep->focus);
WriteToClient(client, len, (char *)rep); WriteToClient(client, len, (char *) rep);
} }

View File

@ -36,5 +36,5 @@ int ProcXISetFocus(ClientPtr client);
int SProcXIGetFocus(ClientPtr client); int SProcXIGetFocus(ClientPtr client);
int ProcXIGetFocus(ClientPtr client); int ProcXIGetFocus(ClientPtr client);
void SRepXIGetFocus(ClientPtr client, int len, xXIGetFocusReply* rep); void SRepXIGetFocus(ClientPtr client, int len, xXIGetFocusReply * rep);
#endif /* XISETDEVFOCUS_H */ #endif /* XISETDEVFOCUS_H */

View File

@ -45,7 +45,6 @@
#include "exglobals.h" #include "exglobals.h"
#include "mipointer.h" /* for miPointerUpdateSprite */ #include "mipointer.h" /* for miPointerUpdateSprite */
#include "xiwarppointer.h" #include "xiwarppointer.h"
/*********************************************************************** /***********************************************************************
* *
@ -89,24 +88,20 @@ ProcXIWarpPointer(ClientPtr client)
rc = dixLookupDevice(&pDev, stuff->deviceid, client, DixWriteAccess); rc = dixLookupDevice(&pDev, stuff->deviceid, client, DixWriteAccess);
if (rc != Success) if (rc != Success) {
{
client->errorValue = stuff->deviceid; client->errorValue = stuff->deviceid;
return rc; return rc;
} }
if ((!IsMaster(pDev) && !IsFloating(pDev)) || if ((!IsMaster(pDev) && !IsFloating(pDev)) ||
(IsMaster(pDev) && !IsPointerDevice(pDev))) (IsMaster(pDev) && !IsPointerDevice(pDev))) {
{
client->errorValue = stuff->deviceid; client->errorValue = stuff->deviceid;
return BadDevice; return BadDevice;
} }
if (stuff->dst_win != None) if (stuff->dst_win != None) {
{
rc = dixLookupWindow(&dest, stuff->dst_win, client, DixGetAttrAccess); rc = dixLookupWindow(&dest, stuff->dst_win, client, DixGetAttrAccess);
if (rc != Success) if (rc != Success) {
{
client->errorValue = stuff->dst_win; client->errorValue = stuff->dst_win;
return rc; return rc;
} }
@ -116,19 +111,17 @@ ProcXIWarpPointer(ClientPtr client)
x = pSprite->hotPhys.x; x = pSprite->hotPhys.x;
y = pSprite->hotPhys.y; y = pSprite->hotPhys.y;
src_x = stuff->src_x / (double)(1 << 16); src_x = stuff->src_x / (double) (1 << 16);
src_y = stuff->src_y / (double)(1 << 16); src_y = stuff->src_y / (double) (1 << 16);
dst_x = stuff->dst_x / (double)(1 << 16); dst_x = stuff->dst_x / (double) (1 << 16);
dst_y = stuff->dst_y / (double)(1 << 16); dst_y = stuff->dst_y / (double) (1 << 16);
if (stuff->src_win != None) if (stuff->src_win != None) {
{
int winX, winY; int winX, winY;
WindowPtr src; WindowPtr src;
rc = dixLookupWindow(&src, stuff->src_win, client, DixGetAttrAccess); rc = dixLookupWindow(&src, stuff->src_win, client, DixGetAttrAccess);
if (rc != Success) if (rc != Success) {
{
client->errorValue = stuff->src_win; client->errorValue = stuff->src_win;
return rc; return rc;
} }
@ -139,19 +132,19 @@ ProcXIWarpPointer(ClientPtr client)
x < winX + src_x || x < winX + src_x ||
y < winY + src_y || y < winY + src_y ||
(stuff->src_width != 0 && (stuff->src_width != 0 &&
winX + src_x + (int)stuff->src_width < 0) || winX + src_x + (int) stuff->src_width < 0) ||
(stuff->src_height != 0 && (stuff->src_height != 0 &&
winY + src_y + (int)stuff->src_height < y) || winY + src_y + (int) stuff->src_height < y) ||
!PointInWindowIsVisible(src, x, y)) !PointInWindowIsVisible(src, x, y))
return Success; return Success;
} }
if (dest) if (dest) {
{
x = dest->drawable.x; x = dest->drawable.x;
y = dest->drawable.y; y = dest->drawable.y;
newScreen = dest->drawable.pScreen; newScreen = dest->drawable.pScreen;
} else }
else
newScreen = pSprite->hotPhys.pScreen; newScreen = pSprite->hotPhys.pScreen;
x += dst_x; x += dst_x;
@ -167,8 +160,7 @@ ProcXIWarpPointer(ClientPtr client)
else if (y > newScreen->height) else if (y > newScreen->height)
y = newScreen->height - 1; y = newScreen->height - 1;
if (newScreen == pSprite->hotPhys.pScreen) if (newScreen == pSprite->hotPhys.pScreen) {
{
if (x < pSprite->physLimits.x1) if (x < pSprite->physLimits.x1)
x = pSprite->physLimits.x1; x = pSprite->physLimits.x1;
else if (x >= pSprite->physLimits.x2) else if (x >= pSprite->physLimits.x2)
@ -181,9 +173,9 @@ ProcXIWarpPointer(ClientPtr client)
if (pSprite->hotShape) if (pSprite->hotShape)
ConfineToShape(pDev, pSprite->hotShape, &x, &y); ConfineToShape(pDev, pSprite->hotShape, &x, &y);
(*newScreen->SetCursorPosition)(pDev, newScreen, x, y, TRUE); (*newScreen->SetCursorPosition) (pDev, newScreen, x, y, TRUE);
} else if (!PointerConfinedToScreen(pDev)) }
{ else if (!PointerConfinedToScreen(pDev)) {
NewCurrentScreen(pDev, newScreen, x, y); NewCurrentScreen(pDev, newScreen, x, y);
} }
@ -196,4 +188,3 @@ ProcXIWarpPointer(ClientPtr client)
here though. */ here though. */
return Success; return Success;
} }

View File

@ -30,7 +30,7 @@
#ifndef WARPDEVP_H #ifndef WARPDEVP_H
#define WARPDEVP_H 1 #define WARPDEVP_H 1
int SProcXIWarpPointer(ClientPtr /* client */); int SProcXIWarpPointer(ClientPtr /* client */ );
int ProcXIWarpPointer(ClientPtr /* client */); int ProcXIWarpPointer(ClientPtr /* client */ );
#endif /* WARPDEVP_H */ #endif /* WARPDEVP_H */

View File

@ -48,23 +48,20 @@
#include "compint.h" #include "compint.h"
static void static void
compScreenUpdate (ScreenPtr pScreen) compScreenUpdate(ScreenPtr pScreen)
{ {
compCheckTree (pScreen); compCheckTree(pScreen);
compPaintChildrenToWindow (pScreen->root); compPaintChildrenToWindow(pScreen->root);
} }
static void static void
compBlockHandler (int i, compBlockHandler(int i, pointer blockData, pointer pTimeout, pointer pReadmask)
pointer blockData,
pointer pTimeout,
pointer pReadmask)
{ {
ScreenPtr pScreen = screenInfo.screens[i]; ScreenPtr pScreen = screenInfo.screens[i];
CompScreenPtr cs = GetCompScreen (pScreen); CompScreenPtr cs = GetCompScreen(pScreen);
pScreen->BlockHandler = cs->BlockHandler; pScreen->BlockHandler = cs->BlockHandler;
compScreenUpdate (pScreen); compScreenUpdate(pScreen);
(*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask); (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
/* Next damage will restore the block handler */ /* Next damage will restore the block handler */
@ -72,12 +69,12 @@ compBlockHandler (int i,
} }
static void static void
compReportDamage (DamagePtr pDamage, RegionPtr pRegion, void *closure) compReportDamage(DamagePtr pDamage, RegionPtr pRegion, void *closure)
{ {
WindowPtr pWin = (WindowPtr) closure; WindowPtr pWin = (WindowPtr) closure;
ScreenPtr pScreen = pWin->drawable.pScreen; ScreenPtr pScreen = pWin->drawable.pScreen;
CompScreenPtr cs = GetCompScreen (pScreen); CompScreenPtr cs = GetCompScreen(pScreen);
CompWindowPtr cw = GetCompWindow (pWin); CompWindowPtr cw = GetCompWindow(pWin);
if (!cs->BlockHandler) { if (!cs->BlockHandler) {
cs->BlockHandler = pScreen->BlockHandler; cs->BlockHandler = pScreen->BlockHandler;
@ -96,17 +93,16 @@ compReportDamage (DamagePtr pDamage, RegionPtr pRegion, void *closure)
} }
static void static void
compDestroyDamage (DamagePtr pDamage, void *closure) compDestroyDamage(DamagePtr pDamage, void *closure)
{ {
WindowPtr pWin = (WindowPtr) closure; WindowPtr pWin = (WindowPtr) closure;
CompWindowPtr cw = GetCompWindow (pWin); CompWindowPtr cw = GetCompWindow(pWin);
cw->damage = 0; cw->damage = 0;
} }
static Bool static Bool
compMarkWindows(WindowPtr pWin, compMarkWindows(WindowPtr pWin, WindowPtr *ppLayerWin)
WindowPtr *ppLayerWin)
{ {
ScreenPtr pScreen = pWin->drawable.pScreen; ScreenPtr pScreen = pWin->drawable.pScreen;
WindowPtr pLayerWin = pWin; WindowPtr pLayerWin = pWin;
@ -114,8 +110,8 @@ compMarkWindows(WindowPtr pWin,
if (!pWin->viewable) if (!pWin->viewable)
return FALSE; return FALSE;
(*pScreen->MarkOverlappedWindows)(pWin, pWin, &pLayerWin); (*pScreen->MarkOverlappedWindows) (pWin, pWin, &pLayerWin);
(*pScreen->MarkWindow)(pLayerWin->parent); (*pScreen->MarkWindow) (pLayerWin->parent);
*ppLayerWin = pLayerWin; *ppLayerWin = pLayerWin;
@ -127,19 +123,19 @@ compHandleMarkedWindows(WindowPtr pWin, WindowPtr pLayerWin)
{ {
ScreenPtr pScreen = pWin->drawable.pScreen; ScreenPtr pScreen = pWin->drawable.pScreen;
(*pScreen->ValidateTree)(pLayerWin->parent, pLayerWin, VTOther); (*pScreen->ValidateTree) (pLayerWin->parent, pLayerWin, VTOther);
(*pScreen->HandleExposures)(pLayerWin->parent); (*pScreen->HandleExposures) (pLayerWin->parent);
if (pScreen->PostValidateTree) if (pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pLayerWin->parent, pLayerWin, VTOther); (*pScreen->PostValidateTree) (pLayerWin->parent, pLayerWin, VTOther);
} }
/* /*
* Redirect one window for one client * Redirect one window for one client
*/ */
int int
compRedirectWindow (ClientPtr pClient, WindowPtr pWin, int update) compRedirectWindow(ClientPtr pClient, WindowPtr pWin, int update)
{ {
CompWindowPtr cw = GetCompWindow (pWin); CompWindowPtr cw = GetCompWindow(pWin);
CompClientWindowPtr ccw; CompClientWindowPtr ccw;
CompScreenPtr cs = GetCompScreen(pWin->drawable.pScreen); CompScreenPtr cs = GetCompScreen(pWin->drawable.pScreen);
WindowPtr pLayerWin; WindowPtr pLayerWin;
@ -165,36 +161,31 @@ compRedirectWindow (ClientPtr pClient, WindowPtr pWin, int update)
* The client *could* allocate multiple, but while supported, * The client *could* allocate multiple, but while supported,
* it is not expected to be common * it is not expected to be common
*/ */
ccw = malloc(sizeof (CompClientWindowRec)); ccw = malloc(sizeof(CompClientWindowRec));
if (!ccw) if (!ccw)
return BadAlloc; return BadAlloc;
ccw->id = FakeClientID (pClient->index); ccw->id = FakeClientID(pClient->index);
ccw->update = update; ccw->update = update;
/* /*
* Now make sure there's a per-window structure to hang this from * Now make sure there's a per-window structure to hang this from
*/ */
if (!cw) if (!cw) {
{ cw = malloc(sizeof(CompWindowRec));
cw = malloc(sizeof (CompWindowRec)); if (!cw) {
if (!cw)
{
free(ccw); free(ccw);
return BadAlloc; return BadAlloc;
} }
cw->damage = DamageCreate (compReportDamage, cw->damage = DamageCreate(compReportDamage,
compDestroyDamage, compDestroyDamage,
DamageReportNonEmpty, DamageReportNonEmpty,
FALSE, FALSE, pWin->drawable.pScreen, pWin);
pWin->drawable.pScreen, if (!cw->damage) {
pWin);
if (!cw->damage)
{
free(ccw); free(ccw);
free(cw); free(cw);
return BadAlloc; return BadAlloc;
} }
anyMarked = compMarkWindows (pWin, &pLayerWin); anyMarked = compMarkWindows(pWin, &pLayerWin);
RegionNull(&cw->borderClip); RegionNull(&cw->borderClip);
cw->update = CompositeRedirectAutomatic; cw->update = CompositeRedirectAutomatic;
@ -208,45 +199,42 @@ compRedirectWindow (ClientPtr pClient, WindowPtr pWin, int update)
} }
ccw->next = cw->clients; ccw->next = cw->clients;
cw->clients = ccw; cw->clients = ccw;
if (!AddResource (ccw->id, CompositeClientWindowType, pWin)) if (!AddResource(ccw->id, CompositeClientWindowType, pWin))
return BadAlloc; return BadAlloc;
if (ccw->update == CompositeRedirectManual) if (ccw->update == CompositeRedirectManual) {
{
if (!anyMarked) if (!anyMarked)
anyMarked = compMarkWindows (pWin, &pLayerWin); anyMarked = compMarkWindows(pWin, &pLayerWin);
if (cw->damageRegistered) if (cw->damageRegistered) {
{ DamageUnregister(&pWin->drawable, cw->damage);
DamageUnregister (&pWin->drawable, cw->damage);
cw->damageRegistered = FALSE; cw->damageRegistered = FALSE;
} }
cw->update = CompositeRedirectManual; cw->update = CompositeRedirectManual;
} }
else if (cw->update == CompositeRedirectAutomatic && !cw->damageRegistered) { else if (cw->update == CompositeRedirectAutomatic && !cw->damageRegistered) {
if (!anyMarked) if (!anyMarked)
anyMarked = compMarkWindows (pWin, &pLayerWin); anyMarked = compMarkWindows(pWin, &pLayerWin);
} }
if (!compCheckRedirect (pWin)) if (!compCheckRedirect(pWin)) {
{ FreeResource(ccw->id, RT_NONE);
FreeResource (ccw->id, RT_NONE);
return BadAlloc; return BadAlloc;
} }
if (anyMarked) if (anyMarked)
compHandleMarkedWindows (pWin, pLayerWin); compHandleMarkedWindows(pWin, pLayerWin);
return Success; return Success;
} }
void void
compRestoreWindow (WindowPtr pWin, PixmapPtr pPixmap) compRestoreWindow(WindowPtr pWin, PixmapPtr pPixmap)
{ {
ScreenPtr pScreen = pWin->drawable.pScreen; ScreenPtr pScreen = pWin->drawable.pScreen;
WindowPtr pParent = pWin->parent; WindowPtr pParent = pWin->parent;
if (pParent->drawable.depth == pWin->drawable.depth) { if (pParent->drawable.depth == pWin->drawable.depth) {
GCPtr pGC = GetScratchGC (pWin->drawable.depth, pScreen); GCPtr pGC = GetScratchGC(pWin->drawable.depth, pScreen);
int bw = (int) pWin->borderWidth; int bw = (int) pWin->borderWidth;
int x = bw; int x = bw;
int y = bw; int y = bw;
@ -255,14 +243,13 @@ compRestoreWindow (WindowPtr pWin, PixmapPtr pPixmap)
if (pGC) { if (pGC) {
ChangeGCVal val; ChangeGCVal val;
val.val = IncludeInferiors; val.val = IncludeInferiors;
ChangeGC (NullClient, pGC, GCSubwindowMode, &val); ChangeGC(NullClient, pGC, GCSubwindowMode, &val);
ValidateGC(&pWin->drawable, pGC); ValidateGC(&pWin->drawable, pGC);
(*pGC->ops->CopyArea) (&pPixmap->drawable, (*pGC->ops->CopyArea) (&pPixmap->drawable,
&pWin->drawable, &pWin->drawable, pGC, x, y, w, h, 0, 0);
pGC, FreeScratchGC(pGC);
x, y, w, h, 0, 0);
FreeScratchGC (pGC);
} }
} }
} }
@ -272,10 +259,10 @@ compRestoreWindow (WindowPtr pWin, PixmapPtr pPixmap)
* redirect and the per-window pointer as appropriate * redirect and the per-window pointer as appropriate
*/ */
void void
compFreeClientWindow (WindowPtr pWin, XID id) compFreeClientWindow(WindowPtr pWin, XID id)
{ {
ScreenPtr pScreen = pWin->drawable.pScreen; ScreenPtr pScreen = pWin->drawable.pScreen;
CompWindowPtr cw = GetCompWindow (pWin); CompWindowPtr cw = GetCompWindow(pWin);
CompClientWindowPtr ccw, *prev; CompClientWindowPtr ccw, *prev;
Bool anyMarked = FALSE; Bool anyMarked = FALSE;
WindowPtr pLayerWin; WindowPtr pLayerWin;
@ -283,10 +270,8 @@ compFreeClientWindow (WindowPtr pWin, XID id)
if (!cw) if (!cw)
return; return;
for (prev = &cw->clients; (ccw = *prev); prev = &ccw->next) for (prev = &cw->clients; (ccw = *prev); prev = &ccw->next) {
{ if (ccw->id == id) {
if (ccw->id == id)
{
*prev = ccw->next; *prev = ccw->next;
if (ccw->update == CompositeRedirectManual) if (ccw->update == CompositeRedirectManual)
cw->update = CompositeRedirectAutomatic; cw->update = CompositeRedirectAutomatic;
@ -294,17 +279,16 @@ compFreeClientWindow (WindowPtr pWin, XID id)
break; break;
} }
} }
if (!cw->clients) if (!cw->clients) {
{ anyMarked = compMarkWindows(pWin, &pLayerWin);
anyMarked = compMarkWindows (pWin, &pLayerWin);
if (pWin->redirectDraw != RedirectDrawNone) { if (pWin->redirectDraw != RedirectDrawNone) {
pPixmap = (*pScreen->GetWindowPixmap) (pWin); pPixmap = (*pScreen->GetWindowPixmap) (pWin);
compSetParentPixmap (pWin); compSetParentPixmap(pWin);
} }
if (cw->damage) if (cw->damage)
DamageDestroy (cw->damage); DamageDestroy(cw->damage);
RegionUninit(&cw->borderClip); RegionUninit(&cw->borderClip);
@ -312,21 +296,20 @@ compFreeClientWindow (WindowPtr pWin, XID id)
free(cw); free(cw);
} }
else if (cw->update == CompositeRedirectAutomatic && else if (cw->update == CompositeRedirectAutomatic &&
!cw->damageRegistered && pWin->redirectDraw != RedirectDrawNone) !cw->damageRegistered && pWin->redirectDraw != RedirectDrawNone) {
{ anyMarked = compMarkWindows(pWin, &pLayerWin);
anyMarked = compMarkWindows (pWin, &pLayerWin);
DamageRegister (&pWin->drawable, cw->damage); DamageRegister(&pWin->drawable, cw->damage);
cw->damageRegistered = TRUE; cw->damageRegistered = TRUE;
pWin->redirectDraw = RedirectDrawAutomatic; pWin->redirectDraw = RedirectDrawAutomatic;
DamageDamageRegion(&pWin->drawable, &pWin->borderSize); DamageDamageRegion(&pWin->drawable, &pWin->borderSize);
} }
if (anyMarked) if (anyMarked)
compHandleMarkedWindows (pWin, pLayerWin); compHandleMarkedWindows(pWin, pLayerWin);
if (pPixmap) { if (pPixmap) {
compRestoreWindow (pWin, pPixmap); compRestoreWindow(pWin, pPixmap);
(*pScreen->DestroyPixmap) (pPixmap); (*pScreen->DestroyPixmap) (pPixmap);
} }
} }
@ -336,18 +319,17 @@ compFreeClientWindow (WindowPtr pWin, XID id)
*/ */
int int
compUnredirectWindow (ClientPtr pClient, WindowPtr pWin, int update) compUnredirectWindow(ClientPtr pClient, WindowPtr pWin, int update)
{ {
CompWindowPtr cw = GetCompWindow (pWin); CompWindowPtr cw = GetCompWindow(pWin);
CompClientWindowPtr ccw; CompClientWindowPtr ccw;
if (!cw) if (!cw)
return BadValue; return BadValue;
for (ccw = cw->clients; ccw; ccw = ccw->next) for (ccw = cw->clients; ccw; ccw = ccw->next)
if (ccw->update == update && CLIENT_ID(ccw->id) == pClient->index) if (ccw->update == update && CLIENT_ID(ccw->id) == pClient->index) {
{ FreeResource(ccw->id, RT_NONE);
FreeResource (ccw->id, RT_NONE);
return Success; return Success;
} }
return BadValue; return BadValue;
@ -358,9 +340,9 @@ compUnredirectWindow (ClientPtr pClient, WindowPtr pWin, int update)
*/ */
int int
compRedirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update) compRedirectSubwindows(ClientPtr pClient, WindowPtr pWin, int update)
{ {
CompSubwindowsPtr csw = GetCompSubwindows (pWin); CompSubwindowsPtr csw = GetCompSubwindows(pWin);
CompClientWindowPtr ccw; CompClientWindowPtr ccw;
WindowPtr pChild; WindowPtr pChild;
@ -376,19 +358,17 @@ compRedirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update)
* The client *could* allocate multiple, but while supported, * The client *could* allocate multiple, but while supported,
* it is not expected to be common * it is not expected to be common
*/ */
ccw = malloc(sizeof (CompClientWindowRec)); ccw = malloc(sizeof(CompClientWindowRec));
if (!ccw) if (!ccw)
return BadAlloc; return BadAlloc;
ccw->id = FakeClientID (pClient->index); ccw->id = FakeClientID(pClient->index);
ccw->update = update; ccw->update = update;
/* /*
* Now make sure there's a per-window structure to hang this from * Now make sure there's a per-window structure to hang this from
*/ */
if (!csw) if (!csw) {
{ csw = malloc(sizeof(CompSubwindowsRec));
csw = malloc(sizeof (CompSubwindowsRec)); if (!csw) {
if (!csw)
{
free(ccw); free(ccw);
return BadAlloc; return BadAlloc;
} }
@ -399,15 +379,13 @@ compRedirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update)
/* /*
* Redirect all existing windows * Redirect all existing windows
*/ */
for (pChild = pWin->lastChild; pChild; pChild = pChild->prevSib) for (pChild = pWin->lastChild; pChild; pChild = pChild->prevSib) {
{ int ret = compRedirectWindow(pClient, pChild, update);
int ret = compRedirectWindow (pClient, pChild, update);
if (ret != Success) if (ret != Success) {
{
for (pChild = pChild->nextSib; pChild; pChild = pChild->nextSib) for (pChild = pChild->nextSib; pChild; pChild = pChild->nextSib)
(void) compUnredirectWindow (pClient, pChild, update); (void) compUnredirectWindow(pClient, pChild, update);
if (!csw->clients) if (!csw->clients) {
{
free(csw); free(csw);
dixSetPrivate(&pWin->devPrivates, CompSubwindowsPrivateKey, 0); dixSetPrivate(&pWin->devPrivates, CompSubwindowsPrivateKey, 0);
} }
@ -420,16 +398,15 @@ compRedirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update)
*/ */
ccw->next = csw->clients; ccw->next = csw->clients;
csw->clients = ccw; csw->clients = ccw;
if (!AddResource (ccw->id, CompositeClientSubwindowsType, pWin)) if (!AddResource(ccw->id, CompositeClientSubwindowsType, pWin))
return BadAlloc; return BadAlloc;
if (ccw->update == CompositeRedirectManual) if (ccw->update == CompositeRedirectManual) {
{
csw->update = CompositeRedirectManual; csw->update = CompositeRedirectManual;
/* /*
* tell damage extension that damage events for this client are * tell damage extension that damage events for this client are
* critical output * critical output
*/ */
DamageExtSetCritical (pClient, TRUE); DamageExtSetCritical(pClient, TRUE);
pWin->inhibitBGPaint = TRUE; pWin->inhibitBGPaint = TRUE;
} }
return Success; return Success;
@ -440,39 +417,37 @@ compRedirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update)
* which frees one redirect per subwindow * which frees one redirect per subwindow
*/ */
void void
compFreeClientSubwindows (WindowPtr pWin, XID id) compFreeClientSubwindows(WindowPtr pWin, XID id)
{ {
CompSubwindowsPtr csw = GetCompSubwindows (pWin); CompSubwindowsPtr csw = GetCompSubwindows(pWin);
CompClientWindowPtr ccw, *prev; CompClientWindowPtr ccw, *prev;
WindowPtr pChild; WindowPtr pChild;
if (!csw) if (!csw)
return; return;
for (prev = &csw->clients; (ccw = *prev); prev = &ccw->next) for (prev = &csw->clients; (ccw = *prev); prev = &ccw->next) {
{ if (ccw->id == id) {
if (ccw->id == id)
{
ClientPtr pClient = clients[CLIENT_ID(id)]; ClientPtr pClient = clients[CLIENT_ID(id)];
*prev = ccw->next; *prev = ccw->next;
if (ccw->update == CompositeRedirectManual) if (ccw->update == CompositeRedirectManual) {
{
/* /*
* tell damage extension that damage events for this client are * tell damage extension that damage events for this client are
* critical output * critical output
*/ */
DamageExtSetCritical (pClient, FALSE); DamageExtSetCritical(pClient, FALSE);
csw->update = CompositeRedirectAutomatic; csw->update = CompositeRedirectAutomatic;
pWin->inhibitBGPaint = FALSE; pWin->inhibitBGPaint = FALSE;
if (pWin->mapped) if (pWin->mapped)
(*pWin->drawable.pScreen->ClearToBackground)(pWin, 0, 0, 0, 0, TRUE); (*pWin->drawable.pScreen->ClearToBackground) (pWin, 0, 0, 0,
0, TRUE);
} }
/* /*
* Unredirect all existing subwindows * Unredirect all existing subwindows
*/ */
for (pChild = pWin->lastChild; pChild; pChild = pChild->prevSib) for (pChild = pWin->lastChild; pChild; pChild = pChild->prevSib)
(void) compUnredirectWindow (pClient, pChild, ccw->update); (void) compUnredirectWindow(pClient, pChild, ccw->update);
free(ccw); free(ccw);
break; break;
@ -482,8 +457,7 @@ compFreeClientSubwindows (WindowPtr pWin, XID id)
/* /*
* Check if all of the per-client records are gone * Check if all of the per-client records are gone
*/ */
if (!csw->clients) if (!csw->clients) {
{
dixSetPrivate(&pWin->devPrivates, CompSubwindowsPrivateKey, NULL); dixSetPrivate(&pWin->devPrivates, CompSubwindowsPrivateKey, NULL);
free(csw); free(csw);
} }
@ -494,17 +468,16 @@ compFreeClientSubwindows (WindowPtr pWin, XID id)
*/ */
int int
compUnredirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update) compUnredirectSubwindows(ClientPtr pClient, WindowPtr pWin, int update)
{ {
CompSubwindowsPtr csw = GetCompSubwindows (pWin); CompSubwindowsPtr csw = GetCompSubwindows(pWin);
CompClientWindowPtr ccw; CompClientWindowPtr ccw;
if (!csw) if (!csw)
return BadValue; return BadValue;
for (ccw = csw->clients; ccw; ccw = ccw->next) for (ccw = csw->clients; ccw; ccw = ccw->next)
if (ccw->update == update && CLIENT_ID(ccw->id) == pClient->index) if (ccw->update == update && CLIENT_ID(ccw->id) == pClient->index) {
{ FreeResource(ccw->id, RT_NONE);
FreeResource (ccw->id, RT_NONE);
return Success; return Success;
} }
return BadValue; return BadValue;
@ -515,17 +488,17 @@ compUnredirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update)
*/ */
int int
compRedirectOneSubwindow (WindowPtr pParent, WindowPtr pWin) compRedirectOneSubwindow(WindowPtr pParent, WindowPtr pWin)
{ {
CompSubwindowsPtr csw = GetCompSubwindows (pParent); CompSubwindowsPtr csw = GetCompSubwindows(pParent);
CompClientWindowPtr ccw; CompClientWindowPtr ccw;
if (!csw) if (!csw)
return Success; return Success;
for (ccw = csw->clients; ccw; ccw = ccw->next) for (ccw = csw->clients; ccw; ccw = ccw->next) {
{ int ret = compRedirectWindow(clients[CLIENT_ID(ccw->id)],
int ret = compRedirectWindow (clients[CLIENT_ID(ccw->id)],
pWin, ccw->update); pWin, ccw->update);
if (ret != Success) if (ret != Success)
return ret; return ret;
} }
@ -537,17 +510,17 @@ compRedirectOneSubwindow (WindowPtr pParent, WindowPtr pWin)
*/ */
int int
compUnredirectOneSubwindow (WindowPtr pParent, WindowPtr pWin) compUnredirectOneSubwindow(WindowPtr pParent, WindowPtr pWin)
{ {
CompSubwindowsPtr csw = GetCompSubwindows (pParent); CompSubwindowsPtr csw = GetCompSubwindows(pParent);
CompClientWindowPtr ccw; CompClientWindowPtr ccw;
if (!csw) if (!csw)
return Success; return Success;
for (ccw = csw->clients; ccw; ccw = ccw->next) for (ccw = csw->clients; ccw; ccw = ccw->next) {
{ int ret = compUnredirectWindow(clients[CLIENT_ID(ccw->id)],
int ret = compUnredirectWindow (clients[CLIENT_ID(ccw->id)],
pWin, ccw->update); pWin, ccw->update);
if (ret != Success) if (ret != Success)
return ret; return ret;
} }
@ -555,7 +528,7 @@ compUnredirectOneSubwindow (WindowPtr pParent, WindowPtr pWin)
} }
static PixmapPtr static PixmapPtr
compNewPixmap (WindowPtr pWin, int x, int y, int w, int h) compNewPixmap(WindowPtr pWin, int x, int y, int w, int h)
{ {
ScreenPtr pScreen = pWin->drawable.pScreen; ScreenPtr pScreen = pWin->drawable.pScreen;
WindowPtr pParent = pWin->parent; WindowPtr pParent = pWin->parent;
@ -570,73 +543,68 @@ compNewPixmap (WindowPtr pWin, int x, int y, int w, int h)
pPixmap->screen_x = x; pPixmap->screen_x = x;
pPixmap->screen_y = y; pPixmap->screen_y = y;
if (pParent->drawable.depth == pWin->drawable.depth) if (pParent->drawable.depth == pWin->drawable.depth) {
{ GCPtr pGC = GetScratchGC(pWin->drawable.depth, pScreen);
GCPtr pGC = GetScratchGC (pWin->drawable.depth, pScreen);
if (pGC) if (pGC) {
{
ChangeGCVal val; ChangeGCVal val;
val.val = IncludeInferiors; val.val = IncludeInferiors;
ChangeGC (NullClient, pGC, GCSubwindowMode, &val); ChangeGC(NullClient, pGC, GCSubwindowMode, &val);
ValidateGC(&pPixmap->drawable, pGC); ValidateGC(&pPixmap->drawable, pGC);
(*pGC->ops->CopyArea) (&pParent->drawable, (*pGC->ops->CopyArea) (&pParent->drawable,
&pPixmap->drawable, &pPixmap->drawable,
pGC, pGC,
x - pParent->drawable.x, x - pParent->drawable.x,
y - pParent->drawable.y, y - pParent->drawable.y, w, h, 0, 0);
w, h, 0, 0); FreeScratchGC(pGC);
FreeScratchGC (pGC);
} }
} }
else else {
{ PictFormatPtr pSrcFormat = compWindowFormat(pParent);
PictFormatPtr pSrcFormat = compWindowFormat (pParent); PictFormatPtr pDstFormat = compWindowFormat(pWin);
PictFormatPtr pDstFormat = compWindowFormat (pWin);
XID inferiors = IncludeInferiors; XID inferiors = IncludeInferiors;
int error; int error;
PicturePtr pSrcPicture = CreatePicture (None, PicturePtr pSrcPicture = CreatePicture(None,
&pParent->drawable, &pParent->drawable,
pSrcFormat, pSrcFormat,
CPSubwindowMode, CPSubwindowMode,
&inferiors, &inferiors,
serverClient, &error); serverClient, &error);
PicturePtr pDstPicture = CreatePicture (None, PicturePtr pDstPicture = CreatePicture(None,
&pPixmap->drawable, &pPixmap->drawable,
pDstFormat, pDstFormat,
0, 0, 0, 0,
serverClient, &error); serverClient, &error);
if (pSrcPicture && pDstPicture) if (pSrcPicture && pDstPicture) {
{ CompositePicture(PictOpSrc,
CompositePicture (PictOpSrc,
pSrcPicture, pSrcPicture,
NULL, NULL,
pDstPicture, pDstPicture,
x - pParent->drawable.x, x - pParent->drawable.x,
y - pParent->drawable.y, y - pParent->drawable.y, 0, 0, 0, 0, w, h);
0, 0, 0, 0, w, h);
} }
if (pSrcPicture) if (pSrcPicture)
FreePicture (pSrcPicture, 0); FreePicture(pSrcPicture, 0);
if (pDstPicture) if (pDstPicture)
FreePicture (pDstPicture, 0); FreePicture(pDstPicture, 0);
} }
return pPixmap; return pPixmap;
} }
Bool Bool
compAllocPixmap (WindowPtr pWin) compAllocPixmap(WindowPtr pWin)
{ {
int bw = (int) pWin->borderWidth; int bw = (int) pWin->borderWidth;
int x = pWin->drawable.x - bw; int x = pWin->drawable.x - bw;
int y = pWin->drawable.y - bw; int y = pWin->drawable.y - bw;
int w = pWin->drawable.width + (bw << 1); int w = pWin->drawable.width + (bw << 1);
int h = pWin->drawable.height + (bw << 1); int h = pWin->drawable.height + (bw << 1);
PixmapPtr pPixmap = compNewPixmap (pWin, x, y, w, h); PixmapPtr pPixmap = compNewPixmap(pWin, x, y, w, h);
CompWindowPtr cw = GetCompWindow (pWin); CompWindowPtr cw = GetCompWindow(pWin);
if (!pPixmap) if (!pPixmap)
return FALSE; return FALSE;
@ -645,13 +613,12 @@ compAllocPixmap (WindowPtr pWin)
else else
pWin->redirectDraw = RedirectDrawManual; pWin->redirectDraw = RedirectDrawManual;
compSetPixmap (pWin, pPixmap); compSetPixmap(pWin, pPixmap);
cw->oldx = COMP_ORIGIN_INVALID; cw->oldx = COMP_ORIGIN_INVALID;
cw->oldy = COMP_ORIGIN_INVALID; cw->oldy = COMP_ORIGIN_INVALID;
cw->damageRegistered = FALSE; cw->damageRegistered = FALSE;
if (cw->update == CompositeRedirectAutomatic) if (cw->update == CompositeRedirectAutomatic) {
{ DamageRegister(&pWin->drawable, cw->damage);
DamageRegister (&pWin->drawable, cw->damage);
cw->damageRegistered = TRUE; cw->damageRegistered = TRUE;
} }
@ -665,17 +632,16 @@ compAllocPixmap (WindowPtr pWin)
} }
void void
compSetParentPixmap (WindowPtr pWin) compSetParentPixmap(WindowPtr pWin)
{ {
ScreenPtr pScreen = pWin->drawable.pScreen; ScreenPtr pScreen = pWin->drawable.pScreen;
PixmapPtr pParentPixmap; PixmapPtr pParentPixmap;
CompWindowPtr cw = GetCompWindow (pWin); CompWindowPtr cw = GetCompWindow(pWin);
if (cw->damageRegistered) if (cw->damageRegistered) {
{ DamageUnregister(&pWin->drawable, cw->damage);
DamageUnregister (&pWin->drawable, cw->damage);
cw->damageRegistered = FALSE; cw->damageRegistered = FALSE;
DamageEmpty (cw->damage); DamageEmpty(cw->damage);
} }
/* /*
* Move the parent-constrained border clip region back into * Move the parent-constrained border clip region back into
@ -686,7 +652,7 @@ compSetParentPixmap (WindowPtr pWin)
RegionCopy(&pWin->borderClip, &cw->borderClip); RegionCopy(&pWin->borderClip, &cw->borderClip);
pParentPixmap = (*pScreen->GetWindowPixmap) (pWin->parent); pParentPixmap = (*pScreen->GetWindowPixmap) (pWin->parent);
pWin->redirectDraw = RedirectDrawNone; pWin->redirectDraw = RedirectDrawNone;
compSetPixmap (pWin, pParentPixmap); compSetPixmap(pWin, pParentPixmap);
} }
/* /*
@ -695,33 +661,31 @@ compSetParentPixmap (WindowPtr pWin)
* old pixmap in cw->pOldPixmap so bits can be recovered * old pixmap in cw->pOldPixmap so bits can be recovered
*/ */
Bool Bool
compReallocPixmap (WindowPtr pWin, int draw_x, int draw_y, compReallocPixmap(WindowPtr pWin, int draw_x, int draw_y,
unsigned int w, unsigned int h, int bw) unsigned int w, unsigned int h, int bw)
{ {
ScreenPtr pScreen = pWin->drawable.pScreen; ScreenPtr pScreen = pWin->drawable.pScreen;
PixmapPtr pOld = (*pScreen->GetWindowPixmap) (pWin); PixmapPtr pOld = (*pScreen->GetWindowPixmap) (pWin);
PixmapPtr pNew; PixmapPtr pNew;
CompWindowPtr cw = GetCompWindow (pWin); CompWindowPtr cw = GetCompWindow(pWin);
int pix_x, pix_y; int pix_x, pix_y;
int pix_w, pix_h; int pix_w, pix_h;
assert (cw && pWin->redirectDraw != RedirectDrawNone); assert(cw && pWin->redirectDraw != RedirectDrawNone);
cw->oldx = pOld->screen_x; cw->oldx = pOld->screen_x;
cw->oldy = pOld->screen_y; cw->oldy = pOld->screen_y;
pix_x = draw_x - bw; pix_x = draw_x - bw;
pix_y = draw_y - bw; pix_y = draw_y - bw;
pix_w = w + (bw << 1); pix_w = w + (bw << 1);
pix_h = h + (bw << 1); pix_h = h + (bw << 1);
if (pix_w != pOld->drawable.width || pix_h != pOld->drawable.height) if (pix_w != pOld->drawable.width || pix_h != pOld->drawable.height) {
{ pNew = compNewPixmap(pWin, pix_x, pix_y, pix_w, pix_h);
pNew = compNewPixmap (pWin, pix_x, pix_y, pix_w, pix_h);
if (!pNew) if (!pNew)
return FALSE; return FALSE;
cw->pOldPixmap = pOld; cw->pOldPixmap = pOld;
compSetPixmap (pWin, pNew); compSetPixmap(pWin, pNew);
} }
else else {
{
pNew = pOld; pNew = pOld;
cw->pOldPixmap = 0; cw->pOldPixmap = 0;
} }

View File

@ -51,6 +51,7 @@
static CARD8 CompositeReqCode; static CARD8 CompositeReqCode;
static DevPrivateKeyRec CompositeClientPrivateKeyRec; static DevPrivateKeyRec CompositeClientPrivateKeyRec;
#define CompositeClientPrivateKey (&CompositeClientPrivateKeyRec) #define CompositeClientPrivateKey (&CompositeClientPrivateKeyRec)
RESTYPE CompositeClientWindowType; RESTYPE CompositeClientWindowType;
RESTYPE CompositeClientSubwindowsType; RESTYPE CompositeClientSubwindowsType;
@ -65,50 +66,49 @@ typedef struct _CompositeClient {
dixLookupPrivate(&(pClient)->devPrivates, CompositeClientPrivateKey)) dixLookupPrivate(&(pClient)->devPrivates, CompositeClientPrivateKey))
static void static void
CompositeClientCallback (CallbackListPtr *list, CompositeClientCallback(CallbackListPtr *list, pointer closure, pointer data)
pointer closure,
pointer data)
{ {
NewClientInfoRec *clientinfo = (NewClientInfoRec *) data; NewClientInfoRec *clientinfo = (NewClientInfoRec *) data;
ClientPtr pClient = clientinfo->client; ClientPtr pClient = clientinfo->client;
CompositeClientPtr pCompositeClient = GetCompositeClient (pClient); CompositeClientPtr pCompositeClient = GetCompositeClient(pClient);
pCompositeClient->major_version = 0; pCompositeClient->major_version = 0;
pCompositeClient->minor_version = 0; pCompositeClient->minor_version = 0;
} }
static int static int
FreeCompositeClientWindow (pointer value, XID ccwid) FreeCompositeClientWindow(pointer value, XID ccwid)
{ {
WindowPtr pWin = value; WindowPtr pWin = value;
compFreeClientWindow (pWin, ccwid); compFreeClientWindow(pWin, ccwid);
return Success; return Success;
} }
static int static int
FreeCompositeClientSubwindows (pointer value, XID ccwid) FreeCompositeClientSubwindows(pointer value, XID ccwid)
{ {
WindowPtr pWin = value; WindowPtr pWin = value;
compFreeClientSubwindows (pWin, ccwid); compFreeClientSubwindows(pWin, ccwid);
return Success; return Success;
} }
static int static int
FreeCompositeClientOverlay (pointer value, XID ccwid) FreeCompositeClientOverlay(pointer value, XID ccwid)
{ {
CompOverlayClientPtr pOc = (CompOverlayClientPtr) value; CompOverlayClientPtr pOc = (CompOverlayClientPtr) value;
compFreeOverlayClient (pOc); compFreeOverlayClient(pOc);
return Success; return Success;
} }
static int static int
ProcCompositeQueryVersion (ClientPtr client) ProcCompositeQueryVersion(ClientPtr client)
{ {
CompositeClientPtr pCompositeClient = GetCompositeClient (client); CompositeClientPtr pCompositeClient = GetCompositeClient(client);
xCompositeQueryVersionReply rep; xCompositeQueryVersionReply rep;
REQUEST(xCompositeQueryVersionReq); REQUEST(xCompositeQueryVersionReq);
REQUEST_SIZE_MATCH(xCompositeQueryVersionReq); REQUEST_SIZE_MATCH(xCompositeQueryVersionReq);
@ -118,7 +118,8 @@ ProcCompositeQueryVersion (ClientPtr client)
if (stuff->majorVersion < SERVER_COMPOSITE_MAJOR_VERSION) { if (stuff->majorVersion < SERVER_COMPOSITE_MAJOR_VERSION) {
rep.majorVersion = stuff->majorVersion; rep.majorVersion = stuff->majorVersion;
rep.minorVersion = stuff->minorVersion; rep.minorVersion = stuff->minorVersion;
} else { }
else {
rep.majorVersion = SERVER_COMPOSITE_MAJOR_VERSION; rep.majorVersion = SERVER_COMPOSITE_MAJOR_VERSION;
rep.minorVersion = SERVER_COMPOSITE_MINOR_VERSION; rep.minorVersion = SERVER_COMPOSITE_MINOR_VERSION;
} }
@ -130,7 +131,7 @@ ProcCompositeQueryVersion (ClientPtr client)
swapl(&rep.majorVersion); swapl(&rep.majorVersion);
swapl(&rep.minorVersion); swapl(&rep.minorVersion);
} }
WriteToClient(client, sizeof(xCompositeQueryVersionReply), (char *)&rep); WriteToClient(client, sizeof(xCompositeQueryVersionReply), (char *) &rep);
return Success; return Success;
} }
@ -146,92 +147,98 @@ ProcCompositeQueryVersion (ClientPtr client)
} while (0) } while (0)
static int static int
ProcCompositeRedirectWindow (ClientPtr client) ProcCompositeRedirectWindow(ClientPtr client)
{ {
WindowPtr pWin; WindowPtr pWin;
REQUEST(xCompositeRedirectWindowReq); REQUEST(xCompositeRedirectWindowReq);
REQUEST_SIZE_MATCH(xCompositeRedirectWindowReq); REQUEST_SIZE_MATCH(xCompositeRedirectWindowReq);
VERIFY_WINDOW(pWin, stuff->window, client, VERIFY_WINDOW(pWin, stuff->window, client,
DixSetAttrAccess|DixManageAccess|DixBlendAccess); DixSetAttrAccess | DixManageAccess | DixBlendAccess);
return compRedirectWindow (client, pWin, stuff->update); return compRedirectWindow(client, pWin, stuff->update);
} }
static int static int
ProcCompositeRedirectSubwindows (ClientPtr client) ProcCompositeRedirectSubwindows(ClientPtr client)
{ {
WindowPtr pWin; WindowPtr pWin;
REQUEST(xCompositeRedirectSubwindowsReq); REQUEST(xCompositeRedirectSubwindowsReq);
REQUEST_SIZE_MATCH(xCompositeRedirectSubwindowsReq); REQUEST_SIZE_MATCH(xCompositeRedirectSubwindowsReq);
VERIFY_WINDOW(pWin, stuff->window, client, VERIFY_WINDOW(pWin, stuff->window, client,
DixSetAttrAccess|DixManageAccess|DixBlendAccess); DixSetAttrAccess | DixManageAccess | DixBlendAccess);
return compRedirectSubwindows (client, pWin, stuff->update); return compRedirectSubwindows(client, pWin, stuff->update);
} }
static int static int
ProcCompositeUnredirectWindow (ClientPtr client) ProcCompositeUnredirectWindow(ClientPtr client)
{ {
WindowPtr pWin; WindowPtr pWin;
REQUEST(xCompositeUnredirectWindowReq); REQUEST(xCompositeUnredirectWindowReq);
REQUEST_SIZE_MATCH(xCompositeUnredirectWindowReq); REQUEST_SIZE_MATCH(xCompositeUnredirectWindowReq);
VERIFY_WINDOW(pWin, stuff->window, client, VERIFY_WINDOW(pWin, stuff->window, client,
DixSetAttrAccess|DixManageAccess|DixBlendAccess); DixSetAttrAccess | DixManageAccess | DixBlendAccess);
return compUnredirectWindow (client, pWin, stuff->update); return compUnredirectWindow(client, pWin, stuff->update);
} }
static int static int
ProcCompositeUnredirectSubwindows (ClientPtr client) ProcCompositeUnredirectSubwindows(ClientPtr client)
{ {
WindowPtr pWin; WindowPtr pWin;
REQUEST(xCompositeUnredirectSubwindowsReq); REQUEST(xCompositeUnredirectSubwindowsReq);
REQUEST_SIZE_MATCH(xCompositeUnredirectSubwindowsReq); REQUEST_SIZE_MATCH(xCompositeUnredirectSubwindowsReq);
VERIFY_WINDOW(pWin, stuff->window, client, VERIFY_WINDOW(pWin, stuff->window, client,
DixSetAttrAccess|DixManageAccess|DixBlendAccess); DixSetAttrAccess | DixManageAccess | DixBlendAccess);
return compUnredirectSubwindows (client, pWin, stuff->update); return compUnredirectSubwindows(client, pWin, stuff->update);
} }
static int static int
ProcCompositeCreateRegionFromBorderClip (ClientPtr client) ProcCompositeCreateRegionFromBorderClip(ClientPtr client)
{ {
WindowPtr pWin; WindowPtr pWin;
CompWindowPtr cw; CompWindowPtr cw;
RegionPtr pBorderClip, pRegion; RegionPtr pBorderClip, pRegion;
REQUEST(xCompositeCreateRegionFromBorderClipReq); REQUEST(xCompositeCreateRegionFromBorderClipReq);
REQUEST_SIZE_MATCH(xCompositeCreateRegionFromBorderClipReq); REQUEST_SIZE_MATCH(xCompositeCreateRegionFromBorderClipReq);
VERIFY_WINDOW(pWin, stuff->window, client, DixGetAttrAccess); VERIFY_WINDOW(pWin, stuff->window, client, DixGetAttrAccess);
LEGAL_NEW_RESOURCE (stuff->region, client); LEGAL_NEW_RESOURCE(stuff->region, client);
cw = GetCompWindow (pWin); cw = GetCompWindow(pWin);
if (cw) if (cw)
pBorderClip = &cw->borderClip; pBorderClip = &cw->borderClip;
else else
pBorderClip = &pWin->borderClip; pBorderClip = &pWin->borderClip;
pRegion = XFixesRegionCopy (pBorderClip); pRegion = XFixesRegionCopy(pBorderClip);
if (!pRegion) if (!pRegion)
return BadAlloc; return BadAlloc;
RegionTranslate(pRegion, -pWin->drawable.x, -pWin->drawable.y); RegionTranslate(pRegion, -pWin->drawable.x, -pWin->drawable.y);
if (!AddResource (stuff->region, RegionResType, (pointer) pRegion)) if (!AddResource(stuff->region, RegionResType, (pointer) pRegion))
return BadAlloc; return BadAlloc;
return Success; return Success;
} }
static int static int
ProcCompositeNameWindowPixmap (ClientPtr client) ProcCompositeNameWindowPixmap(ClientPtr client)
{ {
WindowPtr pWin; WindowPtr pWin;
CompWindowPtr cw; CompWindowPtr cw;
PixmapPtr pPixmap; PixmapPtr pPixmap;
int rc; int rc;
REQUEST(xCompositeNameWindowPixmapReq); REQUEST(xCompositeNameWindowPixmapReq);
REQUEST_SIZE_MATCH(xCompositeNameWindowPixmapReq); REQUEST_SIZE_MATCH(xCompositeNameWindowPixmapReq);
@ -240,9 +247,9 @@ ProcCompositeNameWindowPixmap (ClientPtr client)
if (!pWin->viewable) if (!pWin->viewable)
return BadMatch; return BadMatch;
LEGAL_NEW_RESOURCE (stuff->pixmap, client); LEGAL_NEW_RESOURCE(stuff->pixmap, client);
cw = GetCompWindow (pWin); cw = GetCompWindow(pWin);
if (!cw) if (!cw)
return BadMatch; return BadMatch;
@ -258,15 +265,14 @@ ProcCompositeNameWindowPixmap (ClientPtr client)
++pPixmap->refcnt; ++pPixmap->refcnt;
if (!AddResource (stuff->pixmap, RT_PIXMAP, (pointer) pPixmap)) if (!AddResource(stuff->pixmap, RT_PIXMAP, (pointer) pPixmap))
return BadAlloc; return BadAlloc;
return Success; return Success;
} }
static int static int
ProcCompositeGetOverlayWindow (ClientPtr client) ProcCompositeGetOverlayWindow(ClientPtr client)
{ {
REQUEST(xCompositeGetOverlayWindowReq); REQUEST(xCompositeGetOverlayWindowReq);
xCompositeGetOverlayWindowReply rep; xCompositeGetOverlayWindowReply rep;
@ -293,17 +299,15 @@ ProcCompositeGetOverlayWindow (ClientPtr client)
*/ */
cs = GetCompScreen(pScreen); cs = GetCompScreen(pScreen);
if (cs->pOverlayWin == NULL) if (cs->pOverlayWin == NULL)
if (!compCreateOverlayWindow(pScreen)) if (!compCreateOverlayWindow(pScreen)) {
{ FreeResource(pOc->resource, RT_NONE);
FreeResource (pOc->resource, RT_NONE);
return BadAlloc; return BadAlloc;
} }
rc = XaceHook(XACE_RESOURCE_ACCESS, client, cs->pOverlayWin->drawable.id, rc = XaceHook(XACE_RESOURCE_ACCESS, client, cs->pOverlayWin->drawable.id,
RT_WINDOW, cs->pOverlayWin, RT_NONE, NULL, DixGetAttrAccess); RT_WINDOW, cs->pOverlayWin, RT_NONE, NULL, DixGetAttrAccess);
if (rc != Success) if (rc != Success) {
{ FreeResource(pOc->resource, RT_NONE);
FreeResource (pOc->resource, RT_NONE);
return rc; return rc;
} }
@ -312,19 +316,19 @@ ProcCompositeGetOverlayWindow (ClientPtr client)
rep.length = 0; rep.length = 0;
rep.overlayWin = cs->pOverlayWin->drawable.id; rep.overlayWin = cs->pOverlayWin->drawable.id;
if (client->swapped) if (client->swapped) {
{
swaps(&rep.sequenceNumber); swaps(&rep.sequenceNumber);
swapl(&rep.length); swapl(&rep.length);
swapl(&rep.overlayWin); swapl(&rep.overlayWin);
} }
(void) WriteToClient(client, sz_xCompositeGetOverlayWindowReply, (char *)&rep); (void) WriteToClient(client, sz_xCompositeGetOverlayWindowReply,
(char *) &rep);
return Success; return Success;
} }
static int static int
ProcCompositeReleaseOverlayWindow (ClientPtr client) ProcCompositeReleaseOverlayWindow(ClientPtr client)
{ {
REQUEST(xCompositeReleaseOverlayWindowReq); REQUEST(xCompositeReleaseOverlayWindowReq);
WindowPtr pWin; WindowPtr pWin;
@ -339,30 +343,28 @@ ProcCompositeReleaseOverlayWindow (ClientPtr client)
* Has client queried a reference to the overlay window * Has client queried a reference to the overlay window
* on this screen? If not, generate an error. * on this screen? If not, generate an error.
*/ */
pOc = compFindOverlayClient (pWin->drawable.pScreen, client); pOc = compFindOverlayClient(pWin->drawable.pScreen, client);
if (pOc == NULL) if (pOc == NULL)
return BadMatch; return BadMatch;
/* The delete function will free the client structure */ /* The delete function will free the client structure */
FreeResource (pOc->resource, RT_NONE); FreeResource(pOc->resource, RT_NONE);
return Success; return Success;
} }
static int (*ProcCompositeVector[CompositeNumberRequests])(ClientPtr) = { static int (*ProcCompositeVector[CompositeNumberRequests]) (ClientPtr) = {
ProcCompositeQueryVersion, ProcCompositeQueryVersion,
ProcCompositeRedirectWindow, ProcCompositeRedirectWindow,
ProcCompositeRedirectSubwindows, ProcCompositeRedirectSubwindows,
ProcCompositeUnredirectWindow, ProcCompositeUnredirectWindow,
ProcCompositeUnredirectSubwindows, ProcCompositeUnredirectSubwindows,
ProcCompositeCreateRegionFromBorderClip, ProcCompositeCreateRegionFromBorderClip,
ProcCompositeNameWindowPixmap, ProcCompositeNameWindowPixmap,
ProcCompositeGetOverlayWindow, ProcCompositeGetOverlayWindow, ProcCompositeReleaseOverlayWindow,};
ProcCompositeReleaseOverlayWindow,
};
static int static int
ProcCompositeDispatch (ClientPtr client) ProcCompositeDispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
@ -373,7 +375,7 @@ ProcCompositeDispatch (ClientPtr client)
} }
static int static int
SProcCompositeQueryVersion (ClientPtr client) SProcCompositeQueryVersion(ClientPtr client)
{ {
REQUEST(xCompositeQueryVersionReq); REQUEST(xCompositeQueryVersionReq);
@ -385,7 +387,7 @@ SProcCompositeQueryVersion (ClientPtr client)
} }
static int static int
SProcCompositeRedirectWindow (ClientPtr client) SProcCompositeRedirectWindow(ClientPtr client)
{ {
REQUEST(xCompositeRedirectWindowReq); REQUEST(xCompositeRedirectWindowReq);
@ -396,7 +398,7 @@ SProcCompositeRedirectWindow (ClientPtr client)
} }
static int static int
SProcCompositeRedirectSubwindows (ClientPtr client) SProcCompositeRedirectSubwindows(ClientPtr client)
{ {
REQUEST(xCompositeRedirectSubwindowsReq); REQUEST(xCompositeRedirectSubwindowsReq);
@ -407,7 +409,7 @@ SProcCompositeRedirectSubwindows (ClientPtr client)
} }
static int static int
SProcCompositeUnredirectWindow (ClientPtr client) SProcCompositeUnredirectWindow(ClientPtr client)
{ {
REQUEST(xCompositeUnredirectWindowReq); REQUEST(xCompositeUnredirectWindowReq);
@ -418,7 +420,7 @@ SProcCompositeUnredirectWindow (ClientPtr client)
} }
static int static int
SProcCompositeUnredirectSubwindows (ClientPtr client) SProcCompositeUnredirectSubwindows(ClientPtr client)
{ {
REQUEST(xCompositeUnredirectSubwindowsReq); REQUEST(xCompositeUnredirectSubwindowsReq);
@ -429,7 +431,7 @@ SProcCompositeUnredirectSubwindows (ClientPtr client)
} }
static int static int
SProcCompositeCreateRegionFromBorderClip (ClientPtr client) SProcCompositeCreateRegionFromBorderClip(ClientPtr client)
{ {
REQUEST(xCompositeCreateRegionFromBorderClipReq); REQUEST(xCompositeCreateRegionFromBorderClipReq);
@ -441,7 +443,7 @@ SProcCompositeCreateRegionFromBorderClip (ClientPtr client)
} }
static int static int
SProcCompositeNameWindowPixmap (ClientPtr client) SProcCompositeNameWindowPixmap(ClientPtr client)
{ {
REQUEST(xCompositeNameWindowPixmapReq); REQUEST(xCompositeNameWindowPixmapReq);
@ -453,7 +455,7 @@ SProcCompositeNameWindowPixmap (ClientPtr client)
} }
static int static int
SProcCompositeGetOverlayWindow (ClientPtr client) SProcCompositeGetOverlayWindow(ClientPtr client)
{ {
REQUEST(xCompositeGetOverlayWindowReq); REQUEST(xCompositeGetOverlayWindowReq);
@ -464,7 +466,7 @@ SProcCompositeGetOverlayWindow (ClientPtr client)
} }
static int static int
SProcCompositeReleaseOverlayWindow (ClientPtr client) SProcCompositeReleaseOverlayWindow(ClientPtr client)
{ {
REQUEST(xCompositeReleaseOverlayWindowReq); REQUEST(xCompositeReleaseOverlayWindowReq);
@ -474,20 +476,18 @@ SProcCompositeReleaseOverlayWindow (ClientPtr client)
return (*ProcCompositeVector[stuff->compositeReqType]) (client); return (*ProcCompositeVector[stuff->compositeReqType]) (client);
} }
static int (*SProcCompositeVector[CompositeNumberRequests])(ClientPtr) = { static int (*SProcCompositeVector[CompositeNumberRequests]) (ClientPtr) = {
SProcCompositeQueryVersion, SProcCompositeQueryVersion,
SProcCompositeRedirectWindow, SProcCompositeRedirectWindow,
SProcCompositeRedirectSubwindows, SProcCompositeRedirectSubwindows,
SProcCompositeUnredirectWindow, SProcCompositeUnredirectWindow,
SProcCompositeUnredirectSubwindows, SProcCompositeUnredirectSubwindows,
SProcCompositeCreateRegionFromBorderClip, SProcCompositeCreateRegionFromBorderClip,
SProcCompositeNameWindowPixmap, SProcCompositeNameWindowPixmap,
SProcCompositeGetOverlayWindow, SProcCompositeGetOverlayWindow, SProcCompositeReleaseOverlayWindow,};
SProcCompositeReleaseOverlayWindow,
};
static int static int
SProcCompositeDispatch (ClientPtr client) SProcCompositeDispatch(ClientPtr client)
{ {
REQUEST(xReq); REQUEST(xReq);
@ -498,7 +498,7 @@ SProcCompositeDispatch (ClientPtr client)
} }
void void
CompositeExtensionInit (void) CompositeExtensionInit(void)
{ {
ExtensionEntry *extEntry; ExtensionEntry *extEntry;
int s; int s;
@ -513,8 +513,7 @@ CompositeExtensionInit (void)
/* Composite on 8bpp pseudocolor root windows appears to fail, so /* Composite on 8bpp pseudocolor root windows appears to fail, so
* just disable it on anything pseudocolor for safety. * just disable it on anything pseudocolor for safety.
*/ */
for (vis = pScreen->visuals; vis->vid != pScreen->rootVisual; vis++) for (vis = pScreen->visuals; vis->vid != pScreen->rootVisual; vis++);
;
if ((vis->class | DynamicClass) == PseudoColor) if ((vis->class | DynamicClass) == PseudoColor)
return; return;
@ -544,21 +543,21 @@ CompositeExtensionInit (void)
sizeof(CompositeClientRec))) sizeof(CompositeClientRec)))
return; return;
if (!AddCallback (&ClientStateCallback, CompositeClientCallback, 0)) if (!AddCallback(&ClientStateCallback, CompositeClientCallback, 0))
return; return;
for (s = 0; s < screenInfo.numScreens; s++) for (s = 0; s < screenInfo.numScreens; s++)
if (!compScreenInit (screenInfo.screens[s])) if (!compScreenInit(screenInfo.screens[s]))
return; return;
extEntry = AddExtension (COMPOSITE_NAME, 0, 0, extEntry = AddExtension(COMPOSITE_NAME, 0, 0,
ProcCompositeDispatch, SProcCompositeDispatch, ProcCompositeDispatch, SProcCompositeDispatch,
NULL, StandardMinorOpcode); NULL, StandardMinorOpcode);
if (!extEntry) if (!extEntry)
return; return;
CompositeReqCode = (CARD8) extEntry->base; CompositeReqCode = (CARD8) extEntry->base;
miRegisterRedirectBorderClipProc (compSetRedirectBorderClip, miRegisterRedirectBorderClipProc(compSetRedirectBorderClip,
compGetRedirectBorderClip); compGetRedirectBorderClip);
/* Initialization succeeded */ /* Initialization succeeded */
@ -571,15 +570,16 @@ CompositeExtensionInit (void)
int (*PanoramiXSaveCompositeVector[CompositeNumberRequests]) (ClientPtr); int (*PanoramiXSaveCompositeVector[CompositeNumberRequests]) (ClientPtr);
static int static int
PanoramiXCompositeRedirectWindow (ClientPtr client) PanoramiXCompositeRedirectWindow(ClientPtr client)
{ {
PanoramiXRes *win; PanoramiXRes *win;
int rc = 0, j; int rc = 0, j;
REQUEST(xCompositeRedirectWindowReq); REQUEST(xCompositeRedirectWindowReq);
REQUEST_SIZE_MATCH(xCompositeRedirectWindowReq); REQUEST_SIZE_MATCH(xCompositeRedirectWindowReq);
if ((rc = dixLookupResourceByType((void **)&win, stuff->window, XRT_WINDOW, if ((rc = dixLookupResourceByType((void **) &win, stuff->window, XRT_WINDOW,
client, DixUnknownAccess))) { client, DixUnknownAccess))) {
client->errorValue = stuff->window; client->errorValue = stuff->window;
return rc; return rc;
@ -588,22 +588,24 @@ PanoramiXCompositeRedirectWindow (ClientPtr client)
FOR_NSCREENS_FORWARD(j) { FOR_NSCREENS_FORWARD(j) {
stuff->window = win->info[j].id; stuff->window = win->info[j].id;
rc = (*PanoramiXSaveCompositeVector[stuff->compositeReqType]) (client); rc = (*PanoramiXSaveCompositeVector[stuff->compositeReqType]) (client);
if (rc != Success) break; if (rc != Success)
break;
} }
return rc; return rc;
} }
static int static int
PanoramiXCompositeRedirectSubwindows (ClientPtr client) PanoramiXCompositeRedirectSubwindows(ClientPtr client)
{ {
PanoramiXRes *win; PanoramiXRes *win;
int rc = 0, j; int rc = 0, j;
REQUEST(xCompositeRedirectSubwindowsReq); REQUEST(xCompositeRedirectSubwindowsReq);
REQUEST_SIZE_MATCH(xCompositeRedirectSubwindowsReq); REQUEST_SIZE_MATCH(xCompositeRedirectSubwindowsReq);
if ((rc = dixLookupResourceByType((void **)&win, stuff->window, XRT_WINDOW, if ((rc = dixLookupResourceByType((void **) &win, stuff->window, XRT_WINDOW,
client, DixUnknownAccess))) { client, DixUnknownAccess))) {
client->errorValue = stuff->window; client->errorValue = stuff->window;
return rc; return rc;
@ -612,22 +614,24 @@ PanoramiXCompositeRedirectSubwindows (ClientPtr client)
FOR_NSCREENS_FORWARD(j) { FOR_NSCREENS_FORWARD(j) {
stuff->window = win->info[j].id; stuff->window = win->info[j].id;
rc = (*PanoramiXSaveCompositeVector[stuff->compositeReqType]) (client); rc = (*PanoramiXSaveCompositeVector[stuff->compositeReqType]) (client);
if (rc != Success) break; if (rc != Success)
break;
} }
return rc; return rc;
} }
static int static int
PanoramiXCompositeUnredirectWindow (ClientPtr client) PanoramiXCompositeUnredirectWindow(ClientPtr client)
{ {
PanoramiXRes *win; PanoramiXRes *win;
int rc = 0, j; int rc = 0, j;
REQUEST(xCompositeUnredirectWindowReq); REQUEST(xCompositeUnredirectWindowReq);
REQUEST_SIZE_MATCH(xCompositeUnredirectWindowReq); REQUEST_SIZE_MATCH(xCompositeUnredirectWindowReq);
if ((rc = dixLookupResourceByType((void **)&win, stuff->window, XRT_WINDOW, if ((rc = dixLookupResourceByType((void **) &win, stuff->window, XRT_WINDOW,
client, DixUnknownAccess))) { client, DixUnknownAccess))) {
client->errorValue = stuff->window; client->errorValue = stuff->window;
return rc; return rc;
@ -636,22 +640,24 @@ PanoramiXCompositeUnredirectWindow (ClientPtr client)
FOR_NSCREENS_FORWARD(j) { FOR_NSCREENS_FORWARD(j) {
stuff->window = win->info[j].id; stuff->window = win->info[j].id;
rc = (*PanoramiXSaveCompositeVector[stuff->compositeReqType]) (client); rc = (*PanoramiXSaveCompositeVector[stuff->compositeReqType]) (client);
if (rc != Success) break; if (rc != Success)
break;
} }
return rc; return rc;
} }
static int static int
PanoramiXCompositeUnredirectSubwindows (ClientPtr client) PanoramiXCompositeUnredirectSubwindows(ClientPtr client)
{ {
PanoramiXRes *win; PanoramiXRes *win;
int rc = 0, j; int rc = 0, j;
REQUEST(xCompositeUnredirectSubwindowsReq); REQUEST(xCompositeUnredirectSubwindowsReq);
REQUEST_SIZE_MATCH(xCompositeUnredirectSubwindowsReq); REQUEST_SIZE_MATCH(xCompositeUnredirectSubwindowsReq);
if ((rc = dixLookupResourceByType((void **)&win, stuff->window, XRT_WINDOW, if ((rc = dixLookupResourceByType((void **) &win, stuff->window, XRT_WINDOW,
client, DixUnknownAccess))) { client, DixUnknownAccess))) {
client->errorValue = stuff->window; client->errorValue = stuff->window;
return rc; return rc;
@ -660,14 +666,15 @@ PanoramiXCompositeUnredirectSubwindows (ClientPtr client)
FOR_NSCREENS_FORWARD(j) { FOR_NSCREENS_FORWARD(j) {
stuff->window = win->info[j].id; stuff->window = win->info[j].id;
rc = (*PanoramiXSaveCompositeVector[stuff->compositeReqType]) (client); rc = (*PanoramiXSaveCompositeVector[stuff->compositeReqType]) (client);
if (rc != Success) break; if (rc != Success)
break;
} }
return rc; return rc;
} }
static int static int
PanoramiXCompositeNameWindowPixmap (ClientPtr client) PanoramiXCompositeNameWindowPixmap(ClientPtr client)
{ {
WindowPtr pWin; WindowPtr pWin;
CompWindowPtr cw; CompWindowPtr cw;
@ -675,19 +682,20 @@ PanoramiXCompositeNameWindowPixmap (ClientPtr client)
int rc; int rc;
PanoramiXRes *win, *newPix; PanoramiXRes *win, *newPix;
int i; int i;
REQUEST(xCompositeNameWindowPixmapReq); REQUEST(xCompositeNameWindowPixmapReq);
REQUEST_SIZE_MATCH(xCompositeNameWindowPixmapReq); REQUEST_SIZE_MATCH(xCompositeNameWindowPixmapReq);
if ((rc = dixLookupResourceByType((void **)&win, stuff->window, XRT_WINDOW, if ((rc = dixLookupResourceByType((void **) &win, stuff->window, XRT_WINDOW,
client, DixUnknownAccess))) { client, DixUnknownAccess))) {
client->errorValue = stuff->window; client->errorValue = stuff->window;
return rc; return rc;
} }
LEGAL_NEW_RESOURCE (stuff->pixmap, client); LEGAL_NEW_RESOURCE(stuff->pixmap, client);
if(!(newPix = malloc(sizeof(PanoramiXRes)))) if (!(newPix = malloc(sizeof(PanoramiXRes))))
return BadAlloc; return BadAlloc;
newPix->type = XRT_PIXMAP; newPix->type = XRT_PIXMAP;
@ -695,51 +703,45 @@ PanoramiXCompositeNameWindowPixmap (ClientPtr client)
panoramix_setup_ids(newPix, client, stuff->pixmap); panoramix_setup_ids(newPix, client, stuff->pixmap);
FOR_NSCREENS(i) { FOR_NSCREENS(i) {
rc = dixLookupResourceByType ((void **) &pWin, win->info[i].id, rc = dixLookupResourceByType((void **) &pWin, win->info[i].id,
RT_WINDOW, client, DixGetAttrAccess); RT_WINDOW, client, DixGetAttrAccess);
if (rc != Success) if (rc != Success) {
{
client->errorValue = stuff->window; client->errorValue = stuff->window;
free (newPix); free(newPix);
return rc; return rc;
} }
if (!pWin->viewable) if (!pWin->viewable) {
{ free(newPix);
free (newPix);
return BadMatch; return BadMatch;
} }
cw = GetCompWindow (pWin); cw = GetCompWindow(pWin);
if (!cw) if (!cw) {
{ free(newPix);
free (newPix);
return BadMatch; return BadMatch;
} }
pPixmap = (*pWin->drawable.pScreen->GetWindowPixmap) (pWin); pPixmap = (*pWin->drawable.pScreen->GetWindowPixmap) (pWin);
if (!pPixmap) if (!pPixmap) {
{ free(newPix);
free (newPix);
return BadMatch; return BadMatch;
} }
if (!AddResource (newPix->info[i].id, RT_PIXMAP, if (!AddResource(newPix->info[i].id, RT_PIXMAP, (pointer) pPixmap))
(pointer) pPixmap))
return BadAlloc; return BadAlloc;
++pPixmap->refcnt; ++pPixmap->refcnt;
} }
if (!AddResource (stuff->pixmap, XRT_PIXMAP, (pointer) newPix)) if (!AddResource(stuff->pixmap, XRT_PIXMAP, (pointer) newPix))
return BadAlloc; return BadAlloc;
return Success; return Success;
} }
static int static int
PanoramiXCompositeGetOverlayWindow (ClientPtr client) PanoramiXCompositeGetOverlayWindow(ClientPtr client)
{ {
REQUEST(xCompositeGetOverlayWindowReq); REQUEST(xCompositeGetOverlayWindowReq);
xCompositeGetOverlayWindowReply rep; xCompositeGetOverlayWindowReply rep;
@ -753,16 +755,15 @@ PanoramiXCompositeGetOverlayWindow (ClientPtr client)
REQUEST_SIZE_MATCH(xCompositeGetOverlayWindowReq); REQUEST_SIZE_MATCH(xCompositeGetOverlayWindowReq);
if ((rc = dixLookupResourceByType((void **)&win, stuff->window, XRT_WINDOW, if ((rc = dixLookupResourceByType((void **) &win, stuff->window, XRT_WINDOW,
client, DixUnknownAccess))) { client, DixUnknownAccess))) {
client->errorValue = stuff->window; client->errorValue = stuff->window;
return rc; return rc;
} }
cs = GetCompScreen(screenInfo.screens[0]); cs = GetCompScreen(screenInfo.screens[0]);
if (!cs->pOverlayWin) if (!cs->pOverlayWin) {
{ if (!(overlayWin = malloc(sizeof(PanoramiXRes))))
if(!(overlayWin = malloc(sizeof(PanoramiXRes))))
return BadAlloc; return BadAlloc;
overlayWin->type = XRT_WINDOW; overlayWin->type = XRT_WINDOW;
@ -770,10 +771,9 @@ PanoramiXCompositeGetOverlayWindow (ClientPtr client)
} }
FOR_NSCREENS_BACKWARD(i) { FOR_NSCREENS_BACKWARD(i) {
rc = dixLookupResourceByType((pointer *)&pWin, win->info[i].id, rc = dixLookupResourceByType((pointer *) &pWin, win->info[i].id,
RT_WINDOW, client, DixGetAttrAccess); RT_WINDOW, client, DixGetAttrAccess);
if (rc != Success) if (rc != Success) {
{
client->errorValue = stuff->window; client->errorValue = stuff->window;
return rc; return rc;
} }
@ -792,9 +792,8 @@ PanoramiXCompositeGetOverlayWindow (ClientPtr client)
*/ */
cs = GetCompScreen(pScreen); cs = GetCompScreen(pScreen);
if (cs->pOverlayWin == NULL) if (cs->pOverlayWin == NULL)
if (!compCreateOverlayWindow(pScreen)) if (!compCreateOverlayWindow(pScreen)) {
{ FreeResource(pOc->resource, RT_NONE);
FreeResource (pOc->resource, RT_NONE);
return BadAlloc; return BadAlloc;
} }
@ -802,15 +801,13 @@ PanoramiXCompositeGetOverlayWindow (ClientPtr client)
cs->pOverlayWin->drawable.id, cs->pOverlayWin->drawable.id,
RT_WINDOW, cs->pOverlayWin, RT_NONE, NULL, RT_WINDOW, cs->pOverlayWin, RT_NONE, NULL,
DixGetAttrAccess); DixGetAttrAccess);
if (rc != Success) if (rc != Success) {
{ FreeResource(pOc->resource, RT_NONE);
FreeResource (pOc->resource, RT_NONE);
return rc; return rc;
} }
} }
if (overlayWin) if (overlayWin) {
{
FOR_NSCREENS(i) { FOR_NSCREENS(i) {
cs = GetCompScreen(screenInfo.screens[i]); cs = GetCompScreen(screenInfo.screens[i]);
overlayWin->info[i].id = cs->pOverlayWin->drawable.id; overlayWin->info[i].id = cs->pOverlayWin->drawable.id;
@ -826,19 +823,19 @@ PanoramiXCompositeGetOverlayWindow (ClientPtr client)
rep.length = 0; rep.length = 0;
rep.overlayWin = cs->pOverlayWin->drawable.id; rep.overlayWin = cs->pOverlayWin->drawable.id;
if (client->swapped) if (client->swapped) {
{
swaps(&rep.sequenceNumber); swaps(&rep.sequenceNumber);
swapl(&rep.length); swapl(&rep.length);
swapl(&rep.overlayWin); swapl(&rep.overlayWin);
} }
(void) WriteToClient(client, sz_xCompositeGetOverlayWindowReply, (char *)&rep); (void) WriteToClient(client, sz_xCompositeGetOverlayWindowReply,
(char *) &rep);
return Success; return Success;
} }
static int static int
PanoramiXCompositeReleaseOverlayWindow (ClientPtr client) PanoramiXCompositeReleaseOverlayWindow(ClientPtr client)
{ {
REQUEST(xCompositeReleaseOverlayWindowReq); REQUEST(xCompositeReleaseOverlayWindowReq);
WindowPtr pWin; WindowPtr pWin;
@ -849,14 +846,14 @@ PanoramiXCompositeReleaseOverlayWindow (ClientPtr client)
REQUEST_SIZE_MATCH(xCompositeReleaseOverlayWindowReq); REQUEST_SIZE_MATCH(xCompositeReleaseOverlayWindowReq);
if ((rc = dixLookupResourceByType((void **)&win, stuff->window, XRT_WINDOW, if ((rc = dixLookupResourceByType((void **) &win, stuff->window, XRT_WINDOW,
client, DixUnknownAccess))) { client, DixUnknownAccess))) {
client->errorValue = stuff->window; client->errorValue = stuff->window;
return rc; return rc;
} }
FOR_NSCREENS_BACKWARD(i) { FOR_NSCREENS_BACKWARD(i) {
if ((rc = dixLookupResourceByType((void **)&pWin, win->info[i].id, if ((rc = dixLookupResourceByType((void **) &pWin, win->info[i].id,
XRT_WINDOW, client, XRT_WINDOW, client,
DixUnknownAccess))) { DixUnknownAccess))) {
client->errorValue = stuff->window; client->errorValue = stuff->window;
@ -868,19 +865,19 @@ PanoramiXCompositeReleaseOverlayWindow (ClientPtr client)
* Has client queried a reference to the overlay window * Has client queried a reference to the overlay window
* on this screen? If not, generate an error. * on this screen? If not, generate an error.
*/ */
pOc = compFindOverlayClient (pWin->drawable.pScreen, client); pOc = compFindOverlayClient(pWin->drawable.pScreen, client);
if (pOc == NULL) if (pOc == NULL)
return BadMatch; return BadMatch;
/* The delete function will free the client structure */ /* The delete function will free the client structure */
FreeResource (pOc->resource, RT_NONE); FreeResource(pOc->resource, RT_NONE);
} }
return Success; return Success;
} }
void void
PanoramiXCompositeInit (void) PanoramiXCompositeInit(void)
{ {
int i; int i;
@ -906,7 +903,7 @@ PanoramiXCompositeInit (void)
} }
void void
PanoramiXCompositeReset (void) PanoramiXCompositeReset(void)
{ {
int i; int i;

View File

@ -53,9 +53,9 @@ DevPrivateKeyRec CompWindowPrivateKeyRec;
DevPrivateKeyRec CompSubwindowsPrivateKeyRec; DevPrivateKeyRec CompSubwindowsPrivateKeyRec;
static Bool static Bool
compCloseScreen (int index, ScreenPtr pScreen) compCloseScreen(int index, ScreenPtr pScreen)
{ {
CompScreenPtr cs = GetCompScreen (pScreen); CompScreenPtr cs = GetCompScreen(pScreen);
Bool ret; Bool ret;
free(cs->alternateVisuals); free(cs->alternateVisuals);
@ -88,11 +88,11 @@ compCloseScreen (int index, ScreenPtr pScreen)
} }
static void static void
compInstallColormap (ColormapPtr pColormap) compInstallColormap(ColormapPtr pColormap)
{ {
VisualPtr pVisual = pColormap->pVisual; VisualPtr pVisual = pColormap->pVisual;
ScreenPtr pScreen = pColormap->pScreen; ScreenPtr pScreen = pColormap->pScreen;
CompScreenPtr cs = GetCompScreen (pScreen); CompScreenPtr cs = GetCompScreen(pScreen);
int a; int a;
for (a = 0; a < cs->numAlternateVisuals; a++) for (a = 0; a < cs->numAlternateVisuals; a++)
@ -109,7 +109,7 @@ static Bool
compChangeWindowAttributes(WindowPtr pWin, unsigned long mask) compChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
{ {
ScreenPtr pScreen = pWin->drawable.pScreen; ScreenPtr pScreen = pWin->drawable.pScreen;
CompScreenPtr cs = GetCompScreen (pScreen); CompScreenPtr cs = GetCompScreen(pScreen);
Bool ret; Bool ret;
pScreen->ChangeWindowAttributes = cs->ChangeWindowAttributes; pScreen->ChangeWindowAttributes = cs->ChangeWindowAttributes;
@ -120,7 +120,8 @@ compChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
if (pWin->backingStore != NotUseful) { if (pWin->backingStore != NotUseful) {
compRedirectWindow(serverClient, pWin, CompositeRedirectAutomatic); compRedirectWindow(serverClient, pWin, CompositeRedirectAutomatic);
pWin->backStorage = (pointer) (intptr_t) 1; pWin->backStorage = (pointer) (intptr_t) 1;
} else { }
else {
compUnredirectWindow(serverClient, pWin, compUnredirectWindow(serverClient, pWin,
CompositeRedirectAutomatic); CompositeRedirectAutomatic);
pWin->backStorage = NULL; pWin->backStorage = NULL;
@ -133,35 +134,33 @@ compChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
} }
static void static void
compGetImage (DrawablePtr pDrawable, compGetImage(DrawablePtr pDrawable,
int sx, int sy, int sx, int sy,
int w, int h, int w, int h,
unsigned int format, unsigned int format, unsigned long planemask, char *pdstLine)
unsigned long planemask,
char *pdstLine)
{ {
ScreenPtr pScreen = pDrawable->pScreen; ScreenPtr pScreen = pDrawable->pScreen;
CompScreenPtr cs = GetCompScreen (pScreen); CompScreenPtr cs = GetCompScreen(pScreen);
pScreen->GetImage = cs->GetImage; pScreen->GetImage = cs->GetImage;
if (pDrawable->type == DRAWABLE_WINDOW) if (pDrawable->type == DRAWABLE_WINDOW)
compPaintChildrenToWindow ((WindowPtr) pDrawable); compPaintChildrenToWindow((WindowPtr) pDrawable);
(*pScreen->GetImage) (pDrawable, sx, sy, w, h, format, planemask, pdstLine); (*pScreen->GetImage) (pDrawable, sx, sy, w, h, format, planemask, pdstLine);
cs->GetImage = pScreen->GetImage; cs->GetImage = pScreen->GetImage;
pScreen->GetImage = compGetImage; pScreen->GetImage = compGetImage;
} }
static void compSourceValidate(DrawablePtr pDrawable, static void
compSourceValidate(DrawablePtr pDrawable,
int x, int y, int x, int y,
int width, int height, int width, int height, unsigned int subWindowMode)
unsigned int subWindowMode)
{ {
ScreenPtr pScreen = pDrawable->pScreen; ScreenPtr pScreen = pDrawable->pScreen;
CompScreenPtr cs = GetCompScreen (pScreen); CompScreenPtr cs = GetCompScreen(pScreen);
pScreen->SourceValidate = cs->SourceValidate; pScreen->SourceValidate = cs->SourceValidate;
if (pDrawable->type == DRAWABLE_WINDOW && subWindowMode == IncludeInferiors) if (pDrawable->type == DRAWABLE_WINDOW && subWindowMode == IncludeInferiors)
compPaintChildrenToWindow ((WindowPtr) pDrawable); compPaintChildrenToWindow((WindowPtr) pDrawable);
if (pScreen->SourceValidate) if (pScreen->SourceValidate)
(*pScreen->SourceValidate) (pDrawable, x, y, width, height, (*pScreen->SourceValidate) (pDrawable, x, y, width, height,
subWindowMode); subWindowMode);
@ -174,15 +173,14 @@ static void compSourceValidate(DrawablePtr pDrawable,
*/ */
static DepthPtr static DepthPtr
compFindVisuallessDepth (ScreenPtr pScreen, int d) compFindVisuallessDepth(ScreenPtr pScreen, int d)
{ {
int i; int i;
for (i = 0; i < pScreen->numDepths; i++) for (i = 0; i < pScreen->numDepths; i++) {
{
DepthPtr depth = &pScreen->allowedDepths[i]; DepthPtr depth = &pScreen->allowedDepths[i];
if (depth->depth == d)
{ if (depth->depth == d) {
/* /*
* Make sure it doesn't have visuals already * Make sure it doesn't have visuals already
*/ */
@ -205,13 +203,13 @@ compFindVisuallessDepth (ScreenPtr pScreen, int d)
* Add a list of visual IDs to the list of visuals to implicitly redirect. * Add a list of visual IDs to the list of visuals to implicitly redirect.
*/ */
static Bool static Bool
compRegisterAlternateVisuals (CompScreenPtr cs, VisualID *vids, int nVisuals) compRegisterAlternateVisuals(CompScreenPtr cs, VisualID * vids, int nVisuals)
{ {
VisualID *p; VisualID *p;
p = realloc(cs->alternateVisuals, p = realloc(cs->alternateVisuals,
sizeof(VisualID) * (cs->numAlternateVisuals + nVisuals)); sizeof(VisualID) * (cs->numAlternateVisuals + nVisuals));
if(p == NULL) if (p == NULL)
return FALSE; return FALSE;
memcpy(&p[cs->numAlternateVisuals], vids, sizeof(VisualID) * nVisuals); memcpy(&p[cs->numAlternateVisuals], vids, sizeof(VisualID) * nVisuals);
@ -222,10 +220,12 @@ compRegisterAlternateVisuals (CompScreenPtr cs, VisualID *vids, int nVisuals)
return TRUE; return TRUE;
} }
Bool CompositeRegisterAlternateVisuals (ScreenPtr pScreen, VisualID *vids, Bool
CompositeRegisterAlternateVisuals(ScreenPtr pScreen, VisualID * vids,
int nVisuals) int nVisuals)
{ {
CompScreenPtr cs = GetCompScreen (pScreen); CompScreenPtr cs = GetCompScreen(pScreen);
return compRegisterAlternateVisuals(cs, vids, nVisuals); return compRegisterAlternateVisuals(cs, vids, nVisuals);
} }
@ -236,9 +236,9 @@ typedef struct _alternateVisual {
static CompAlternateVisual altVisuals[] = { static CompAlternateVisual altVisuals[] = {
#if COMP_INCLUDE_RGB24_VISUAL #if COMP_INCLUDE_RGB24_VISUAL
{ 24, PICT_r8g8b8 }, {24, PICT_r8g8b8},
#endif #endif
{ 32, PICT_a8r8g8b8 }, {32, PICT_a8r8g8b8},
}; };
static const int NUM_COMP_ALTERNATE_VISUALS = sizeof(altVisuals) / static const int NUM_COMP_ALTERNATE_VISUALS = sizeof(altVisuals) /
@ -246,7 +246,7 @@ static const int NUM_COMP_ALTERNATE_VISUALS = sizeof(altVisuals) /
static Bool static Bool
compAddAlternateVisual(ScreenPtr pScreen, CompScreenPtr cs, compAddAlternateVisual(ScreenPtr pScreen, CompScreenPtr cs,
CompAlternateVisual *alt) CompAlternateVisual * alt)
{ {
VisualPtr visual; VisualPtr visual;
DepthPtr depth; DepthPtr depth;
@ -261,12 +261,12 @@ compAddAlternateVisual(ScreenPtr pScreen, CompScreenPtr cs,
if (alt->depth >= pScreen->rootDepth && alt->depth != 32) if (alt->depth >= pScreen->rootDepth && alt->depth != 32)
return FALSE; return FALSE;
depth = compFindVisuallessDepth (pScreen, alt->depth); depth = compFindVisuallessDepth(pScreen, alt->depth);
if (!depth) if (!depth)
/* alt->depth doesn't exist or already has alternate visuals. */ /* alt->depth doesn't exist or already has alternate visuals. */
return TRUE; return TRUE;
pPictFormat = PictureMatchFormat (pScreen, alt->depth, alt->format); pPictFormat = PictureMatchFormat(pScreen, alt->depth, alt->format);
if (!pPictFormat) if (!pPictFormat)
return FALSE; return FALSE;
@ -282,13 +282,16 @@ compAddAlternateVisual(ScreenPtr pScreen, CompScreenPtr cs,
visual->class = PseudoColor; visual->class = PseudoColor;
visual->nplanes = PICT_FORMAT_BPP(alt->format); visual->nplanes = PICT_FORMAT_BPP(alt->format);
visual->ColormapEntries = 1 << visual->nplanes; visual->ColormapEntries = 1 << visual->nplanes;
} else { }
else {
DirectFormatRec *direct = &pPictFormat->direct; DirectFormatRec *direct = &pPictFormat->direct;
visual->class = TrueColor; visual->class = TrueColor;
visual->redMask = ((unsigned long)direct->redMask) << direct->red; visual->redMask = ((unsigned long) direct->redMask) << direct->red;
visual->greenMask = ((unsigned long)direct->greenMask) << direct->green; visual->greenMask =
visual->blueMask = ((unsigned long)direct->blueMask) << direct->blue; ((unsigned long) direct->greenMask) << direct->green;
alphaMask = ((unsigned long)direct->alphaMask) << direct->alpha; visual->blueMask = ((unsigned long) direct->blueMask) << direct->blue;
alphaMask = ((unsigned long) direct->alphaMask) << direct->alpha;
visual->offsetRed = direct->red; visual->offsetRed = direct->red;
visual->offsetGreen = direct->green; visual->offsetGreen = direct->green;
visual->offsetBlue = direct->blue; visual->offsetBlue = direct->blue;
@ -296,14 +299,13 @@ compAddAlternateVisual(ScreenPtr pScreen, CompScreenPtr cs,
* Include A bits in this (unlike GLX which includes only RGB) * Include A bits in this (unlike GLX which includes only RGB)
* This lets DIX compute suitable masks for colormap allocations * This lets DIX compute suitable masks for colormap allocations
*/ */
visual->nplanes = Ones (visual->redMask | visual->nplanes = Ones(visual->redMask |
visual->greenMask | visual->greenMask |
visual->blueMask | visual->blueMask | alphaMask);
alphaMask);
/* find widest component */ /* find widest component */
visual->ColormapEntries = (1 << max (Ones (visual->redMask), visual->ColormapEntries = (1 << max(Ones(visual->redMask),
max (Ones (visual->greenMask), max(Ones(visual->greenMask),
Ones (visual->blueMask)))); Ones(visual->blueMask))));
} }
/* remember the visual ID to detect auto-update windows */ /* remember the visual ID to detect auto-update windows */
@ -313,18 +315,18 @@ compAddAlternateVisual(ScreenPtr pScreen, CompScreenPtr cs,
} }
static Bool static Bool
compAddAlternateVisuals (ScreenPtr pScreen, CompScreenPtr cs) compAddAlternateVisuals(ScreenPtr pScreen, CompScreenPtr cs)
{ {
int alt, ret = 0; int alt, ret = 0;
for (alt = 0; alt < NUM_COMP_ALTERNATE_VISUALS; alt++) for (alt = 0; alt < NUM_COMP_ALTERNATE_VISUALS; alt++)
ret |= compAddAlternateVisual(pScreen, cs, altVisuals + alt); ret |= compAddAlternateVisual(pScreen, cs, altVisuals + alt);
return !!ret; return ! !ret;
} }
Bool Bool
compScreenInit (ScreenPtr pScreen) compScreenInit(ScreenPtr pScreen)
{ {
CompScreenPtr cs; CompScreenPtr cs;
@ -335,9 +337,9 @@ compScreenInit (ScreenPtr pScreen)
if (!dixRegisterPrivateKey(&CompSubwindowsPrivateKeyRec, PRIVATE_WINDOW, 0)) if (!dixRegisterPrivateKey(&CompSubwindowsPrivateKeyRec, PRIVATE_WINDOW, 0))
return FALSE; return FALSE;
if (GetCompScreen (pScreen)) if (GetCompScreen(pScreen))
return TRUE; return TRUE;
cs = (CompScreenPtr) malloc(sizeof (CompScreenRec)); cs = (CompScreenPtr) malloc(sizeof(CompScreenRec));
if (!cs) if (!cs)
return FALSE; return FALSE;
@ -348,8 +350,7 @@ compScreenInit (ScreenPtr pScreen)
cs->numAlternateVisuals = 0; cs->numAlternateVisuals = 0;
cs->alternateVisuals = NULL; cs->alternateVisuals = NULL;
if (!compAddAlternateVisuals (pScreen, cs)) if (!compAddAlternateVisuals(pScreen, cs)) {
{
free(cs); free(cs);
return FALSE; return FALSE;
} }

View File

@ -164,12 +164,15 @@ typedef struct _CompScreen {
} CompScreenRec, *CompScreenPtr; } CompScreenRec, *CompScreenPtr;
extern DevPrivateKeyRec CompScreenPrivateKeyRec; extern DevPrivateKeyRec CompScreenPrivateKeyRec;
#define CompScreenPrivateKey (&CompScreenPrivateKeyRec) #define CompScreenPrivateKey (&CompScreenPrivateKeyRec)
extern DevPrivateKeyRec CompWindowPrivateKeyRec; extern DevPrivateKeyRec CompWindowPrivateKeyRec;
#define CompWindowPrivateKey (&CompWindowPrivateKeyRec) #define CompWindowPrivateKey (&CompWindowPrivateKeyRec)
extern DevPrivateKeyRec CompSubwindowsPrivateKeyRec; extern DevPrivateKeyRec CompSubwindowsPrivateKeyRec;
#define CompSubwindowsPrivateKey (&CompSubwindowsPrivateKeyRec) #define CompSubwindowsPrivateKey (&CompSubwindowsPrivateKeyRec)
#define GetCompScreen(s) ((CompScreenPtr) \ #define GetCompScreen(s) ((CompScreenPtr) \
@ -188,40 +191,41 @@ extern RESTYPE CompositeClientOverlayType;
*/ */
Bool Bool
compRedirectWindow (ClientPtr pClient, WindowPtr pWin, int update); compRedirectWindow(ClientPtr pClient, WindowPtr pWin, int update);
void void
compFreeClientWindow (WindowPtr pWin, XID id); compFreeClientWindow(WindowPtr pWin, XID id);
int int
compUnredirectWindow (ClientPtr pClient, WindowPtr pWin, int update); compUnredirectWindow(ClientPtr pClient, WindowPtr pWin, int update);
int int
compRedirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update); compRedirectSubwindows(ClientPtr pClient, WindowPtr pWin, int update);
void void
compFreeClientSubwindows (WindowPtr pWin, XID id); compFreeClientSubwindows(WindowPtr pWin, XID id);
int int
compUnredirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update); compUnredirectSubwindows(ClientPtr pClient, WindowPtr pWin, int update);
int int
compRedirectOneSubwindow (WindowPtr pParent, WindowPtr pWin); compRedirectOneSubwindow(WindowPtr pParent, WindowPtr pWin);
int int
compUnredirectOneSubwindow (WindowPtr pParent, WindowPtr pWin); compUnredirectOneSubwindow(WindowPtr pParent, WindowPtr pWin);
Bool Bool
compAllocPixmap (WindowPtr pWin); compAllocPixmap(WindowPtr pWin);
void void
compSetParentPixmap (WindowPtr pWin); compSetParentPixmap(WindowPtr pWin);
void void
compRestoreWindow (WindowPtr pWin, PixmapPtr pPixmap); compRestoreWindow(WindowPtr pWin, PixmapPtr pPixmap);
Bool Bool
compReallocPixmap (WindowPtr pWin, int x, int y,
compReallocPixmap(WindowPtr pWin, int x, int y,
unsigned int w, unsigned int h, int bw); unsigned int w, unsigned int h, int bw);
/* /*
@ -229,33 +233,33 @@ compReallocPixmap (WindowPtr pWin, int x, int y,
*/ */
void void
CompositeExtensionInit (void); CompositeExtensionInit(void);
/* /*
* compinit.c * compinit.c
*/ */
Bool Bool
compScreenInit (ScreenPtr pScreen); compScreenInit(ScreenPtr pScreen);
/* /*
* compoverlay.c * compoverlay.c
*/ */
void void
compFreeOverlayClient (CompOverlayClientPtr pOcToDel); compFreeOverlayClient(CompOverlayClientPtr pOcToDel);
CompOverlayClientPtr CompOverlayClientPtr
compFindOverlayClient (ScreenPtr pScreen, ClientPtr pClient); compFindOverlayClient(ScreenPtr pScreen, ClientPtr pClient);
CompOverlayClientPtr CompOverlayClientPtr
compCreateOverlayClient (ScreenPtr pScreen, ClientPtr pClient); compCreateOverlayClient(ScreenPtr pScreen, ClientPtr pClient);
Bool Bool
compCreateOverlayWindow (ScreenPtr pScreen); compCreateOverlayWindow(ScreenPtr pScreen);
void void
compDestroyOverlayWindow (ScreenPtr pScreen); compDestroyOverlayWindow(ScreenPtr pScreen);
/* /*
* compwindow.c * compwindow.c
@ -263,74 +267,75 @@ compDestroyOverlayWindow (ScreenPtr pScreen);
#ifdef COMPOSITE_DEBUG #ifdef COMPOSITE_DEBUG
void void
compCheckTree (ScreenPtr pScreen); compCheckTree(ScreenPtr pScreen);
#else #else
#define compCheckTree(s) #define compCheckTree(s)
#endif #endif
PictFormatPtr PictFormatPtr compWindowFormat(WindowPtr pWin);
compWindowFormat (WindowPtr pWin);
void void
compSetPixmap (WindowPtr pWin, PixmapPtr pPixmap); compSetPixmap(WindowPtr pWin, PixmapPtr pPixmap);
Bool Bool
compCheckRedirect (WindowPtr pWin); compCheckRedirect(WindowPtr pWin);
Bool Bool
compPositionWindow (WindowPtr pWin, int x, int y); compPositionWindow(WindowPtr pWin, int x, int y);
Bool Bool
compRealizeWindow (WindowPtr pWin); compRealizeWindow(WindowPtr pWin);
Bool Bool
compUnrealizeWindow (WindowPtr pWin); compUnrealizeWindow(WindowPtr pWin);
void void
compClipNotify (WindowPtr pWin, int dx, int dy); compClipNotify(WindowPtr pWin, int dx, int dy);
void void
compMoveWindow (WindowPtr pWin, int x, int y, WindowPtr pSib, VTKind kind); compMoveWindow(WindowPtr pWin, int x, int y, WindowPtr pSib, VTKind kind);
void void
compResizeWindow (WindowPtr pWin, int x, int y,
compResizeWindow(WindowPtr pWin, int x, int y,
unsigned int w, unsigned int h, WindowPtr pSib); unsigned int w, unsigned int h, WindowPtr pSib);
void void
compChangeBorderWidth (WindowPtr pWin, unsigned int border_width); compChangeBorderWidth(WindowPtr pWin, unsigned int border_width);
void void
compReparentWindow (WindowPtr pWin, WindowPtr pPriorParent); compReparentWindow(WindowPtr pWin, WindowPtr pPriorParent);
Bool Bool
compCreateWindow (WindowPtr pWin); compCreateWindow(WindowPtr pWin);
Bool Bool
compDestroyWindow (WindowPtr pWin); compDestroyWindow(WindowPtr pWin);
void void
compSetRedirectBorderClip (WindowPtr pWin, RegionPtr pRegion); compSetRedirectBorderClip(WindowPtr pWin, RegionPtr pRegion);
RegionPtr RegionPtr
compGetRedirectBorderClip (WindowPtr pWin); compGetRedirectBorderClip(WindowPtr pWin);
void void
compCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc); compCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
void void
compPaintChildrenToWindow (WindowPtr pWin); compPaintChildrenToWindow(WindowPtr pWin);
WindowPtr WindowPtr
CompositeRealChildHead (WindowPtr pWin); CompositeRealChildHead(WindowPtr pWin);
int int
DeleteWindowNoInputDevices(pointer value, XID wid); DeleteWindowNoInputDevices(pointer value, XID wid);
int int
compConfigNotify(WindowPtr pWin, int x, int y, int w, int h, compConfigNotify(WindowPtr pWin, int x, int y, int w, int h,
int bw, WindowPtr pSib); int bw, WindowPtr pSib);
void PanoramiXCompositeInit (void); void PanoramiXCompositeInit(void);
void PanoramiXCompositeReset (void); void PanoramiXCompositeReset(void);
#endif /* _COMPINT_H_ */ #endif /* _COMPINT_H_ */

Some files were not shown because too many files have changed in this diff Show More