diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c index 2792dc714..8bc5c42c2 100644 --- a/Xext/panoramiX.c +++ b/Xext/panoramiX.c @@ -936,10 +936,11 @@ ProcPanoramiXGetState(ClientPtr client) rep.length = 0; rep.sequenceNumber = client->sequence; rep.state = !noPanoramiXExtension; + rep.window = stuff->window; if (client->swapped) { swaps (&rep.sequenceNumber, n); swapl (&rep.length, n); - swaps (&rep.state, n); + swapl (&rep.window, n); } WriteToClient (client, sizeof (xPanoramiXGetStateReply), (char *) &rep); return client->noClientException; @@ -963,10 +964,11 @@ ProcPanoramiXGetScreenCount(ClientPtr client) rep.length = 0; rep.sequenceNumber = client->sequence; rep.ScreenCount = PanoramiXNumScreens; + rep.window = stuff->window; if (client->swapped) { swaps (&rep.sequenceNumber, n); swapl (&rep.length, n); - swaps (&rep.ScreenCount, n); + swapl (&rep.window, n); } WriteToClient (client, sizeof (xPanoramiXGetScreenCountReply), (char *) &rep); return client->noClientException; @@ -980,6 +982,9 @@ ProcPanoramiXGetScreenSize(ClientPtr client) xPanoramiXGetScreenSizeReply rep; register int n, rc; + if (stuff->screen >= PanoramiXNumScreens) + return BadMatch; + REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq); rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess); if (rc != Success) @@ -991,11 +996,15 @@ ProcPanoramiXGetScreenSize(ClientPtr client) /* screen dimensions */ rep.width = panoramiXdataPtr[stuff->screen].width; rep.height = panoramiXdataPtr[stuff->screen].height; + rep.window = stuff->window; + rep.screen = stuff->screen; if (client->swapped) { swaps (&rep.sequenceNumber, n); swapl (&rep.length, n); - swaps (&rep.width, n); - swaps (&rep.height, n); + swapl (&rep.width, n); + swapl (&rep.height, n); + swapl (&rep.window, n); + swapl (&rep.screen, n); } WriteToClient (client, sizeof (xPanoramiXGetScreenSizeReply), (char *) &rep); return client->noClientException; diff --git a/Xext/xevie.c b/Xext/xevie.c index 5e20bd91c..1d51fd825 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; @@ -202,8 +210,13 @@ int ProcXevieStart (register ClientPtr client) xevieModifiersOn = FALSE; + 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; } @@ -212,6 +225,7 @@ static int ProcXevieEnd (register ClientPtr client) { xXevieEndReply rep; + int n; REQUEST_SIZE_MATCH (xXevieEndReq); @@ -223,8 +237,13 @@ int ProcXevieEnd (register ClientPtr client) XevieEnd(xevieClientIndex); } + 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; } @@ -236,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); @@ -243,8 +263,13 @@ int ProcXevieSend (register ClientPtr client) return BadAccess; xE = (xEvent *)&stuff->event; + 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) { @@ -282,6 +307,7 @@ int ProcXevieSelectInput (register ClientPtr client) { REQUEST (xXevieSelectInputReq); xXevieSelectInputReply rep; + int n; REQUEST_SIZE_MATCH (xXevieSelectInputReq); @@ -289,8 +315,13 @@ int ProcXevieSelectInput (register ClientPtr client) return BadAccess; xevieMask = stuff->event_mask; + 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; } diff --git a/composite/compinit.c b/composite/compinit.c index 49b2044b0..3bf77e0ae 100644 --- a/composite/compinit.c +++ b/composite/compinit.c @@ -119,7 +119,8 @@ compChangeWindowAttributes(WindowPtr pWin, unsigned long mask) pScreen->ChangeWindowAttributes = cs->ChangeWindowAttributes; ret = pScreen->ChangeWindowAttributes(pWin, mask); - if (ret && (mask & CWBackingStore)) { + if (ret && (mask & CWBackingStore) && + pScreen->backingStoreSupport != NotUseful) { if (pWin->backingStore != NotUseful) { compRedirectWindow(serverClient, pWin, CompositeRedirectAutomatic); pWin->backStorage = TRUE; diff --git a/configure.ac b/configure.ac index 7faf7f342..1626ed1f1 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) +AC_INIT([xorg-server], 1.5.1, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) +RELEASE_DATE="23 September 2008" AC_CONFIG_SRCDIR([Makefile.am]) AM_INIT_AUTOMAKE([dist-bzip2 foreign]) 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(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: 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(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]) @@ -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(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]) diff --git a/doc/Xserver.man.pre b/doc/Xserver.man.pre index c47a3966b..8fe3b76a2 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 diff --git a/exa/exa.c b/exa/exa.c index ccf148a3e..72539c0f3 100644 --- a/exa/exa.c +++ b/exa/exa.c @@ -43,6 +43,10 @@ DevPrivateKey exaScreenPrivateKey = &exaScreenPrivateKey; DevPrivateKey exaPixmapPrivateKey = &exaPixmapPrivateKey; +#ifdef MITSHM +static ShmFuncs exaShmFuncs = { NULL, NULL }; +#endif + static _X_INLINE void* ExaGetPixmapAddress(PixmapPtr p) { @@ -924,6 +928,12 @@ exaDriverInit (ScreenPtr pScreen, } #endif +#ifdef MITSHM + /* + * Don't allow shared pixmaps. + */ + ShmRegisterFuncs(pScreen, &exaShmFuncs); +#endif /* * Hookup offscreen pixmaps */ diff --git a/glx/Makefile.am b/glx/Makefile.am index 39b96d75c..0214295ea 100644 --- a/glx/Makefile.am +++ b/glx/Makefile.am @@ -45,9 +45,13 @@ glapi_sources = \ glthread.h \ glprocs.h +if DRI2 +GLXDRI_SOURCE = glxdri2.c +endif + libglxdri_la_SOURCES = \ glxdri.c \ - glxdri2.c \ + $(GLXDRI2_SOURCE) \ glxdricommon.h \ extension_string.c \ extension_string.h diff --git a/hw/xfree86/doc/man/Xorg.man.pre b/hw/xfree86/doc/man/Xorg.man.pre index 405efda55..8b48951e7 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 diff --git a/hw/xfree86/xaa/xaaFillPoly.c b/hw/xfree86/xaa/xaaFillPoly.c index 23c27818e..6f11e35ff 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) ) { diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c index 7c22437a9..ec65a040e 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 4617064e4..429246c68 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 4a6a6e43f..80d16b75a 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) = { diff --git a/randr/rrxinerama.c b/randr/rrxinerama.c index 240fca27a..e6acd5e57 100644 --- a/randr/rrxinerama.c +++ b/randr/rrxinerama.c @@ -138,10 +138,11 @@ ProcRRXineramaGetState(ClientPtr client) rep.length = 0; rep.sequenceNumber = client->sequence; rep.state = active; + rep.window = stuff->window; if(client->swapped) { swaps (&rep.sequenceNumber, n); swapl (&rep.length, n); - swaps (&rep.state, n); + swapl (&rep.window, n); } WriteToClient(client, sizeof(xPanoramiXGetStateReply), (char *)&rep); return client->noClientException; @@ -192,10 +193,11 @@ ProcRRXineramaGetScreenCount(ClientPtr client) rep.length = 0; rep.sequenceNumber = client->sequence; rep.ScreenCount = RRXineramaScreenCount (pWin->drawable.pScreen); + rep.window = stuff->window; if(client->swapped) { swaps(&rep.sequenceNumber, n); swapl(&rep.length, n); - swaps(&rep.ScreenCount, n); + swapl(&rep.window, n); } WriteToClient(client, sizeof(xPanoramiXGetScreenCountReply), (char *)&rep); return client->noClientException; @@ -223,11 +225,15 @@ ProcRRXineramaGetScreenSize(ClientPtr client) rep.sequenceNumber = client->sequence; rep.width = pRoot->drawable.width; rep.height = pRoot->drawable.height; + rep.window = stuff->window; + rep.screen = stuff->screen; if(client->swapped) { swaps(&rep.sequenceNumber, n); swapl(&rep.length, n); - swaps(&rep.width, n); - swaps(&rep.height, n); + swapl(&rep.width, n); + swapl(&rep.height, n); + swapl(&rep.window, n); + swapl(&rep.screen, n); } WriteToClient(client, sizeof(xPanoramiXGetScreenSizeReply), (char *)&rep); return client->noClientException; @@ -351,6 +357,7 @@ SProcRRXineramaGetState(ClientPtr client) register int n; swaps (&stuff->length, n); REQUEST_SIZE_MATCH(xPanoramiXGetStateReq); + swapl (&stuff->window, n); return ProcRRXineramaGetState(client); } @@ -361,6 +368,7 @@ SProcRRXineramaGetScreenCount(ClientPtr client) register int n; swaps (&stuff->length, n); REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq); + swapl (&stuff->window, n); return ProcRRXineramaGetScreenCount(client); } @@ -371,6 +379,8 @@ SProcRRXineramaGetScreenSize(ClientPtr client) register int n; swaps (&stuff->length, n); REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq); + swapl (&stuff->window, n); + swapl (&stuff->screen, n); return ProcRRXineramaGetScreenSize(client); }