[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xorg-server: Changes to 'upstream-experimental'



 Xext/shm.c                      |   94 ++++-------------
 Xext/shmint.h                   |    3 
 Xext/xevie.c                    |   31 +++++
 Xext/xselinux.c                 |   21 +--
 configure.ac                    |    8 -
 dix/dispatch.c                  |    2 
 doc/Xserver.man.pre             |    2 
 exa/exa.c                       |    7 -
 exa/exa_accel.c                 |   92 -----------------
 exa/exa_priv.h                  |    9 -
 glx/glxdriswrast.c              |    2 
 glx/glxext.c                    |   37 ++++--
 hw/xfree86/ddc/print_edid.c     |    3 
 hw/xfree86/doc/man/Xorg.man.pre |    2 
 hw/xfree86/modes/xf86Crtc.c     |    2 
 hw/xfree86/xaa/xaaFillPoly.c    |    8 -
 mi/miexpose.c                   |    4 
 randr/rrcrtc.c                  |   11 +-
 randr/rrproperty.c              |   58 +++++++++-
 randr/rrsdispatch.c             |  215 ++++++++++++++++++++++++++++------------
 20 files changed, 322 insertions(+), 289 deletions(-)

New commits:
commit 05fb2f9e1249d0b91bf4318cec4fb309217adff4
Author: Adam Jackson <ajax@redhat.com>
Date:   Wed Sep 3 19:14:22 2008 -0400

    xserver 1.5.0
    
    Drinkin' island is inside each of us, my son.

diff --git a/configure.ac b/configure.ac
index 6a0876b..0262274 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,8 +26,8 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-RELEASE_DATE="23 July 2008"
-AC_INIT([xorg-server], 1.4.99.906, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="3 September 2008"
+AC_INIT([xorg-server], 1.5.0, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
 AM_MAINTAINER_MODE

commit f385303cd0242e3a7fded15f8b5c3d610c13ee41
Author: Adam Jackson <ajax@redhat.com>
Date:   Tue Sep 2 15:43:15 2008 -0400

    Fix strict-aliasing silliness in XAA.
    (cherry picked from commit 613ce0955032fb032de0a3940752828d314f057a)

diff --git a/hw/xfree86/xaa/xaaFillPoly.c b/hw/xfree86/xaa/xaaFillPoly.c
index 23c2781..6f11e35 100644
--- a/hw/xfree86/xaa/xaaFillPoly.c
+++ b/hw/xfree86/xaa/xaaFillPoly.c
@@ -131,8 +131,8 @@ XAAIsEasyPolygon(
     *bottomY = 0;
 
     origin -= (origin & 0x8000) << 1;
-    vertex1 = *((int *) &extents->x1) - origin;
-    vertex2 = *((int *) &extents->x2) - origin /* - 0x00010001 */;
+    vertex1 = extents->x1 - origin;
+    vertex2 = extents->x2 - origin /* - 0x00010001 */;
                      /* I think this was an error in cfb ^ */
 
     if (shape == Convex) {
@@ -714,7 +714,7 @@ XAAFillPolygonStippled(
 	return;
     }
 
-    origin = *((int *)&pDraw->x);
+    origin = pDraw->x;
 
     switch( XAAIsEasyPolygon(ptsIn, count, &pGC->pCompositeClip->extents,
 		 origin, &topPoint, &y, &maxy, shape) ) {
@@ -867,7 +867,7 @@ XAAFillPolygonTiled(
 	return;
     }
 
-    origin = *((int *)&pDraw->x);
+    origin = pDraw->x;
 
     switch( XAAIsEasyPolygon(ptsIn, count, &pGC->pCompositeClip->extents,
 		 origin, &topPoint, &y, &maxy, shape) ) {

commit 6cb7f595b97e9442a79660bc639b2fc91842e19a
Author: Adam Jackson <ajax@redhat.com>
Date:   Wed Sep 3 14:59:24 2008 -0400

    Disable DRI2 by default.

diff --git a/configure.ac b/configure.ac
index d324bd5..6a0876b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -536,7 +536,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(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(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(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])

commit ed2248f673ed8993e678818c388203346a3614e0
Author: Adam Jackson <ajax@redhat.com>
Date:   Wed Sep 3 14:58:43 2008 -0400

    Disable XTrap build by default.

diff --git a/configure.ac b/configure.ac
index efef454..d324bd5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -526,7 +526,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(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(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: no)]), [XTRAP=$enableval], [XTRAP=no])
 AC_ARG_ENABLE(record,         AS_HELP_STRING([--disable-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(xvmc,           AS_HELP_STRING([--disable-xvmc], [Build XvMC extension (default: enabled)]), [XVMC=$enableval], [XVMC=yes])

commit 9bb4990c917cc512d39b5889e7bcecb5cfcbeb56
Author: Julien Cristau <jcristau@debian.org>
Date:   Mon Sep 1 19:45:30 2008 +0200

    Xevie: swap replies as necessary
    (cherry picked from commit b5cdcfa55c399e83d51242e93d4f25d8bc4fec1f)

diff --git a/Xext/xevie.c b/Xext/xevie.c
index 3fbe04d..1d51fd8 100644
--- a/Xext/xevie.c
+++ b/Xext/xevie.c
@@ -156,6 +156,7 @@ static
 int ProcXevieQueryVersion (register ClientPtr client)
 {
     xXevieQueryVersionReply rep;
+    int n;
 
     REQUEST_SIZE_MATCH (xXevieQueryVersionReq);
     rep.type = X_Reply;
@@ -163,6 +164,12 @@ int ProcXevieQueryVersion (register ClientPtr client)
     rep.sequence_number = client->sequence;
     rep.server_major_version = XEVIE_MAJOR_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);
     return client->noClientException;
 }
@@ -171,6 +178,7 @@ static
 int ProcXevieStart (register ClientPtr client)
 {
     xXevieStartReply rep;
+    int n;
 
     REQUEST_SIZE_MATCH (xXevieStartReq);
     rep.pad1 = 0;
@@ -205,6 +213,10 @@ int ProcXevieStart (register ClientPtr client)
     rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
+    if (client->swapped) {
+	swaps(&rep.sequence_number, n);
+	swapl(&rep.length, n);
+    }
     WriteToClient (client, sizeof (xXevieStartReply), (char *)&rep);
     return client->noClientException;
 }
@@ -213,6 +225,7 @@ static
 int ProcXevieEnd (register ClientPtr client)
 {
     xXevieEndReply rep;
+    int n;
 
     REQUEST_SIZE_MATCH (xXevieEndReq);
     
@@ -227,6 +240,10 @@ int ProcXevieEnd (register ClientPtr client)
     rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
+    if (client->swapped) {
+	swaps(&rep.sequence_number, n);
+	swapl(&rep.length, n);
+    }
     WriteToClient (client, sizeof (xXevieEndReply), (char *)&rep);
     return client->noClientException;
 }
@@ -238,6 +255,7 @@ int ProcXevieSend (register ClientPtr client)
     xXevieSendReply rep;
     xEvent *xE;
     static unsigned char lastDetail = 0, lastType = 0;
+    int n;
 
     REQUEST_SIZE_MATCH (xXevieSendReq);
     
@@ -248,6 +266,10 @@ int ProcXevieSend (register ClientPtr client)
     rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
+    if (client->swapped) {
+	swaps(&rep.sequence_number, n);
+	swapl(&rep.length, n);
+    }
     WriteToClient (client, sizeof (xXevieSendReply), (char *)&rep);
 
     switch(xE->u.u.type) {
@@ -285,6 +307,7 @@ int ProcXevieSelectInput (register ClientPtr client)
 {
     REQUEST (xXevieSelectInputReq);
     xXevieSelectInputReply rep;
+    int n;
 
     REQUEST_SIZE_MATCH (xXevieSelectInputReq);
 
@@ -295,6 +318,10 @@ int ProcXevieSelectInput (register ClientPtr client)
     rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
+    if (client->swapped) {
+	swaps(&rep.sequence_number, n);
+	swapl(&rep.length, n);
+    }
     WriteToClient (client, sizeof (xXevieSelectInputReply), (char *)&rep);
     return client->noClientException;
 }

commit bcea1095da2d29f5812bd1adabac334cfca60355
Author: Thorvald Natvig <slicer@users.sourceforge.net>
Date:   Mon Sep 1 19:36:56 2008 +0200

    Xevie: always initialize rep.length (bug#17394)
    
    The XEvIE extension doesn't clear the rep.length field for any reply but
    the version check. Hence, if there is junk data in it and that is sent
    to the client, it hangs.
    
    X.Org bug#17394 (http://bugs.freedesktop.org/show_bug.cgi?id=17394)
    (cherry picked from commit d3ae193f4ac87530f2745f8cb5e7b70dd516881e)

diff --git a/Xext/xevie.c b/Xext/xevie.c
index 5e20bd9..3fbe04d 100644
--- a/Xext/xevie.c
+++ b/Xext/xevie.c
@@ -202,6 +202,7 @@ int ProcXevieStart (register ClientPtr client)
     
     xevieModifiersOn = FALSE;
 
+    rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
     WriteToClient (client, sizeof (xXevieStartReply), (char *)&rep);
@@ -223,6 +224,7 @@ int ProcXevieEnd (register ClientPtr client)
         XevieEnd(xevieClientIndex);
     }
 
+    rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
     WriteToClient (client, sizeof (xXevieEndReply), (char *)&rep);
@@ -243,6 +245,7 @@ int ProcXevieSend (register ClientPtr client)
         return BadAccess;
 
     xE = (xEvent *)&stuff->event;
+    rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
     WriteToClient (client, sizeof (xXevieSendReply), (char *)&rep);
@@ -289,6 +292,7 @@ int ProcXevieSelectInput (register ClientPtr client)
         return BadAccess;
 
     xevieMask = stuff->event_mask;
+    rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
     WriteToClient (client, sizeof (xXevieSelectInputReply), (char *)&rep);

commit 67ed1f23fe29affe14587fbb809d0e95197db78b
Author: Julien Cristau <jcristau@debian.org>
Date:   Thu Aug 21 01:32:03 2008 +0200

    Add swapped dispatch for randr 1.2 requests
    (cherry picked from commit 01264f17925005969c3b71ca945fc1014bcd8c8e)

diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 7c22437..ec65a04 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -894,6 +894,7 @@ ProcRRGetCrtcGamma (ClientPtr client)
     RRCrtcPtr			crtc;
     int				n;
     unsigned long		len;
+    char			*extra;
     
     REQUEST_SIZE_MATCH(xRRGetCrtcGammaReq);
     crtc = LookupCrtc (client, stuff->crtc, DixReadAccess);
@@ -902,6 +903,12 @@ ProcRRGetCrtcGamma (ClientPtr client)
     
     len = crtc->gammaSize * 3 * 2;
     
+    if (crtc->gammaSize) {
+	extra = xalloc(len);
+	if (!extra)
+	    return BadAlloc;
+    }
+
     reply.type = X_Reply;
     reply.sequenceNumber = client->sequence;
     reply.length = (len + 3) >> 2;
@@ -914,8 +921,10 @@ ProcRRGetCrtcGamma (ClientPtr client)
     WriteToClient (client, sizeof (xRRGetCrtcGammaReply), (char *) &reply);
     if (crtc->gammaSize)
     {
+	memcpy(extra, crtc->gammaRed, len);
 	client->pSwapReplyFunc = (ReplySwapPtr)CopySwap16Write;
-	WriteSwappedDataToClient (client, len, (char *) crtc->gammaRed);
+	WriteSwappedDataToClient (client, len, extra);
+	xfree(extra);
     }
     return client->noClientException;
 }
diff --git a/randr/rrproperty.c b/randr/rrproperty.c
index 4617064..429246c 100644
--- a/randr/rrproperty.c
+++ b/randr/rrproperty.c
@@ -398,12 +398,13 @@ ProcRRListOutputProperties (ClientPtr client)
 	int n;
 	swaps (&rep.sequenceNumber, n);
 	swapl (&rep.length, n);
+	swaps (&rep.nAtoms, n);
     }
     temppAtoms = pAtoms;
     for (prop = output->properties; prop; prop = prop->next)
 	*temppAtoms++ = prop->propertyName;
 
-    WriteReplyToClient(client, sizeof(xRRListOutputPropertiesReply), &rep);
+    WriteToClient(client, sizeof(xRRListOutputPropertiesReply), (char*)&rep);
     if (numProps)
     {
         client->pSwapReplyFunc = (ReplySwapPtr)Swap32Write;
@@ -420,6 +421,7 @@ ProcRRQueryOutputProperty (ClientPtr client)
     xRRQueryOutputPropertyReply	    rep;
     RROutputPtr			    output;
     RRPropertyPtr		    prop;
+    char *extra;
     
     REQUEST_SIZE_MATCH(xRRQueryOutputPropertyReq);
 
@@ -432,6 +434,11 @@ ProcRRQueryOutputProperty (ClientPtr client)
     if (!prop)
 	return BadName;
     
+    if (prop->num_valid) {
+	extra = xalloc(prop->num_valid * sizeof(INT32));
+	if (!extra)
+	    return BadAlloc;
+    }
     rep.type = X_Reply;
     rep.length = prop->num_valid;
     rep.sequenceNumber = client->sequence;
@@ -444,12 +451,14 @@ ProcRRQueryOutputProperty (ClientPtr client)
 	swaps (&rep.sequenceNumber, n);
 	swapl (&rep.length, n);
     }
-    WriteReplyToClient (client, sizeof (xRRQueryOutputPropertyReply), &rep);
+    WriteToClient (client, sizeof (xRRQueryOutputPropertyReply), (char*)&rep);
     if (prop->num_valid)
     {
+        memcpy(extra, prop->valid_values, prop->num_valid * sizeof(INT32));
         client->pSwapReplyFunc = (ReplySwapPtr)Swap32Write;
         WriteSwappedDataToClient(client, prop->num_valid * sizeof(INT32),
-				 prop->valid_values);
+				 extra);
+        xfree(extra);
     }
     return(client->noClientException);
 }
@@ -564,6 +573,7 @@ ProcRRGetOutputProperty (ClientPtr client)
     unsigned long		n, len, ind;
     RROutputPtr			output;
     xRRGetOutputPropertyReply	reply;
+    char			*extra;
 
     REQUEST_SIZE_MATCH(xRRGetOutputPropertyReq);
     if (stuff->delete)
@@ -603,7 +613,16 @@ ProcRRGetOutputProperty (ClientPtr client)
 	reply.bytesAfter = 0;
 	reply.propertyType = None;
 	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);
     }
 
@@ -627,7 +646,16 @@ ProcRRGetOutputProperty (ClientPtr client)
 	reply.length = 0;
 	reply.nItems = 0;
 	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);
     }
 
@@ -648,6 +676,11 @@ ProcRRGetOutputProperty (ClientPtr client)
 
     len = min(n - ind, 4 * stuff->longLength);
 
+    if (len) {
+	extra = xalloc(len);
+	if (!extra)
+	    return BadAlloc;
+    }
     reply.bytesAfter = n - (ind + len);
     reply.format = prop_value->format;
     reply.length = (len + 3) >> 2;
@@ -670,16 +703,27 @@ ProcRRGetOutputProperty (ClientPtr client)
 	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)
     {
+	memcpy(extra, (char *)prop_value->data + ind, len);
 	switch (reply.format) {
 	case 32: client->pSwapReplyFunc = (ReplySwapPtr)CopySwap32Write; break;
 	case 16: client->pSwapReplyFunc = (ReplySwapPtr)CopySwap16Write; break;
 	default: client->pSwapReplyFunc = (ReplySwapPtr)WriteToClient; break;
 	}
 	WriteSwappedDataToClient(client, len,
-				 (char *)prop_value->data + ind);
+				 extra);
+	xfree(extra);
     }
 
     if (stuff->delete && (reply.bytesAfter == 0))
