Merge branch 'server-1.5-branch' into xorg-server-1.5-apple

This commit is contained in:
Jeremy Huddleston 2008-09-26 12:29:44 -07:00
commit 86fa42ed82
13 changed files with 300 additions and 89 deletions

View file

@ -936,10 +936,11 @@ ProcPanoramiXGetState(ClientPtr client)
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
rep.state = !noPanoramiXExtension; rep.state = !noPanoramiXExtension;
rep.window = stuff->window;
if (client->swapped) { if (client->swapped) {
swaps (&rep.sequenceNumber, n); swaps (&rep.sequenceNumber, n);
swapl (&rep.length, n); swapl (&rep.length, n);
swaps (&rep.state, n); swapl (&rep.window, n);
} }
WriteToClient (client, sizeof (xPanoramiXGetStateReply), (char *) &rep); WriteToClient (client, sizeof (xPanoramiXGetStateReply), (char *) &rep);
return client->noClientException; return client->noClientException;
@ -963,10 +964,11 @@ ProcPanoramiXGetScreenCount(ClientPtr client)
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
rep.ScreenCount = PanoramiXNumScreens; rep.ScreenCount = PanoramiXNumScreens;
rep.window = stuff->window;
if (client->swapped) { if (client->swapped) {
swaps (&rep.sequenceNumber, n); swaps (&rep.sequenceNumber, n);
swapl (&rep.length, n); swapl (&rep.length, n);
swaps (&rep.ScreenCount, n); swapl (&rep.window, n);
} }
WriteToClient (client, sizeof (xPanoramiXGetScreenCountReply), (char *) &rep); WriteToClient (client, sizeof (xPanoramiXGetScreenCountReply), (char *) &rep);
return client->noClientException; return client->noClientException;
@ -980,6 +982,9 @@ ProcPanoramiXGetScreenSize(ClientPtr client)
xPanoramiXGetScreenSizeReply rep; xPanoramiXGetScreenSizeReply rep;
register int n, rc; register int n, rc;
if (stuff->screen >= PanoramiXNumScreens)
return BadMatch;
REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq); REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq);
rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess); rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess);
if (rc != Success) if (rc != Success)
@ -991,11 +996,15 @@ ProcPanoramiXGetScreenSize(ClientPtr client)
/* screen dimensions */ /* screen dimensions */
rep.width = panoramiXdataPtr[stuff->screen].width; rep.width = panoramiXdataPtr[stuff->screen].width;
rep.height = panoramiXdataPtr[stuff->screen].height; rep.height = panoramiXdataPtr[stuff->screen].height;
rep.window = stuff->window;
rep.screen = stuff->screen;
if (client->swapped) { if (client->swapped) {
swaps (&rep.sequenceNumber, n); swaps (&rep.sequenceNumber, n);
swapl (&rep.length, n); swapl (&rep.length, n);
swaps (&rep.width, n); swapl (&rep.width, n);
swaps (&rep.height, n); swapl (&rep.height, n);
swapl (&rep.window, n);
swapl (&rep.screen, n);
} }
WriteToClient (client, sizeof (xPanoramiXGetScreenSizeReply), (char *) &rep); WriteToClient (client, sizeof (xPanoramiXGetScreenSizeReply), (char *) &rep);
return client->noClientException; return client->noClientException;

View file

@ -156,6 +156,7 @@ static
int ProcXevieQueryVersion (register ClientPtr client) int ProcXevieQueryVersion (register ClientPtr client)
{ {
xXevieQueryVersionReply rep; xXevieQueryVersionReply rep;
int n;
REQUEST_SIZE_MATCH (xXevieQueryVersionReq); REQUEST_SIZE_MATCH (xXevieQueryVersionReq);
rep.type = X_Reply; rep.type = X_Reply;
@ -163,6 +164,12 @@ int ProcXevieQueryVersion (register ClientPtr client)
rep.sequence_number = client->sequence; rep.sequence_number = client->sequence;
rep.server_major_version = XEVIE_MAJOR_VERSION; rep.server_major_version = XEVIE_MAJOR_VERSION;
rep.server_minor_version = XEVIE_MINOR_VERSION; rep.server_minor_version = XEVIE_MINOR_VERSION;
if (client->swapped) {
swaps(&rep.sequence_number, n);
swapl(&rep.length, n);
swaps(&rep.server_major_version, n);
swaps(&rep.server_minor_version, n);
}
WriteToClient (client, sizeof (xXevieQueryVersionReply), (char *)&rep); WriteToClient (client, sizeof (xXevieQueryVersionReply), (char *)&rep);
return client->noClientException; return client->noClientException;
} }
@ -171,6 +178,7 @@ static
int ProcXevieStart (register ClientPtr client) int ProcXevieStart (register ClientPtr client)
{ {
xXevieStartReply rep; xXevieStartReply rep;
int n;
REQUEST_SIZE_MATCH (xXevieStartReq); REQUEST_SIZE_MATCH (xXevieStartReq);
rep.pad1 = 0; rep.pad1 = 0;
@ -202,8 +210,13 @@ int ProcXevieStart (register ClientPtr client)
xevieModifiersOn = FALSE; xevieModifiersOn = FALSE;
rep.length = 0;
rep.type = X_Reply; rep.type = X_Reply;
rep.sequence_number = client->sequence; rep.sequence_number = client->sequence;
if (client->swapped) {
swaps(&rep.sequence_number, n);
swapl(&rep.length, n);
}
WriteToClient (client, sizeof (xXevieStartReply), (char *)&rep); WriteToClient (client, sizeof (xXevieStartReply), (char *)&rep);
return client->noClientException; return client->noClientException;
} }
@ -212,6 +225,7 @@ static
int ProcXevieEnd (register ClientPtr client) int ProcXevieEnd (register ClientPtr client)
{ {
xXevieEndReply rep; xXevieEndReply rep;
int n;
REQUEST_SIZE_MATCH (xXevieEndReq); REQUEST_SIZE_MATCH (xXevieEndReq);
@ -223,8 +237,13 @@ int ProcXevieEnd (register ClientPtr client)
XevieEnd(xevieClientIndex); XevieEnd(xevieClientIndex);
} }
rep.length = 0;
rep.type = X_Reply; rep.type = X_Reply;
rep.sequence_number = client->sequence; rep.sequence_number = client->sequence;
if (client->swapped) {
swaps(&rep.sequence_number, n);
swapl(&rep.length, n);
}
WriteToClient (client, sizeof (xXevieEndReply), (char *)&rep); WriteToClient (client, sizeof (xXevieEndReply), (char *)&rep);
return client->noClientException; return client->noClientException;
} }
@ -236,6 +255,7 @@ int ProcXevieSend (register ClientPtr client)
xXevieSendReply rep; xXevieSendReply rep;
xEvent *xE; xEvent *xE;
static unsigned char lastDetail = 0, lastType = 0; static unsigned char lastDetail = 0, lastType = 0;
int n;
REQUEST_SIZE_MATCH (xXevieSendReq); REQUEST_SIZE_MATCH (xXevieSendReq);
@ -243,8 +263,13 @@ int ProcXevieSend (register ClientPtr client)
return BadAccess; return BadAccess;
xE = (xEvent *)&stuff->event; xE = (xEvent *)&stuff->event;
rep.length = 0;
rep.type = X_Reply; rep.type = X_Reply;
rep.sequence_number = client->sequence; rep.sequence_number = client->sequence;
if (client->swapped) {
swaps(&rep.sequence_number, n);
swapl(&rep.length, n);
}
WriteToClient (client, sizeof (xXevieSendReply), (char *)&rep); WriteToClient (client, sizeof (xXevieSendReply), (char *)&rep);
switch(xE->u.u.type) { switch(xE->u.u.type) {
@ -282,6 +307,7 @@ int ProcXevieSelectInput (register ClientPtr client)
{ {
REQUEST (xXevieSelectInputReq); REQUEST (xXevieSelectInputReq);
xXevieSelectInputReply rep; xXevieSelectInputReply rep;
int n;
REQUEST_SIZE_MATCH (xXevieSelectInputReq); REQUEST_SIZE_MATCH (xXevieSelectInputReq);
@ -289,8 +315,13 @@ int ProcXevieSelectInput (register ClientPtr client)
return BadAccess; return BadAccess;
xevieMask = stuff->event_mask; xevieMask = stuff->event_mask;
rep.length = 0;
rep.type = X_Reply; rep.type = X_Reply;
rep.sequence_number = client->sequence; rep.sequence_number = client->sequence;
if (client->swapped) {
swaps(&rep.sequence_number, n);
swapl(&rep.length, n);
}
WriteToClient (client, sizeof (xXevieSelectInputReply), (char *)&rep); WriteToClient (client, sizeof (xXevieSelectInputReply), (char *)&rep);
return client->noClientException; return client->noClientException;
} }

View file

@ -119,7 +119,8 @@ compChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
pScreen->ChangeWindowAttributes = cs->ChangeWindowAttributes; pScreen->ChangeWindowAttributes = cs->ChangeWindowAttributes;
ret = pScreen->ChangeWindowAttributes(pWin, mask); ret = pScreen->ChangeWindowAttributes(pWin, mask);
if (ret && (mask & CWBackingStore)) { if (ret && (mask & CWBackingStore) &&
pScreen->backingStoreSupport != NotUseful) {
if (pWin->backingStore != NotUseful) { if (pWin->backingStore != NotUseful) {
compRedirectWindow(serverClient, pWin, CompositeRedirectAutomatic); compRedirectWindow(serverClient, pWin, CompositeRedirectAutomatic);
pWin->backStorage = TRUE; pWin->backStorage = TRUE;

View file

@ -26,8 +26,8 @@ dnl
dnl Process this file with autoconf to create configure. dnl Process this file with autoconf to create configure.
AC_PREREQ(2.57) AC_PREREQ(2.57)
RELEASE_DATE="23 July 2008" AC_INIT([xorg-server], 1.5.1, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
AC_INIT([xorg-server], 1.4.99.906, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) RELEASE_DATE="23 September 2008"
AC_CONFIG_SRCDIR([Makefile.am]) AC_CONFIG_SRCDIR([Makefile.am])
AM_INIT_AUTOMAKE([dist-bzip2 foreign]) AM_INIT_AUTOMAKE([dist-bzip2 foreign])
AM_MAINTAINER_MODE AM_MAINTAINER_MODE
@ -528,7 +528,7 @@ AC_ARG_ENABLE(registry, AS_HELP_STRING([--disable-registry], [Build string
AC_ARG_ENABLE(composite, AS_HELP_STRING([--disable-composite], [Build Composite extension (default: enabled)]), [COMPOSITE=$enableval], [COMPOSITE=yes]) AC_ARG_ENABLE(composite, AS_HELP_STRING([--disable-composite], [Build Composite extension (default: enabled)]), [COMPOSITE=$enableval], [COMPOSITE=yes])
AC_ARG_ENABLE(mitshm, AS_HELP_STRING([--disable-shm], [Build SHM extension (default: enabled)]), [MITSHM=$enableval], [MITSHM=yes]) AC_ARG_ENABLE(mitshm, AS_HELP_STRING([--disable-shm], [Build SHM extension (default: enabled)]), [MITSHM=$enableval], [MITSHM=yes])
AC_ARG_ENABLE(xres, AS_HELP_STRING([--disable-xres], [Build XRes extension (default: enabled)]), [RES=$enableval], [RES=yes]) AC_ARG_ENABLE(xres, AS_HELP_STRING([--disable-xres], [Build XRes extension (default: enabled)]), [RES=$enableval], [RES=yes])
AC_ARG_ENABLE(xtrap, AS_HELP_STRING([--disable-xtrap], [Build XTrap extension (default: enabled)]), [XTRAP=$enableval], [XTRAP=yes]) AC_ARG_ENABLE(xtrap, AS_HELP_STRING([--enable-xtrap], [Build XTrap extension (default: disabled)]), [XTRAP=$enableval], [XTRAP=no])
AC_ARG_ENABLE(record, AS_HELP_STRING([--enable-record], [Build Record extension (default: disabled)]), [RECORD=$enableval], [RECORD=no]) AC_ARG_ENABLE(record, AS_HELP_STRING([--enable-record], [Build Record extension (default: disabled)]), [RECORD=$enableval], [RECORD=no])
AC_ARG_ENABLE(xv, AS_HELP_STRING([--disable-xv], [Build Xv extension (default: enabled)]), [XV=$enableval], [XV=yes]) AC_ARG_ENABLE(xv, AS_HELP_STRING([--disable-xv], [Build Xv extension (default: enabled)]), [XV=$enableval], [XV=yes])
AC_ARG_ENABLE(xvmc, AS_HELP_STRING([--disable-xvmc], [Build XvMC extension (default: enabled)]), [XVMC=$enableval], [XVMC=yes]) AC_ARG_ENABLE(xvmc, AS_HELP_STRING([--disable-xvmc], [Build XvMC extension (default: enabled)]), [XVMC=$enableval], [XVMC=yes])
@ -538,7 +538,7 @@ AC_ARG_ENABLE(xdmcp, AS_HELP_STRING([--disable-xdmcp], [Build XDMCP ext
AC_ARG_ENABLE(xdm-auth-1, AS_HELP_STRING([--disable-xdm-auth-1], [Build XDM-Auth-1 extension (default: auto)]), [XDMAUTH=$enableval], [XDMAUTH=auto]) AC_ARG_ENABLE(xdm-auth-1, AS_HELP_STRING([--disable-xdm-auth-1], [Build XDM-Auth-1 extension (default: auto)]), [XDMAUTH=$enableval], [XDMAUTH=auto])
AC_ARG_ENABLE(glx, AS_HELP_STRING([--disable-glx], [Build GLX extension (default: enabled)]), [GLX=$enableval], [GLX=yes]) AC_ARG_ENABLE(glx, AS_HELP_STRING([--disable-glx], [Build GLX extension (default: enabled)]), [GLX=$enableval], [GLX=yes])
AC_ARG_ENABLE(dri, AS_HELP_STRING([--enable-dri], [Build DRI extension (default: auto)]), [DRI=$enableval]) AC_ARG_ENABLE(dri, AS_HELP_STRING([--enable-dri], [Build DRI extension (default: auto)]), [DRI=$enableval])
AC_ARG_ENABLE(dri2, AS_HELP_STRING([--enable-dri2], [Build DRI2 extension (default: auto)]), [DRI2=$enableval]) AC_ARG_ENABLE(dri2, AS_HELP_STRING([--enable-dri2], [Build DRI2 extension (default: no)]), [DRI2=$enableval], [DRI2=no])
AC_ARG_ENABLE(xinerama, AS_HELP_STRING([--disable-xinerama], [Build Xinerama extension (default: enabled)]), [XINERAMA=$enableval], [XINERAMA=yes]) AC_ARG_ENABLE(xinerama, AS_HELP_STRING([--disable-xinerama], [Build Xinerama extension (default: enabled)]), [XINERAMA=$enableval], [XINERAMA=yes])
AC_ARG_ENABLE(xf86vidmode, AS_HELP_STRING([--disable-xf86vidmode], [Build XF86VidMode extension (default: auto)]), [XF86VIDMODE=$enableval], [XF86VIDMODE=auto]) AC_ARG_ENABLE(xf86vidmode, AS_HELP_STRING([--disable-xf86vidmode], [Build XF86VidMode extension (default: auto)]), [XF86VIDMODE=$enableval], [XF86VIDMODE=auto])
AC_ARG_ENABLE(xf86misc, AS_HELP_STRING([--disable-xf86misc], [Build XF86Misc extension (default: auto)]), [XF86MISC=$enableval], [XF86MISC=auto]) AC_ARG_ENABLE(xf86misc, AS_HELP_STRING([--disable-xf86misc], [Build XF86Misc extension (default: auto)]), [XF86MISC=$enableval], [XF86MISC=auto])

View file

@ -507,7 +507,7 @@ by the \fIfont path\fP.
The default font path is The default font path is
__default_font_path__ . __default_font_path__ .
.LP .LP
A special kind of directory can be specified using the the \fBcatalogue\fP: A special kind of directory can be specified using the \fBcatalogue\fP:
prefix. Directories specified this way can contain symlinks pointing to the prefix. Directories specified this way can contain symlinks pointing to the
real font directories. See the FONTPATH.D section for details. real font directories. See the FONTPATH.D section for details.
.LP .LP

View file

@ -43,6 +43,10 @@
DevPrivateKey exaScreenPrivateKey = &exaScreenPrivateKey; DevPrivateKey exaScreenPrivateKey = &exaScreenPrivateKey;
DevPrivateKey exaPixmapPrivateKey = &exaPixmapPrivateKey; DevPrivateKey exaPixmapPrivateKey = &exaPixmapPrivateKey;
#ifdef MITSHM
static ShmFuncs exaShmFuncs = { NULL, NULL };
#endif
static _X_INLINE void* static _X_INLINE void*
ExaGetPixmapAddress(PixmapPtr p) ExaGetPixmapAddress(PixmapPtr p)
{ {
@ -924,6 +928,12 @@ exaDriverInit (ScreenPtr pScreen,
} }
#endif #endif
#ifdef MITSHM
/*
* Don't allow shared pixmaps.
*/
ShmRegisterFuncs(pScreen, &exaShmFuncs);
#endif
/* /*
* Hookup offscreen pixmaps * Hookup offscreen pixmaps
*/ */

View file

@ -45,9 +45,13 @@ glapi_sources = \
glthread.h \ glthread.h \
glprocs.h glprocs.h
if DRI2
GLXDRI_SOURCE = glxdri2.c
endif
libglxdri_la_SOURCES = \ libglxdri_la_SOURCES = \
glxdri.c \ glxdri.c \
glxdri2.c \ $(GLXDRI2_SOURCE) \
glxdricommon.h \ glxdricommon.h \
extension_string.c \ extension_string.c \
extension_string.h extension_string.h

View file

@ -202,7 +202,7 @@ to the
__xconfigfile__(__filemansuffix__) file option. __xconfigfile__(__filemansuffix__) file option.
.TP 8 .TP 8
.B \-disableVidMode .B \-disableVidMode
Disable the the parts of the VidMode extension (used by the xvidtune Disable the parts of the VidMode extension (used by the xvidtune
client) that can be used to change the video modes. This is equivalent client) that can be used to change the video modes. This is equivalent
to the to the
.B DisableVidModeExtension .B DisableVidModeExtension

View file

@ -131,8 +131,8 @@ XAAIsEasyPolygon(
*bottomY = 0; *bottomY = 0;
origin -= (origin & 0x8000) << 1; origin -= (origin & 0x8000) << 1;
vertex1 = *((int *) &extents->x1) - origin; vertex1 = extents->x1 - origin;
vertex2 = *((int *) &extents->x2) - origin /* - 0x00010001 */; vertex2 = extents->x2 - origin /* - 0x00010001 */;
/* I think this was an error in cfb ^ */ /* I think this was an error in cfb ^ */
if (shape == Convex) { if (shape == Convex) {
@ -714,7 +714,7 @@ XAAFillPolygonStippled(
return; return;
} }
origin = *((int *)&pDraw->x); origin = pDraw->x;
switch( XAAIsEasyPolygon(ptsIn, count, &pGC->pCompositeClip->extents, switch( XAAIsEasyPolygon(ptsIn, count, &pGC->pCompositeClip->extents,
origin, &topPoint, &y, &maxy, shape) ) { origin, &topPoint, &y, &maxy, shape) ) {
@ -867,7 +867,7 @@ XAAFillPolygonTiled(
return; return;
} }
origin = *((int *)&pDraw->x); origin = pDraw->x;
switch( XAAIsEasyPolygon(ptsIn, count, &pGC->pCompositeClip->extents, switch( XAAIsEasyPolygon(ptsIn, count, &pGC->pCompositeClip->extents,
origin, &topPoint, &y, &maxy, shape) ) { origin, &topPoint, &y, &maxy, shape) ) {

View file

@ -894,6 +894,7 @@ ProcRRGetCrtcGamma (ClientPtr client)
RRCrtcPtr crtc; RRCrtcPtr crtc;
int n; int n;
unsigned long len; unsigned long len;
char *extra;
REQUEST_SIZE_MATCH(xRRGetCrtcGammaReq); REQUEST_SIZE_MATCH(xRRGetCrtcGammaReq);
crtc = LookupCrtc (client, stuff->crtc, DixReadAccess); crtc = LookupCrtc (client, stuff->crtc, DixReadAccess);
@ -902,6 +903,12 @@ ProcRRGetCrtcGamma (ClientPtr client)
len = crtc->gammaSize * 3 * 2; len = crtc->gammaSize * 3 * 2;
if (crtc->gammaSize) {
extra = xalloc(len);
if (!extra)
return BadAlloc;
}
reply.type = X_Reply; reply.type = X_Reply;
reply.sequenceNumber = client->sequence; reply.sequenceNumber = client->sequence;
reply.length = (len + 3) >> 2; reply.length = (len + 3) >> 2;
@ -914,8 +921,10 @@ ProcRRGetCrtcGamma (ClientPtr client)
WriteToClient (client, sizeof (xRRGetCrtcGammaReply), (char *) &reply); WriteToClient (client, sizeof (xRRGetCrtcGammaReply), (char *) &reply);
if (crtc->gammaSize) if (crtc->gammaSize)
{ {
memcpy(extra, crtc->gammaRed, len);
client->pSwapReplyFunc = (ReplySwapPtr)CopySwap16Write; client->pSwapReplyFunc = (ReplySwapPtr)CopySwap16Write;
WriteSwappedDataToClient (client, len, (char *) crtc->gammaRed); WriteSwappedDataToClient (client, len, extra);
xfree(extra);
} }
return client->noClientException; return client->noClientException;
} }

View file

@ -398,12 +398,13 @@ ProcRRListOutputProperties (ClientPtr client)
int n; int n;
swaps (&rep.sequenceNumber, n); swaps (&rep.sequenceNumber, n);
swapl (&rep.length, n); swapl (&rep.length, n);
swaps (&rep.nAtoms, n);
} }
temppAtoms = pAtoms; temppAtoms = pAtoms;
for (prop = output->properties; prop; prop = prop->next) for (prop = output->properties; prop; prop = prop->next)
*temppAtoms++ = prop->propertyName; *temppAtoms++ = prop->propertyName;
WriteReplyToClient(client, sizeof(xRRListOutputPropertiesReply), &rep); WriteToClient(client, sizeof(xRRListOutputPropertiesReply), (char*)&rep);
if (numProps) if (numProps)
{ {
client->pSwapReplyFunc = (ReplySwapPtr)Swap32Write; client->pSwapReplyFunc = (ReplySwapPtr)Swap32Write;
@ -420,6 +421,7 @@ ProcRRQueryOutputProperty (ClientPtr client)
xRRQueryOutputPropertyReply rep; xRRQueryOutputPropertyReply rep;
RROutputPtr output; RROutputPtr output;
RRPropertyPtr prop; RRPropertyPtr prop;
char *extra;
REQUEST_SIZE_MATCH(xRRQueryOutputPropertyReq); REQUEST_SIZE_MATCH(xRRQueryOutputPropertyReq);
@ -432,6 +434,11 @@ ProcRRQueryOutputProperty (ClientPtr client)
if (!prop) if (!prop)
return BadName; return BadName;
if (prop->num_valid) {
extra = xalloc(prop->num_valid * sizeof(INT32));
if (!extra)
return BadAlloc;
}
rep.type = X_Reply; rep.type = X_Reply;
rep.length = prop->num_valid; rep.length = prop->num_valid;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
@ -444,12 +451,14 @@ ProcRRQueryOutputProperty (ClientPtr client)
swaps (&rep.sequenceNumber, n); swaps (&rep.sequenceNumber, n);
swapl (&rep.length, n); swapl (&rep.length, n);
} }
WriteReplyToClient (client, sizeof (xRRQueryOutputPropertyReply), &rep); WriteToClient (client, sizeof (xRRQueryOutputPropertyReply), (char*)&rep);
if (prop->num_valid) if (prop->num_valid)
{ {
memcpy(extra, prop->valid_values, prop->num_valid * sizeof(INT32));
client->pSwapReplyFunc = (ReplySwapPtr)Swap32Write; client->pSwapReplyFunc = (ReplySwapPtr)Swap32Write;
WriteSwappedDataToClient(client, prop->num_valid * sizeof(INT32), WriteSwappedDataToClient(client, prop->num_valid * sizeof(INT32),
prop->valid_values); extra);
xfree(extra);
} }
return(client->noClientException); return(client->noClientException);
} }
@ -564,6 +573,7 @@ ProcRRGetOutputProperty (ClientPtr client)
unsigned long n, len, ind; unsigned long n, len, ind;
RROutputPtr output; RROutputPtr output;
xRRGetOutputPropertyReply reply; xRRGetOutputPropertyReply reply;
char *extra;
REQUEST_SIZE_MATCH(xRRGetOutputPropertyReq); REQUEST_SIZE_MATCH(xRRGetOutputPropertyReq);
if (stuff->delete) if (stuff->delete)
@ -603,7 +613,16 @@ ProcRRGetOutputProperty (ClientPtr client)
reply.bytesAfter = 0; reply.bytesAfter = 0;
reply.propertyType = None; reply.propertyType = None;
reply.format = 0; reply.format = 0;
WriteReplyToClient(client, sizeof(xRRGetOutputPropertyReply), &reply); if (client->swapped) {
int n;
swaps(&reply.sequenceNumber, n);
swapl(&reply.length, n);
swapl(&reply.propertyType, n);
swapl(&reply.bytesAfter, n);
swapl(&reply.nItems, n);
}
WriteToClient(client, sizeof(xRRGetOutputPropertyReply), &reply);
return(client->noClientException); return(client->noClientException);
} }
@ -627,7 +646,16 @@ ProcRRGetOutputProperty (ClientPtr client)
reply.length = 0; reply.length = 0;
reply.nItems = 0; reply.nItems = 0;
reply.propertyType = prop_value->type; reply.propertyType = prop_value->type;
WriteReplyToClient(client, sizeof(xRRGetOutputPropertyReply), &reply); if (client->swapped) {
int n;
swaps(&reply.sequenceNumber, n);
swapl(&reply.length, n);
swapl(&reply.propertyType, n);
swapl(&reply.bytesAfter, n);
swapl(&reply.nItems, n);
}
WriteToClient(client, sizeof(xRRGetOutputPropertyReply), &reply);
return(client->noClientException); return(client->noClientException);
} }
@ -648,6 +676,11 @@ ProcRRGetOutputProperty (ClientPtr client)
len = min(n - ind, 4 * stuff->longLength); len = min(n - ind, 4 * stuff->longLength);
if (len) {
extra = xalloc(len);
if (!extra)
return BadAlloc;
}
reply.bytesAfter = n - (ind + len); reply.bytesAfter = n - (ind + len);
reply.format = prop_value->format; reply.format = prop_value->format;
reply.length = (len + 3) >> 2; reply.length = (len + 3) >> 2;
@ -670,16 +703,27 @@ ProcRRGetOutputProperty (ClientPtr client)
RRDeliverEvent (output->pScreen, (xEvent *) &event, RROutputPropertyNotifyMask); RRDeliverEvent (output->pScreen, (xEvent *) &event, RROutputPropertyNotifyMask);
} }
WriteReplyToClient(client, sizeof(xGenericReply), &reply); if (client->swapped) {
int n;
swaps(&reply.sequenceNumber, n);
swapl(&reply.length, n);
swapl(&reply.propertyType, n);
swapl(&reply.bytesAfter, n);
swapl(&reply.nItems, n);
}
WriteToClient(client, sizeof(xGenericReply), &reply);
if (len) if (len)
{ {
memcpy(extra, (char *)prop_value->data + ind, len);
switch (reply.format) { switch (reply.format) {
case 32: client->pSwapReplyFunc = (ReplySwapPtr)CopySwap32Write; break; case 32: client->pSwapReplyFunc = (ReplySwapPtr)CopySwap32Write; break;
case 16: client->pSwapReplyFunc = (ReplySwapPtr)CopySwap16Write; break; case 16: client->pSwapReplyFunc = (ReplySwapPtr)CopySwap16Write; break;
default: client->pSwapReplyFunc = (ReplySwapPtr)WriteToClient; break; default: client->pSwapReplyFunc = (ReplySwapPtr)WriteToClient; break;
} }
WriteSwappedDataToClient(client, len, WriteSwappedDataToClient(client, len,
(char *)prop_value->data + ind); extra);
xfree(extra);
} }
if (stuff->delete && (reply.bytesAfter == 0)) if (stuff->delete && (reply.bytesAfter == 0))

View file

@ -84,191 +84,284 @@ SProcRRSelectInput (ClientPtr client)
static int static int
SProcRRGetScreenSizeRange (ClientPtr client) SProcRRGetScreenSizeRange (ClientPtr client)
{ {
int n;
REQUEST(xRRGetScreenSizeRangeReq); REQUEST(xRRGetScreenSizeRangeReq);
REQUEST_SIZE_MATCH(xRRGetScreenSizeRangeReq); REQUEST_SIZE_MATCH(xRRGetScreenSizeRangeReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->window, n);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRSetScreenSize (ClientPtr client) SProcRRSetScreenSize (ClientPtr client)
{ {
int n;
REQUEST(xRRSetScreenSizeReq); REQUEST(xRRSetScreenSizeReq);
REQUEST_SIZE_MATCH(xRRSetScreenSizeReq); REQUEST_SIZE_MATCH(xRRSetScreenSizeReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->window, n);
swaps(&stuff->width, n);
swaps(&stuff->height, n);
swapl(&stuff->widthInMillimeters, n);
swapl(&stuff->heightInMillimeters, n);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRGetScreenResources (ClientPtr client) SProcRRGetScreenResources (ClientPtr client)
{ {
int n;
REQUEST(xRRGetScreenResourcesReq); REQUEST(xRRGetScreenResourcesReq);
REQUEST_SIZE_MATCH(xRRGetScreenResourcesReq); REQUEST_SIZE_MATCH(xRRGetScreenResourcesReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->window, n);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRGetOutputInfo (ClientPtr client) SProcRRGetOutputInfo (ClientPtr client)
{ {
int n;
REQUEST(xRRGetOutputInfoReq);; REQUEST(xRRGetOutputInfoReq);;
REQUEST_SIZE_MATCH(xRRGetOutputInfoReq); REQUEST_SIZE_MATCH(xRRGetOutputInfoReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->output, n);
swapl(&stuff->configTimestamp, n);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRListOutputProperties (ClientPtr client) SProcRRListOutputProperties (ClientPtr client)
{ {
int n;
REQUEST(xRRListOutputPropertiesReq); REQUEST(xRRListOutputPropertiesReq);
REQUEST_SIZE_MATCH(xRRListOutputPropertiesReq); REQUEST_SIZE_MATCH(xRRListOutputPropertiesReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->output, n);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRQueryOutputProperty (ClientPtr client) SProcRRQueryOutputProperty (ClientPtr client)
{ {
int n;
REQUEST(xRRQueryOutputPropertyReq); REQUEST(xRRQueryOutputPropertyReq);
REQUEST_SIZE_MATCH(xRRQueryOutputPropertyReq); REQUEST_SIZE_MATCH(xRRQueryOutputPropertyReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->output, n);
swapl(&stuff->property, n);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRConfigureOutputProperty (ClientPtr client) SProcRRConfigureOutputProperty (ClientPtr client)
{ {
int n;
REQUEST(xRRConfigureOutputPropertyReq); REQUEST(xRRConfigureOutputPropertyReq);
REQUEST_SIZE_MATCH(xRRConfigureOutputPropertyReq); swaps(&stuff->length, n);
(void) stuff; swapl(&stuff->output, n);
return BadImplementation; swapl(&stuff->property, n);
SwapRestL(stuff);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRChangeOutputProperty (ClientPtr client) SProcRRChangeOutputProperty (ClientPtr client)
{ {
int n;
REQUEST(xRRChangeOutputPropertyReq); REQUEST(xRRChangeOutputPropertyReq);
REQUEST_SIZE_MATCH(xRRChangeOutputPropertyReq); REQUEST_AT_LEAST_SIZE (xRRChangeOutputPropertyReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->output, n);
swapl(&stuff->property, n);
swapl(&stuff->type, n);
swapl(&stuff->nUnits, n);
switch(stuff->format) {
case 8:
break;
case 16:
SwapRestS(stuff);
break;
case 32:
SwapRestL(stuff);
break;
default:
client->errorValue = stuff->format;
return BadValue;
}
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRDeleteOutputProperty (ClientPtr client) SProcRRDeleteOutputProperty (ClientPtr client)
{ {
int n;
REQUEST(xRRDeleteOutputPropertyReq); REQUEST(xRRDeleteOutputPropertyReq);
REQUEST_SIZE_MATCH(xRRDeleteOutputPropertyReq); REQUEST_SIZE_MATCH(xRRDeleteOutputPropertyReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->output, n);
swapl(&stuff->property, n);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRGetOutputProperty (ClientPtr client) SProcRRGetOutputProperty (ClientPtr client)
{ {
int n;
REQUEST(xRRGetOutputPropertyReq); REQUEST(xRRGetOutputPropertyReq);
REQUEST_SIZE_MATCH(xRRGetOutputPropertyReq); REQUEST_SIZE_MATCH(xRRGetOutputPropertyReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->output, n);
swapl(&stuff->property, n);
swapl(&stuff->type, n);
swapl(&stuff->longOffset, n);
swapl(&stuff->longLength, n);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRCreateMode (ClientPtr client) SProcRRCreateMode (ClientPtr client)
{ {
int n;
xRRModeInfo *modeinfo;
REQUEST(xRRCreateModeReq); REQUEST(xRRCreateModeReq);
REQUEST_SIZE_MATCH(xRRCreateModeReq); REQUEST_AT_LEAST_SIZE(xRRCreateModeReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->window, n);
modeinfo = &stuff->modeInfo;
swapl(&modeinfo->id, n);
swaps(&modeinfo->width, n);
swaps(&modeinfo->height, n);
swapl(&modeinfo->dotClock, n);
swaps(&modeinfo->hSyncStart, n);
swaps(&modeinfo->hSyncEnd, n);
swaps(&modeinfo->hTotal, n);
swaps(&modeinfo->vSyncStart, n);
swaps(&modeinfo->vSyncEnd, n);
swaps(&modeinfo->vTotal, n);
swaps(&modeinfo->nameLength, n);
swapl(&modeinfo->modeFlags, n);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRDestroyMode (ClientPtr client) SProcRRDestroyMode (ClientPtr client)
{ {
int n;
REQUEST(xRRDestroyModeReq); REQUEST(xRRDestroyModeReq);
REQUEST_SIZE_MATCH(xRRDestroyModeReq); REQUEST_SIZE_MATCH(xRRDestroyModeReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->mode, n);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRAddOutputMode (ClientPtr client) SProcRRAddOutputMode (ClientPtr client)
{ {
int n;
REQUEST(xRRAddOutputModeReq); REQUEST(xRRAddOutputModeReq);
REQUEST_SIZE_MATCH(xRRAddOutputModeReq); REQUEST_SIZE_MATCH(xRRAddOutputModeReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->output, n);
swapl(&stuff->mode, n);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRDeleteOutputMode (ClientPtr client) SProcRRDeleteOutputMode (ClientPtr client)
{ {
int n;
REQUEST(xRRDeleteOutputModeReq); REQUEST(xRRDeleteOutputModeReq);
REQUEST_SIZE_MATCH(xRRDeleteOutputModeReq); REQUEST_SIZE_MATCH(xRRDeleteOutputModeReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->output, n);
swapl(&stuff->mode, n);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRGetCrtcInfo (ClientPtr client) SProcRRGetCrtcInfo (ClientPtr client)
{ {
int n;
REQUEST(xRRGetCrtcInfoReq); REQUEST(xRRGetCrtcInfoReq);
REQUEST_SIZE_MATCH(xRRGetCrtcInfoReq); REQUEST_SIZE_MATCH(xRRGetCrtcInfoReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->crtc, n);
swapl(&stuff->configTimestamp, n);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRSetCrtcConfig (ClientPtr client) SProcRRSetCrtcConfig (ClientPtr client)
{ {
int n;
REQUEST(xRRSetCrtcConfigReq); REQUEST(xRRSetCrtcConfigReq);
REQUEST_SIZE_MATCH(xRRSetCrtcConfigReq); REQUEST_AT_LEAST_SIZE(xRRSetCrtcConfigReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->crtc, n);
swapl(&stuff->timestamp, n);
swapl(&stuff->configTimestamp, n);
swaps(&stuff->x, n);
swaps(&stuff->y, n);
swapl(&stuff->mode, n);
swaps(&stuff->rotation, n);
SwapRestL(stuff);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRGetCrtcGammaSize (ClientPtr client) SProcRRGetCrtcGammaSize (ClientPtr client)
{ {
int n;
REQUEST(xRRGetCrtcGammaSizeReq); REQUEST(xRRGetCrtcGammaSizeReq);
REQUEST_SIZE_MATCH(xRRGetCrtcGammaSizeReq); REQUEST_SIZE_MATCH(xRRGetCrtcGammaSizeReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->crtc, n);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRGetCrtcGamma (ClientPtr client) SProcRRGetCrtcGamma (ClientPtr client)
{ {
int n;
REQUEST(xRRGetCrtcGammaReq); REQUEST(xRRGetCrtcGammaReq);
REQUEST_SIZE_MATCH(xRRGetCrtcGammaReq); REQUEST_SIZE_MATCH(xRRGetCrtcGammaReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->crtc, n);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
static int static int
SProcRRSetCrtcGamma (ClientPtr client) SProcRRSetCrtcGamma (ClientPtr client)
{ {
int n;
REQUEST(xRRSetCrtcGammaReq); REQUEST(xRRSetCrtcGammaReq);
REQUEST_SIZE_MATCH(xRRSetCrtcGammaReq); REQUEST_AT_LEAST_SIZE(xRRSetCrtcGammaReq);
(void) stuff; swaps(&stuff->length, n);
return BadImplementation; swapl(&stuff->crtc, n);
swaps(&stuff->size, n);
SwapRestS(stuff);
return (*ProcRandrVector[stuff->randrReqType]) (client);
} }
int (*SProcRandrVector[RRNumberRequests])(ClientPtr) = { int (*SProcRandrVector[RRNumberRequests])(ClientPtr) = {

View file

@ -138,10 +138,11 @@ ProcRRXineramaGetState(ClientPtr client)
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
rep.state = active; rep.state = active;
rep.window = stuff->window;
if(client->swapped) { if(client->swapped) {
swaps (&rep.sequenceNumber, n); swaps (&rep.sequenceNumber, n);
swapl (&rep.length, n); swapl (&rep.length, n);
swaps (&rep.state, n); swapl (&rep.window, n);
} }
WriteToClient(client, sizeof(xPanoramiXGetStateReply), (char *)&rep); WriteToClient(client, sizeof(xPanoramiXGetStateReply), (char *)&rep);
return client->noClientException; return client->noClientException;
@ -192,10 +193,11 @@ ProcRRXineramaGetScreenCount(ClientPtr client)
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
rep.ScreenCount = RRXineramaScreenCount (pWin->drawable.pScreen); rep.ScreenCount = RRXineramaScreenCount (pWin->drawable.pScreen);
rep.window = stuff->window;
if(client->swapped) { if(client->swapped) {
swaps(&rep.sequenceNumber, n); swaps(&rep.sequenceNumber, n);
swapl(&rep.length, n); swapl(&rep.length, n);
swaps(&rep.ScreenCount, n); swapl(&rep.window, n);
} }
WriteToClient(client, sizeof(xPanoramiXGetScreenCountReply), (char *)&rep); WriteToClient(client, sizeof(xPanoramiXGetScreenCountReply), (char *)&rep);
return client->noClientException; return client->noClientException;
@ -223,11 +225,15 @@ ProcRRXineramaGetScreenSize(ClientPtr client)
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
rep.width = pRoot->drawable.width; rep.width = pRoot->drawable.width;
rep.height = pRoot->drawable.height; rep.height = pRoot->drawable.height;
rep.window = stuff->window;
rep.screen = stuff->screen;
if(client->swapped) { if(client->swapped) {
swaps(&rep.sequenceNumber, n); swaps(&rep.sequenceNumber, n);
swapl(&rep.length, n); swapl(&rep.length, n);
swaps(&rep.width, n); swapl(&rep.width, n);
swaps(&rep.height, n); swapl(&rep.height, n);
swapl(&rep.window, n);
swapl(&rep.screen, n);
} }
WriteToClient(client, sizeof(xPanoramiXGetScreenSizeReply), (char *)&rep); WriteToClient(client, sizeof(xPanoramiXGetScreenSizeReply), (char *)&rep);
return client->noClientException; return client->noClientException;
@ -351,6 +357,7 @@ SProcRRXineramaGetState(ClientPtr client)
register int n; register int n;
swaps (&stuff->length, n); swaps (&stuff->length, n);
REQUEST_SIZE_MATCH(xPanoramiXGetStateReq); REQUEST_SIZE_MATCH(xPanoramiXGetStateReq);
swapl (&stuff->window, n);
return ProcRRXineramaGetState(client); return ProcRRXineramaGetState(client);
} }
@ -361,6 +368,7 @@ SProcRRXineramaGetScreenCount(ClientPtr client)
register int n; register int n;
swaps (&stuff->length, n); swaps (&stuff->length, n);
REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq); REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq);
swapl (&stuff->window, n);
return ProcRRXineramaGetScreenCount(client); return ProcRRXineramaGetScreenCount(client);
} }
@ -371,6 +379,8 @@ SProcRRXineramaGetScreenSize(ClientPtr client)
register int n; register int n;
swaps (&stuff->length, n); swaps (&stuff->length, n);
REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq); REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq);
swapl (&stuff->window, n);
swapl (&stuff->screen, n);
return ProcRRXineramaGetScreenSize(client); return ProcRRXineramaGetScreenSize(client);
} }