diff --git a/randr/rrsdispatch.c b/randr/rrsdispatch.c
index 4a6a6e4..80d16b7 100644
--- a/randr/rrsdispatch.c
+++ b/randr/rrsdispatch.c
@@ -84,191 +84,284 @@ SProcRRSelectInput (ClientPtr client)
 static int
 SProcRRGetScreenSizeRange (ClientPtr client)
 {
+    int n;
     REQUEST(xRRGetScreenSizeRangeReq);
-    
+
     REQUEST_SIZE_MATCH(xRRGetScreenSizeRangeReq);
-    (void) stuff;
-    return BadImplementation; 
+    swaps(&stuff->length, n);
+    swapl(&stuff->window, n);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int
 SProcRRSetScreenSize (ClientPtr client)
 {
+    int n;
     REQUEST(xRRSetScreenSizeReq);
-    
+
     REQUEST_SIZE_MATCH(xRRSetScreenSizeReq);
-    (void) stuff;
-    return BadImplementation; 
+    swaps(&stuff->length, n);
+    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
 SProcRRGetScreenResources (ClientPtr client)
 {
+    int n;
     REQUEST(xRRGetScreenResourcesReq);
-    
+
     REQUEST_SIZE_MATCH(xRRGetScreenResourcesReq);
-    (void) stuff;
-    return BadImplementation; 
+    swaps(&stuff->length, n);
+    swapl(&stuff->window, n);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int
 SProcRRGetOutputInfo (ClientPtr client)
 {
+    int n;
     REQUEST(xRRGetOutputInfoReq);;
-    
+
     REQUEST_SIZE_MATCH(xRRGetOutputInfoReq);
-    (void) stuff;
-    return BadImplementation; 
+    swaps(&stuff->length, n);
+    swapl(&stuff->output, n);
+    swapl(&stuff->configTimestamp, n);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int
 SProcRRListOutputProperties (ClientPtr client)
 {
+    int n;
     REQUEST(xRRListOutputPropertiesReq);
-    
+
     REQUEST_SIZE_MATCH(xRRListOutputPropertiesReq);
-    (void) stuff;
-    return BadImplementation; 
+    swaps(&stuff->length, n);
+    swapl(&stuff->output, n);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int
 SProcRRQueryOutputProperty (ClientPtr client)
 {
+    int n;
     REQUEST(xRRQueryOutputPropertyReq);
-    
+
     REQUEST_SIZE_MATCH(xRRQueryOutputPropertyReq);
-    (void) stuff;
-    return BadImplementation; 
+    swaps(&stuff->length, n);
+    swapl(&stuff->output, n);
+    swapl(&stuff->property, n);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int
 SProcRRConfigureOutputProperty (ClientPtr client)
 {
+    int n;
     REQUEST(xRRConfigureOutputPropertyReq);
-    
-    REQUEST_SIZE_MATCH(xRRConfigureOutputPropertyReq);
-    (void) stuff;
-    return BadImplementation; 
+
+    swaps(&stuff->length, n);
+    swapl(&stuff->output, n);
+    swapl(&stuff->property, n);
+    SwapRestL(stuff);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int
 SProcRRChangeOutputProperty (ClientPtr client)
 {
+    int n;
     REQUEST(xRRChangeOutputPropertyReq);
-    
-    REQUEST_SIZE_MATCH(xRRChangeOutputPropertyReq);
-    (void) stuff;
-    return BadImplementation; 
+
+    REQUEST_AT_LEAST_SIZE (xRRChangeOutputPropertyReq);
+    swaps(&stuff->length, n);
+    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
 SProcRRDeleteOutputProperty (ClientPtr client)
 {
+    int n;
     REQUEST(xRRDeleteOutputPropertyReq);
     
     REQUEST_SIZE_MATCH(xRRDeleteOutputPropertyReq);
-    (void) stuff;
-    return BadImplementation; 
+    swaps(&stuff->length, n);
+    swapl(&stuff->output, n);
+    swapl(&stuff->property, n);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int
 SProcRRGetOutputProperty (ClientPtr client)
 {
+    int n;
     REQUEST(xRRGetOutputPropertyReq);
-    
+
     REQUEST_SIZE_MATCH(xRRGetOutputPropertyReq);
-    (void) stuff;
-    return BadImplementation; 
+    swaps(&stuff->length, n);
+    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
 SProcRRCreateMode (ClientPtr client)
 {
+    int n;
+    xRRModeInfo *modeinfo;
     REQUEST(xRRCreateModeReq);
-    
-    REQUEST_SIZE_MATCH(xRRCreateModeReq);
-    (void) stuff;
-    return BadImplementation; 
+
+    REQUEST_AT_LEAST_SIZE(xRRCreateModeReq);
+    swaps(&stuff->length, n);
+    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
 SProcRRDestroyMode (ClientPtr client)
 {
+    int n;
     REQUEST(xRRDestroyModeReq);
-    
+
     REQUEST_SIZE_MATCH(xRRDestroyModeReq);
-    (void) stuff;
-    return BadImplementation; 
+    swaps(&stuff->length, n);
+    swapl(&stuff->mode, n);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int
 SProcRRAddOutputMode (ClientPtr client)
 {
+    int n;
     REQUEST(xRRAddOutputModeReq);
-    
+
     REQUEST_SIZE_MATCH(xRRAddOutputModeReq);
-    (void) stuff;
-    return BadImplementation; 
+    swaps(&stuff->length, n);
+    swapl(&stuff->output, n);
+    swapl(&stuff->mode, n);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int
 SProcRRDeleteOutputMode (ClientPtr client)
 {
+    int n;
     REQUEST(xRRDeleteOutputModeReq);
-    
+
     REQUEST_SIZE_MATCH(xRRDeleteOutputModeReq);
-    (void) stuff;
-    return BadImplementation; 
+    swaps(&stuff->length, n);
+    swapl(&stuff->output, n);
+    swapl(&stuff->mode, n);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int
 SProcRRGetCrtcInfo (ClientPtr client)
 {
+    int n;
     REQUEST(xRRGetCrtcInfoReq);
-    
+
     REQUEST_SIZE_MATCH(xRRGetCrtcInfoReq);
-    (void) stuff;
-    return BadImplementation; 
+    swaps(&stuff->length, n);
+    swapl(&stuff->crtc, n);
+    swapl(&stuff->configTimestamp, n);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int
 SProcRRSetCrtcConfig (ClientPtr client)
 {
+    int n;
     REQUEST(xRRSetCrtcConfigReq);
-    
-    REQUEST_SIZE_MATCH(xRRSetCrtcConfigReq);
-    (void) stuff;
-    return BadImplementation; 
+
+    REQUEST_AT_LEAST_SIZE(xRRSetCrtcConfigReq);
+    swaps(&stuff->length, n);
+    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
 SProcRRGetCrtcGammaSize (ClientPtr client)
 {
+    int n;
     REQUEST(xRRGetCrtcGammaSizeReq);
-    
+
     REQUEST_SIZE_MATCH(xRRGetCrtcGammaSizeReq);
-    (void) stuff;
-    return BadImplementation; 
+    swaps(&stuff->length, n);
+    swapl(&stuff->crtc, n);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int
 SProcRRGetCrtcGamma (ClientPtr client)
 {
+    int n;
     REQUEST(xRRGetCrtcGammaReq);
-    
+
     REQUEST_SIZE_MATCH(xRRGetCrtcGammaReq);
-    (void) stuff;
-    return BadImplementation; 
+    swaps(&stuff->length, n);
+    swapl(&stuff->crtc, n);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 static int
 SProcRRSetCrtcGamma (ClientPtr client)
 {
+    int n;
     REQUEST(xRRSetCrtcGammaReq);
-    
-    REQUEST_SIZE_MATCH(xRRSetCrtcGammaReq);
-    (void) stuff;
-    return BadImplementation; 
+
+    REQUEST_AT_LEAST_SIZE(xRRSetCrtcGammaReq);
+    swaps(&stuff->length, n);
+    swapl(&stuff->crtc, n);
+    swaps(&stuff->size, n);
+    SwapRestS(stuff);
+    return (*ProcRandrVector[stuff->randrReqType]) (client);
 }
 
 int (*SProcRandrVector[RRNumberRequests])(ClientPtr) = {

commit 62524d9d7648cfd9e2d7d6a3312ff20722d7f6a5
Author: Thomas Bodzar <Thomas.Bodzar@quest.com>
Date:   Sat Aug 30 15:34:29 2008 +0200

    Xorg.man: typo (the the).
    (cherry picked from commit 229e60db8f95232afc8cdcb7cd0572d117c84b90)

diff --git a/hw/xfree86/doc/man/Xorg.man.pre b/hw/xfree86/doc/man/Xorg.man.pre
index 405efda..8b48951 100644
--- a/hw/xfree86/doc/man/Xorg.man.pre
+++ b/hw/xfree86/doc/man/Xorg.man.pre
@@ -202,7 +202,7 @@ to the
 __xconfigfile__(__filemansuffix__) file option.
 .TP 8
 .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
 to the
 .B DisableVidModeExtension

commit 57fa9fd4a59be14f4c77c3dac501ef40ff656752
Author: Matthieu Herrb <matthieu.herrb@laas.fr>
Date:   Sat Aug 30 15:35:32 2008 +0200

    Xserver.man: Typo (the the).
    (cherry picked from commit d01c5ca7935a8340a3cd68c325da6dfec005c952)

diff --git a/doc/Xserver.man.pre b/doc/Xserver.man.pre
index c47a396..8fe3b76 100644
--- a/doc/Xserver.man.pre
+++ b/doc/Xserver.man.pre
@@ -507,7 +507,7 @@ by the \fIfont path\fP.
 The default font path is
 __default_font_path__ .
 .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
 real font directories. See the FONTPATH.D section for details.
 .LP

commit 7f42ed6ca938d0dee66bdfd6237b6632a4f7ab0d
Author: Daniel Drake <dsd@laptop.org>
Date:   Tue Sep 2 16:20:40 2008 -0400

    Don't try to destroy a NULL pixmap.
    (cherry picked from commit 4e1f9f51a9eea115ce2a073824e9c5cef4e2f364)

diff --git a/dix/dispatch.c b/dix/dispatch.c
index bb8b0c4..b913855 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -1338,8 +1338,8 @@ CreatePmap:
 	}
 	if (AddResource(stuff->pid, RT_PIXMAP, (pointer)pMap))
 	    return(client->noClientException);
+	(*pDraw->pScreen->DestroyPixmap)(pMap);
     }
-    (*pDraw->pScreen->DestroyPixmap)(pMap);
     return (BadAlloc);
 }
 

commit 48744d20b1d23b731604db10dda85a10f62664dc
Author: Maarten Maathuis <madman2003@gmail.com>
Date:   Sun Aug 31 18:07:22 2008 +0200

    xf86Crtc: Set mode to NULL, so nothing bad happens if crtc == NULL.
    
    - Fix is courtesy of math_b.

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 91ba1b7..2080b23 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -1737,7 +1737,7 @@ xf86SetScrnInfoModes (ScrnInfoPtr scrn)
     xf86CrtcConfigPtr	config = XF86_CRTC_CONFIG_PTR(scrn);
     xf86OutputPtr	output;
     xf86CrtcPtr		crtc;
-    DisplayModePtr	last, mode;
+    DisplayModePtr	last, mode = NULL;
 
     output = SetCompatOutput(config);
 

commit 580e96d6d4355acae6314105a3a8e4c7a4d6e3ea
Author: Xavier Bestel <xavier.bestel@free.fr>
Date:   Tue Jul 29 13:06:10 2008 -0400

    Cosmetic fix to EDID decoding.
    (cherry picked from commit bb2cacd33eb85f39b9e7fa554545611957df677d)

diff --git a/hw/xfree86/ddc/print_edid.c b/hw/xfree86/ddc/print_edid.c
index f5442ad..df11bfb 100644
--- a/hw/xfree86/ddc/print_edid.c
+++ b/hw/xfree86/ddc/print_edid.c
@@ -148,7 +148,8 @@ print_dpms_features(int scrnIndex, struct disp_features *c,
 	}
     } else {
 	int enc = c->display_type;
-	xf86DrvMsg(scrnIndex, X_INFO, "\nSupported color encodings: "
+	xf86ErrorF("\n");
+	xf86DrvMsg(scrnIndex, X_INFO, "Supported color encodings: "
 		   "RGB 4:4:4 %s%s\n",
 		   enc & DISP_YCRCB444 ? "YCrCb 4:4:4 " : "",
 		   enc & DISP_YCRCB422 ? "YCrCb 4:2:2" : "");

commit d0ef93430505d110e0d3c0552dad3361db33b369
Author: Fredrik Höglund <fredrik@kde.org>
Date:   Mon Aug 18 19:27:34 2008 +0200

    Fix the tile offset in miPaintWindow for ParentRelative windows.
    (cherry picked from commit 244a635fcdc9e0a7212d51b26d74f49d8e1b071f)

diff --git a/mi/miexpose.c b/mi/miexpose.c
index 5c2bd03..2fba6a2 100644
--- a/mi/miexpose.c
+++ b/mi/miexpose.c
@@ -564,8 +564,8 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
 	draw_x_off = drawable->x;
 	draw_y_off = drawable->y;
 
-	tile_x_off = 0;
-	tile_y_off = 0;
+	tile_x_off = pWin->drawable.x - draw_x_off;
+	tile_y_off = pWin->drawable.y - draw_y_off;
 	fill = pWin->background;
 	switch (pWin->backgroundState) {
 	case None:

commit 05472534cfefe6057b908cc7d698967eecb5dde4
Author: Daniel Drake <dsd@laptop.org>
Date:   Thu Jul 24 21:06:34 2008 -0500

    Don't abort if swrast library is not present
    
    GLX is enabled by default, but the current swrast behaviour causes X
    to abort with fatal error if the swrast dri library dlopen fails.
    
    Handle the case where the swrast library is not present, and do not
    register the GLX extension unless at least one screen has a usable
    GL provider.
    (cherry picked from commit eff25430b4a391409e39337962ff7697165d23c7)

diff --git a/glx/glxdriswrast.c b/glx/glxdriswrast.c
index 9d987c2..f36dae7 100644
--- a/glx/glxdriswrast.c
+++ b/glx/glxdriswrast.c
@@ -532,7 +532,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
 
     xfree(screen);
 
-    FatalError("GLX: could not load software renderer\n");
+    LogMessage(X_ERROR, "GLX: could not load software renderer\n");
 
     return NULL;
 }
diff --git a/glx/glxext.c b/glx/glxext.c
index 13c65da..6ba404f 100644
--- a/glx/glxext.c
+++ b/glx/glxext.c
@@ -279,6 +279,7 @@ void GlxExtensionInit(void)
     ScreenPtr pScreen;
     int i;
     __GLXprovider *p;
+    Bool glx_provided = False;
 
     __glXContextRes = CreateNewResourceType((DeleteType)ContextGone);
     __glXDrawableRes = CreateNewResourceType((DeleteType)DrawableGone);
@@ -289,6 +290,29 @@ void GlxExtensionInit(void)
     if (!AddCallback (&ClientStateCallback, glxClientCallback, 0))
 	return;
 
+    for (i = 0; i < screenInfo.numScreens; i++) {
+	pScreen = screenInfo.screens[i];


Reply to: