--- xc/config/cf/Imake.rules 2004-08-13 13:21:43.000000000 -0400 +++ xc-new/config/cf/Imake.rules 2007-01-09 22:50:47.000000000 -0500 @@ -3279,7 +3279,8 @@ -e '/^[ ]*XCOMM$$/s/XCOMM/#/' \ -e '/^[ ]*XCOMM[^a-zA-Z0-9_]/s/XCOMM/#/' \ -e '/^[ ]*XHASH/s/XHASH/#/' \ - -e '/\@\@$$/s/\@\@$$/\\/' + -e '/\@\@$$/s/\@\@$$/\\/' \ + -e '/^#pragma GCC .*$$/d' #endif /* CppSedMagic */ #ifndef CppFileTarget --- xc/config/cf/darwin.cf 2004-12-14 23:53:05.000000000 -0500 +++ xc-new/config/cf/darwin.cf 2007-01-09 22:50:47.000000000 -0500 @@ -160,7 +160,7 @@ * The default cpp-3.3 that ships with Panther inserts spurious #pragmas, * so we use the 3.1-based version. */ -#if OSMajorVersion >= 7 +#if OSMajorVersion == 7 # define CppCmd /usr/bin/cpp3 # define StandardCppOptions -traditional -D__GNUC__ #else --- xc/extras/Xpm/lib/create.c 2004-12-16 20:09:36.000000000 -0500 +++ xc-new/extras/Xpm/lib/create.c 2007-01-09 22:50:47.000000000 -0500 @@ -1215,10 +1215,10 @@ register char *src; register char *dst; register unsigned int *iptr; - register unsigned int x, y, i; + register unsigned int x, y; register char *data; Pixel pixel, px; - int nbytes, depth, ibu, ibpp; + int nbytes, depth, ibu, ibpp, i; data = image->data; iptr = pixelindex; --- xc/extras/Xpm/lib/scan.c 2004-12-16 20:09:36.000000000 -0500 +++ xc-new/extras/Xpm/lib/scan.c 2007-01-09 22:50:47.000000000 -0500 @@ -621,8 +621,8 @@ char *dst; unsigned int *iptr; char *data; - unsigned int x, y, i; - int bits, depth, ibu, ibpp, offset; + unsigned int x, y; + int bits, depth, ibu, ibpp, offset, i; unsigned long lbt; Pixel pixel, px; @@ -633,6 +633,9 @@ ibpp = image->bits_per_pixel; offset = image->xoffset; + if (image->bitmap_unit < 0) + return (XpmNoMemory); + if ((image->bits_per_pixel | image->depth) == 1) { ibu = image->bitmap_unit; for (y = 0; y < height; y++) --- xc/extras/freetype2/builds/unix/detect.mk 2004-04-28 06:38:58.000000000 -0400 +++ xc-new/extras/freetype2/builds/unix/detect.mk 2007-01-09 22:50:47.000000000 -0500 @@ -20,7 +20,8 @@ # is_unix := $(strip $(wildcard /sbin/init) \ $(wildcard /usr/sbin/init) \ - $(wildcard /hurd/auth)) + $(wildcard /hurd/auth) \ + $(wildcard /sbin/launchd)) ifneq ($(is_unix),) PLATFORM := unix --- xc/extras/freetype2/include/freetype/freetype.h 2004-04-28 06:38:59.000000000 -0400 +++ xc-new/extras/freetype2/include/freetype/freetype.h 2007-01-09 22:50:47.000000000 -0500 @@ -17,11 +17,7 @@ #ifndef FT_FREETYPE_H -#error "`ft2build.h' hasn't been included yet!" -#error "Please always use macros to include FreeType header files." -#error "Example:" -#error " #include " -#error " #include FT_FREETYPE_H" +#include #endif --- xc/extras/freetype2/src/base/ftapi.c 2003-11-14 11:48:24.000000000 -0500 +++ xc-new/extras/freetype2/src/base/ftapi.c 2007-01-09 22:50:47.000000000 -0500 @@ -118,4 +118,18 @@ } + FT_BASE_DEF( FT_Short ) + FT_Get_Short( FT_Stream stream ) + { + return FT_GET_SHORT(); + } + + + FT_BASE_DEF( FT_Long ) + FT_Get_Long( FT_Stream stream ) + { + return FT_GET_LONG(); + } + + /* END */ --- xc/extras/freetype2/src/base/ftmac.c 2004-04-28 06:39:03.000000000 -0400 +++ xc-new/extras/freetype2/src/base/ftmac.c 2007-01-09 22:50:47.000000000 -0500 @@ -319,12 +319,12 @@ if ( assoc->fontSize == 0 ) { *have_sfnt = 1; - *sfnt_id = assoc->fontID; + *sfnt_id = OSSwapBigToHostInt16(assoc->fontID); } else if ( base_assoc->fontSize == 0 ) { *have_sfnt = 1; - *sfnt_id = base_assoc->fontID; + *sfnt_id = OSSwapBigToHostInt16(base_assoc->fontID); } } @@ -338,10 +338,10 @@ int i; - p += fond->ffStylOff; + p += OSSwapBigToHostInt32(fond->ffStylOff); style = (StyleTable*)p; p += sizeof ( StyleTable ); - string_count = *(unsigned short*)(p); + string_count = OSSwapBigToHostInt16(*(unsigned short*)(p)); p += sizeof ( short ); for ( i = 0 ; i < string_count && i < 64; i++ ) --- xc/extras/freetype2/src/truetype/ttinterp.c 2004-04-28 06:39:07.000000000 -0400 +++ xc-new/extras/freetype2/src/truetype/ttinterp.c 2007-01-09 22:50:48.000000000 -0500 @@ -2474,7 +2474,7 @@ W = Vx * Vx + Vy * Vy; /* Now, we want that Sqrt( W ) = 0x4000 */ - /* Or 0x1000000 <= W < 0x1004000 */ + /* Or 0x10000000 <= W < 0x10004000 */ if ( Vx < 0 ) { @@ -2492,7 +2492,7 @@ else S2 = FALSE; - while ( W < 0x1000000L ) + while ( W < 0x10000000L ) { /* We need to increase W by a minimal amount */ if ( Vx < Vy ) @@ -2503,7 +2503,7 @@ W = Vx * Vx + Vy * Vy; } - while ( W >= 0x1004000L ) + while ( W >= 0x10004000L ) { /* We need to decrease W by a minimal amount */ if ( Vx < Vy ) --- xc/include/Xarch.h 2004-04-23 14:43:05.000000000 -0400 +++ xc-new/include/Xarch.h 2007-01-09 22:50:48.000000000 -0500 @@ -32,8 +32,20 @@ * Determine the machine's byte order. */ +#if defined (__BIG_ENDIAN__) || defined (__LITTLE_ENDIAN__) +# undef X_BYTE_ORDER +# undef X_LITTLE_ENDIAN +# undef X_BIG_ENDIAN +# define X_LITTLE_ENDIAN 1234 +# define X_BIG_ENDIAN 4321 +# if __BIG_ENDIAN__ +# define X_BYTE_ORDER X_BIG_ENDIAN +# else +# define X_BYTE_ORDER X_LITTLE_ENDIAN +# endif + /* See if it is set in the imake config first */ -#ifdef X_BYTE_ORDER +#elif defined (X_BYTE_ORDER) #define X_BIG_ENDIAN 4321 #define X_LITTLE_ENDIAN 1234 --- xc/lib/GL/apple/dri_driver.h 2004-04-23 14:43:09.000000000 -0400 +++ xc-new/lib/GL/apple/dri_driver.h 2007-01-09 22:50:48.000000000 -0500 @@ -40,6 +40,10 @@ #include "Xthreads.h" #include #include +#ifndef GL_TYPEDEFS_2_0 +#define GL_TYPEDEFS_2_0 + typedef char GLchar; +#endif #include #ifdef GLX_DIRECT_RENDERING --- xc/lib/GL/apple/dri_glx.c 2004-07-27 16:23:58.000000000 -0400 +++ xc-new/lib/GL/apple/dri_glx.c 2007-01-09 22:50:48.000000000 -0500 @@ -51,7 +51,7 @@ /* Apple OpenGL "driver" information. */ static const char *__driDriverName = "apple"; -static const char __driConfigOptions[] = ""; +const char __driConfigOptions[] = ""; static const int __driDriverMajor = 1; static const int __driDriverMinor = 0; static const int __driDriverPatch = 0; --- xc/lib/X11/imEvToWire.c 2004-04-23 14:43:24.000000000 -0400 +++ xc-new/lib/X11/imEvToWire.c 2007-01-09 22:50:48.000000000 -0500 @@ -408,7 +408,7 @@ } /* Common process */ if (((XAnyEvent *)re)->send_event) - event->u.u.type &= 0x80; + event->u.u.type |= 0x80; event->u.u.sequenceNumber = ((XAnyEvent *)re)->serial & ~((unsigned long)0xffff); event->u.u.sequenceNumber = sw16(event->u.u.sequenceNumber, sw); --- xc/lib/Xcursor/cursor.c 2004-04-23 14:43:40.000000000 -0400 +++ xc-new/lib/Xcursor/cursor.c 2007-01-09 22:50:48.000000000 -0500 @@ -711,6 +711,7 @@ anim[n].delay = images->images[n]->delay; } cursor = XRenderCreateAnimCursor (dpy, cursors->ncursor, anim); + XcursorCursorsDestroy(cursors); free (anim); } #if defined HAVE_XFIXES && XFIXES_MAJOR >= 2 --- xc/lib/font/Type1/afm.c 2004-04-23 14:44:08.000000000 -0400 +++ xc-new/lib/font/Type1/afm.c 2007-01-09 22:50:48.000000000 -0500 @@ -22,6 +22,7 @@ #include #include #include +#include #else #include "Xmd.h" /* For INT32 declaration */ #include "Xdefs.h" /* For Bool */ @@ -111,6 +112,11 @@ fi->nChars = atoi(p); + if (fi->nChars < 0 || fi->nChars > INT_MAX / sizeof(Metrics)) { + xfree(afmbuf); + xfree(fi); + return(1); + } fi->metrics = (Metrics *)xalloc(fi->nChars * sizeof(Metrics)); if (fi->metrics == NULL) { --- xc/lib/font/Type1/scanfont.c 2004-04-23 14:44:09.000000000 -0400 +++ xc-new/lib/font/Type1/scanfont.c 2007-01-09 22:50:48.000000000 -0500 @@ -50,6 +50,7 @@ #ifndef FONTMODULE #include +#include #else #include "Xdefs.h" /* Bool declaration */ #include "Xmd.h" /* INT32 declaration */ @@ -647,6 +648,7 @@ arrayP->data.valueP = tokenStartP; /* allocate FDArray */ + /* No integer overflow since arrayP->len is unsigned short */ FDArrayP = (psfont *)vm_alloc(arrayP->len*(sizeof(psfont))); if (!(FDArrayP)) return(SCAN_OUT_OF_MEMORY); @@ -843,7 +845,8 @@ } return(SCAN_OK); } - + if (N > INT_MAX / sizeof(psobj)) + return (SCAN_ERROR); arrayP = (psobj *)vm_alloc(N*sizeof(psobj)); if (!(arrayP) ) return(SCAN_OUT_OF_MEMORY); FontP->Subrs.len = N; @@ -904,7 +907,7 @@ } else return(rc); /* if next token was not an Int */ } - if (N<=0) return(SCAN_ERROR); + if (N<=0 || N > INT_MAX / sizeof(psdict)) return(SCAN_ERROR); /* save number of entries in the dictionary */ dictP = (psdict *)vm_alloc((N+1)*sizeof(psdict)); @@ -1712,6 +1715,10 @@ if (tokenType == TOKEN_INTEGER) rangecnt = tokenValue.integer; + if (rangecnt < 0 || rangecnt > INT_MAX / sizeof(spacerangecode)) { + rc = SCAN_ERROR; + break; + } /* ==> tokenLength, tokenTooLong, tokenType, and */ /* tokenValue are now set */ --- xc/lib/font/Type1/util.c 2004-04-23 14:44:09.000000000 -0400 +++ xc-new/lib/font/Type1/util.c 2007-01-09 22:50:48.000000000 -0500 @@ -97,7 +97,7 @@ bytes = (bytes + 7) & ~7; /* Allocate the space, if it is available */ - if (bytes <= vm_free) { + if (bytes > 0 && bytes <= vm_free) { answer = vm_next; vm_free -= bytes; vm_next += bytes; --- xc/lib/font/bitmap/pcfread.c 2004-04-23 14:44:20.000000000 -0400 +++ xc-new/lib/font/bitmap/pcfread.c 2007-01-09 22:50:48.000000000 -0500 @@ -32,6 +32,8 @@ * Author: Keith Packard, MIT X Consortium */ +#include + #include "fntfilst.h" #include "bitmap.h" #include "pcf.h" @@ -129,6 +131,10 @@ return (PCFTablePtr) NULL; count = pcfGetLSB32(file); if (IS_EOF(file)) return (PCFTablePtr) NULL; + if (count < 0 || count > INT32_MAX / sizeof(PCFTableRec)) { + pcfError("pcfReadTOC(): invalid file format\n"); + return NULL; + } tables = (PCFTablePtr) xalloc(count * sizeof(PCFTableRec)); if (!tables) { pcfError("pcfReadTOC(): Couldn't allocate tables (%d*%d)\n", count, sizeof(PCFTableRec)); @@ -248,6 +254,10 @@ if (!PCF_FORMAT_MATCH(format, PCF_DEFAULT_FORMAT)) goto Bail; nprops = pcfGetINT32(file, format); + if (nprops <= 0 || nprops > INT32_MAX / sizeof(FontPropRec)) { + pcfError("pcfGetProperties(): invalid nprops value (%d)\n", nprops); + goto Bail; + } if (IS_EOF(file)) goto Bail; props = (FontPropPtr) xalloc(nprops * sizeof(FontPropRec)); if (!props) { @@ -263,6 +273,13 @@ props[i].name = pcfGetINT32(file, format); isStringProp[i] = pcfGetINT8(file, format); props[i].value = pcfGetINT32(file, format); + if (props[i].name < 0 + || (isStringProp[i] != 0 && isStringProp[i] != 1) + || (isStringProp[i] && props[i].value < 0)) { + pcfError("pcfGetProperties(): invalid file format %d %d %d\n", + props[i].name, isStringProp[i], props[i].value); + goto Bail; + } if (IS_EOF(file)) goto Bail; } /* pad the property array */ @@ -278,6 +295,7 @@ } if (IS_EOF(file)) goto Bail; string_size = pcfGetINT32(file, format); + if (string_size < 0) goto Bail; if (IS_EOF(file)) goto Bail; strings = (char *) xalloc(string_size); if (!strings) { @@ -418,6 +436,10 @@ else nmetrics = pcfGetINT16(file, format); if (IS_EOF(file)) goto Bail; + if (nmetrics < 0 || nmetrics > INT32_MAX / sizeof(CharInfoRec)) { + pcfError("pcfReadFont(): invalid file format\n"); + goto Bail; + } metrics = (CharInfoPtr) xalloc(nmetrics * sizeof(CharInfoRec)); if (!metrics) { pcfError("pcfReadFont(): Couldn't allocate metrics (%d*%d)\n", nmetrics, sizeof(CharInfoRec)); @@ -443,7 +465,7 @@ nbitmaps = pcfGetINT32(file, format); if (nbitmaps != nmetrics || IS_EOF(file)) goto Bail; - + /* nmetrics is alreadt ok, so nbitmap also is */ offsets = (CARD32 *) xalloc(nbitmaps * sizeof(CARD32)); if (!offsets) { pcfError("pcfReadFont(): Couldn't allocate offsets (%d*%d)\n", nbitmaps, sizeof(CARD32)); @@ -457,6 +479,7 @@ for (i = 0; i < GLYPHPADOPTIONS; i++) { bitmapSizes[i] = pcfGetINT32(file, format); if (IS_EOF(file)) goto Bail; + if (bitmapSizes[i] < 0) goto Bail; } sizebitmaps = bitmapSizes[PCF_GLYPH_PAD_INDEX(format)]; @@ -532,6 +555,7 @@ if (IS_EOF(file)) goto Bail; if (nink_metrics != nmetrics) goto Bail; + /* nmetrics already checked */ ink_metrics = (xCharInfo *) xalloc(nink_metrics * sizeof(xCharInfo)); if (!ink_metrics) { pcfError("pcfReadFont(): Couldn't allocate ink_metrics (%d*%d)\n", nink_metrics, sizeof(xCharInfo)); @@ -805,6 +829,10 @@ else nmetrics = pcfGetINT16(file, format); if (IS_EOF(file)) goto Bail; + if (nmetrics < 0 || nmetrics > INT32_MAX / sizeof(CharInfoRec)) { + pcfError("pmfReadFont(): invalid file format\n"); + goto Bail; + } metrics = (CharInfoPtr) xalloc(nmetrics * sizeof(CharInfoRec)); if (!metrics) { pcfError("pmfReadFont(): Couldn't allocate metrics (%d*%d)\n", nmetrics, sizeof(CharInfoRec)); --- xc/programs/Xserver/Xext/saver.c 2004-12-12 22:34:33.000000000 -0500 +++ xc-new/programs/Xserver/Xext/saver.c 2007-01-09 22:50:48.000000000 -0500 @@ -1166,8 +1166,8 @@ FreeAttrs (pAttr); bail: CheckScreenPrivate (pScreen); + if (pAttr) xfree (pAttr->values); xfree (pAttr); - xfree (values); return ret; } --- xc/programs/Xserver/dbe/dbe.c 2004-04-23 15:03:43.000000000 -0400 +++ xc-new/programs/Xserver/dbe/dbe.c 2007-01-09 22:51:03.000000000 -0500 @@ -51,6 +51,10 @@ #include "xf86_ansic.h" #endif +#if !defined(UINT32_MAX) +#define UINT32_MAX 0xffffffffU +#endif + /* GLOBALS */ /* Per-screen initialization functions [init'ed by DbeRegisterFunction()] */ @@ -729,11 +733,14 @@ return(Success); } + if (nStuff > UINT32_MAX / sizeof(DbeSwapInfoRec)) + return BadAlloc; + /* Get to the swap info appended to the end of the request. */ dbeSwapInfo = (xDbeSwapInfo *)&stuff[1]; /* Allocate array to record swap information. */ - swapInfo = (DbeSwapInfoPtr)ALLOCATE_LOCAL(nStuff * sizeof(DbeSwapInfoRec)); + swapInfo = (DbeSwapInfoPtr)Xalloc(nStuff * sizeof(DbeSwapInfoRec)); if (swapInfo == NULL) { return(BadAlloc); @@ -748,14 +755,14 @@ if (!(pWin = SecurityLookupWindow(dbeSwapInfo[i].window, client, SecurityWriteAccess))) { - DEALLOCATE_LOCAL(swapInfo); + Xfree(swapInfo); return(BadWindow); } /* Each window must be double-buffered - BadMatch. */ if (DBE_WINDOW_PRIV(pWin) == NULL) { - DEALLOCATE_LOCAL(swapInfo); + Xfree(swapInfo); return(BadMatch); } @@ -764,7 +771,7 @@ { if (dbeSwapInfo[i].window == dbeSwapInfo[j].window) { - DEALLOCATE_LOCAL(swapInfo); + Xfree(swapInfo); return(BadMatch); } } @@ -775,7 +782,7 @@ (dbeSwapInfo[i].swapAction != XdbeUntouched ) && (dbeSwapInfo[i].swapAction != XdbeCopied )) { - DEALLOCATE_LOCAL(swapInfo); + Xfree(swapInfo); return(BadValue); } @@ -805,12 +812,12 @@ error = (*pDbeScreenPriv->SwapBuffers)(client, &nStuff, swapInfo); if (error != Success) { - DEALLOCATE_LOCAL(swapInfo); + Xfree(swapInfo); return(error); } } - DEALLOCATE_LOCAL(swapInfo); + Xfree(swapInfo); return(Success); } /* ProcDbeSwapBuffers() */ @@ -894,10 +901,12 @@ REQUEST_AT_LEAST_SIZE(xDbeGetVisualInfoReq); + if (stuff->n > UINT32_MAX / sizeof(DrawablePtr)) + return BadAlloc; /* Make sure any specified drawables are valid. */ if (stuff->n != 0) { - if (!(pDrawables = (DrawablePtr *)ALLOCATE_LOCAL(stuff->n * + if (!(pDrawables = (DrawablePtr *)Xalloc(stuff->n * sizeof(DrawablePtr)))) { return(BadAlloc); @@ -910,7 +919,7 @@ if (!(pDrawables[i] = (DrawablePtr)SecurityLookupDrawable( drawables[i], client, SecurityReadAccess))) { - DEALLOCATE_LOCAL(pDrawables); + Xfree(pDrawables); return(BadDrawable); } } @@ -922,7 +931,7 @@ { if (pDrawables) { - DEALLOCATE_LOCAL(pDrawables); + Xfree(pDrawables); } return(BadAlloc); @@ -949,7 +958,7 @@ /* Free pDrawables if we needed to allocate it above. */ if (pDrawables) { - DEALLOCATE_LOCAL(pDrawables); + Xfree(pDrawables); } return(BadAlloc); @@ -1030,7 +1039,7 @@ if (pDrawables) { - DEALLOCATE_LOCAL(pDrawables); + Xfree(pDrawables); } return(client->noClientException); --- xc/programs/Xserver/dix/events.c 2004-08-08 22:08:35.000000000 -0400 +++ xc-new/programs/Xserver/dix/events.c 2007-01-09 22:50:48.000000000 -0500 @@ -1960,6 +1960,13 @@ */ && (!wBoundingShape(pWin) || PointInBorderSize(pWin, x, y)) #endif +#ifdef ROOTLESS + /* In rootless mode windows may be offscreen, even when + * they're in X's stack. (E.g. if the native window system + * implements some form of virtual desktop system). + */ + && !pWin->rootlessUnhittable +#endif ) { if (spriteTraceGood >= spriteTraceSize) --- xc/programs/Xserver/dix/window.c 2004-07-31 04:24:13.000000000 -0400 +++ xc-new/programs/Xserver/dix/window.c 2007-01-09 22:50:49.000000000 -0500 @@ -294,6 +294,9 @@ #ifdef COMPOSITE pWin->redirectDraw = 0; #endif +#ifdef ROOTLESS + pWin->rootlessUnhittable = FALSE; +#endif } static void @@ -1617,7 +1620,6 @@ if(pWin->drawable.pScreen->RestackWindow) (*pWin->drawable.pScreen->RestackWindow)(pWin, pOldNextSib); } - #ifdef ROOTLESS /* * In rootless mode we can't optimize away window restacks. --- xc/programs/Xserver/fb/fb.h 2004-12-14 23:53:05.000000000 -0500 +++ xc-new/programs/Xserver/fb/fb.h 2007-01-09 22:50:49.000000000 -0500 @@ -650,6 +650,10 @@ #ifdef ROOTLESS #define __fbPixOriginX(pPix) ((pPix)->drawable.x) #define __fbPixOriginY(pPix) ((pPix)->drawable.y) +#elif defined (ROOTLESS) +/* Use X position to account for non-32-bit alignments. */ +#define __fbPixOriginX(pPix) ((pPix)->drawable.x) +#define __fbPixOriginY(pPix) 0 #else #define __fbPixOriginX(pPix) 0 #define __fbPixOriginY(pPix) 0 --- xc/programs/Xserver/fb/fbblt.c 2004-04-23 15:05:14.000000000 -0400 +++ xc-new/programs/Xserver/fb/fbblt.c 2007-01-09 22:50:49.000000000 -0500 @@ -25,6 +25,10 @@ #include "fb.h" +#ifdef FB_XP +#include "Xplugin.h" +#endif + #define InitializeShifts(sx,dx,ls,rs) { \ if (sx != dx) { \ if (sx > dx) { \ @@ -84,6 +88,58 @@ } FbMaskBitsBytes (dstX, width, destInvarient, startmask, startbyte, nmiddle, endmask, endbyte); + +#ifdef FB_XP + if (!startmask && !endmask && alu == GXcopy + && height * nmiddle * sizeof (*dst) > xp_copy_bytes_threshold) + { + if (pm == FB_ALLONES) + { + xp_copy_bytes (nmiddle * sizeof (*dst), height, + (char *) srcLine + (srcX >> 3), + srcStride * sizeof (*src), + (char *) dstLine + (dstX >> 3), + dstStride * sizeof (*dst)); + return; + } + + /* FIXME: the pm test here isn't super-wonderful - just because + we don't care about the top eight bits doesn't necessarily + mean we want them set to 255. But doing this does give a + factor of two performance improvement when copying from a + pixmap to a window, which is pretty common.. */ + + else if (bpp == 32 && sizeof (FbBits) == 4 + && pm == 0x00FFFFFFUL && !reverse) + { + /* need to copy XRGB to ARGB. */ + + void *src[2], *dest[2]; + unsigned int src_rowbytes[2], dest_rowbytes[2]; + unsigned int fn; + + src[0] = (char *) srcLine + (srcX >> 3); + src[1] = NULL; + src_rowbytes[0] = srcStride * sizeof (*src); + src_rowbytes[1] = 0; + + dest[0] = (char *) dstLine + (dstX >> 3); + dest[1] = dest[0]; + dest_rowbytes[0] = dstStride * sizeof (*dst); + dest_rowbytes[1] = dest_rowbytes[0]; + + fn = XP_COMPOSITE_FUNCTION (XP_COMPOSITE_SRC, XP_DEPTH_ARGB8888, + XP_DEPTH_NIL, XP_DEPTH_ARGB8888); + + if (xp_composite_pixels (nmiddle, height, fn, src, src_rowbytes, + NULL, 0, dest, dest_rowbytes) == Success) + { + return; + } + } + } +#endif + if (reverse) { srcLine += ((srcX + width - 1) >> FB_SHIFT) + 1; --- xc/programs/Xserver/fb/fbmmx.c 2004-07-22 15:24:50.000000000 -0400 +++ xc-new/programs/Xserver/fb/fbmmx.c 2007-01-09 22:50:49.000000000 -0500 @@ -29,6 +29,8 @@ #ifdef RENDER +#include + #include "picturestr.h" #include "mipict.h" #include "fbpict.h" @@ -48,6 +50,10 @@ #define CHECKPOINT() #endif +#define mmx_and(a,b) ((Vector1x64)_mm_and_si64((__m64)(a),(__m64)(b))) +#define mmx_or(a,b) ((Vector1x64)_mm_or_si64((__m64)(a),(__m64)(b))) +#define mmx_xor(a,b) ((Vector1x64)_mm_xor_si64((__m64)(a),(__m64)(b))) + typedef struct { ullong mmx_zero; @@ -102,7 +108,7 @@ static __inline__ Vector4x16 negate (Vector4x16 mask) { - return (Vector4x16)__builtin_ia32_pxor ( + return (Vector4x16)mmx_xor ( (Vector1x64)mask, (Vector1x64)c.mmx_4x00ff); } @@ -163,9 +169,9 @@ t1 = shift ((Vector1x64)pixel, -48); t2 = shift (t1, 16); - t1 = __builtin_ia32_por (t1, t2); + t1 = mmx_or (t1, t2); t2 = shift (t1, 32); - t1 = __builtin_ia32_por (t1, t2); + t1 = mmx_or (t1, t2); return (Vector4x16)t1; } @@ -178,9 +184,9 @@ t1 = shift ((Vector1x64)pixel, 48); t1 = shift (t1, -48); t2 = shift (t1, 16); - t1 = __builtin_ia32_por (t1, t2); + t1 = mmx_or (t1, t2); t2 = shift (t1, 32); - t1 = __builtin_ia32_por (t1, t2); + t1 = mmx_or (t1, t2); return (Vector4x16)t1; } @@ -192,15 +198,15 @@ x = y = z = (Vector1x64)pixel; - x = __builtin_ia32_pand (x, (Vector1x64)c.mmx_ffff0000ffff0000); - y = __builtin_ia32_pand (y, (Vector1x64)c.mmx_000000000000ffff); - z = __builtin_ia32_pand (z, (Vector1x64)c.mmx_0000ffff00000000); + x = mmx_and (x, (Vector1x64)c.mmx_ffff0000ffff0000); + y = mmx_and (y, (Vector1x64)c.mmx_000000000000ffff); + z = mmx_and (z, (Vector1x64)c.mmx_0000ffff00000000); y = shift (y, 32); z = shift (z, -32); - x = __builtin_ia32_por (x, y); - x = __builtin_ia32_por (x, z); + x = mmx_or (x, y); + x = mmx_or (x, z); return (Vector4x16)x; } @@ -234,7 +240,7 @@ over_rev_non_pre (Vector4x16 src, Vector4x16 dest) { Vector4x16 srca = expand_alpha (src); - Vector4x16 srcfaaa = (Vector4x16)__builtin_ia32_por((Vector1x64)srca, (Vector1x64)c.mmx_full_alpha); + Vector4x16 srcfaaa = (Vector4x16)mmx_or((Vector1x64)srca, (Vector1x64)c.mmx_full_alpha); return over(pix_multiply(invert_colors(src), srcfaaa), srca, dest); } @@ -300,9 +306,9 @@ Vector1x64 t1 = shift (p, 36 - 11); Vector1x64 t2 = shift (p, 16 - 5); - p = __builtin_ia32_por (t1, p); - p = __builtin_ia32_por (t2, p); - p = __builtin_ia32_pand (p, (Vector1x64)c.mmx_565_rgb); + p = mmx_or (t1, p); + p = mmx_or (t2, p); + p = mmx_and (p, (Vector1x64)c.mmx_565_rgb); pixel = __builtin_ia32_pmullw ((Vector4x16)p, (Vector4x16)c.mmx_565_unpack_multiplier); return __builtin_ia32_psrlw (pixel, 8); @@ -324,27 +330,27 @@ Vector1x64 t = (Vector1x64)target; Vector1x64 r, g, b; - r = __builtin_ia32_pand (p, (Vector1x64)c.mmx_565_r); - g = __builtin_ia32_pand (p, (Vector1x64)c.mmx_565_g); - b = __builtin_ia32_pand (p, (Vector1x64)c.mmx_565_b); + r = mmx_and (p, (Vector1x64)c.mmx_565_r); + g = mmx_and (p, (Vector1x64)c.mmx_565_g); + b = mmx_and (p, (Vector1x64)c.mmx_565_b); r = shift (r, - (32 - 8) + pos * 16); g = shift (g, - (16 - 3) + pos * 16); b = shift (b, - (0 + 3) + pos * 16); if (pos == 0) - t = __builtin_ia32_pand (t, (Vector1x64)c.mmx_mask_0); + t = mmx_and (t, (Vector1x64)c.mmx_mask_0); else if (pos == 1) - t = __builtin_ia32_pand (t, (Vector1x64)c.mmx_mask_1); + t = mmx_and (t, (Vector1x64)c.mmx_mask_1); else if (pos == 2) - t = __builtin_ia32_pand (t, (Vector1x64)c.mmx_mask_2); + t = mmx_and (t, (Vector1x64)c.mmx_mask_2); else if (pos == 3) - t = __builtin_ia32_pand (t, (Vector1x64)c.mmx_mask_3); + t = mmx_and (t, (Vector1x64)c.mmx_mask_3); - p = __builtin_ia32_por (r, t); - p = __builtin_ia32_por (g, p); + p = mmx_or (r, t); + p = mmx_or (g, p); - return (Vector4x16)__builtin_ia32_por (b, p); + return (Vector4x16)mmx_or (b, p); } static __inline__ void --- xc/programs/Xserver/fb/fbpict.c 2004-08-06 19:42:10.000000000 -0400 +++ xc-new/programs/Xserver/fb/fbpict.c 2007-01-09 22:50:49.000000000 -0500 @@ -25,6 +25,10 @@ #include "fb.h" +#ifdef FB_XP +#include "Xplugin.h" +#endif + #ifdef RENDER #include "picturestr.h" @@ -109,6 +113,30 @@ fbComposeGetStart (pDst, xDst, yDst, CARD32, dstStride, dstLine, 1); fbComposeGetStart (pMask, xMask, yMask, CARD8, maskStride, maskLine, 1); +#ifdef FB_XP + if (dstMask == FB_ALLONES && pDst->pDrawable->bitsPerPixel == 32 + && width * height > xp_composite_area_threshold) + { + void *srcp[2], *destp[2]; + unsigned int dest_rowbytes[2]; + unsigned int fn; + + srcp[0] = &src; srcp[1] = &src; + /* null rowbytes pointer means use first value as a constant */ + destp[0] = dstLine; destp[1] = dstLine; + dest_rowbytes[0] = dstStride * 4; dest_rowbytes[1] = dest_rowbytes[0]; + fn = XP_COMPOSITE_FUNCTION (XP_COMPOSITE_OVER, XP_DEPTH_ARGB8888, + XP_DEPTH_A8, XP_DEPTH_ARGB8888); + + if (xp_composite_pixels (width, height, fn, srcp, NULL, + maskLine, maskStride, + destp, dest_rowbytes) == Success) + { + return; + } + } +#endif + while (height--) { dst = dstLine; --- xc/programs/Xserver/fb/fbsolid.c 2004-07-22 15:24:50.000000000 -0400 +++ xc-new/programs/Xserver/fb/fbsolid.c 2007-01-09 22:50:50.000000000 -0500 @@ -26,6 +26,10 @@ #include "fb.h" +#ifdef FB_XP +#include "Xplugin.h" +#endif + void fbSolid (FbBits *dst, FbStride dstStride, @@ -55,6 +59,23 @@ nmiddle, endmask, endbyte); if (startmask) dstStride--; + +#ifdef FB_XP + if (!startmask && !endmask && !and + && height * nmiddle * sizeof (*dst) > xp_fill_bytes_threshold) + { + if (bpp <= 8) + xor |= xor << 8; + if (bpp <= 16) + xor |= xor << 16; + + xp_fill_bytes (nmiddle * sizeof (*dst), height, xor, + (char *) dst + (dstX >> 3), + dstStride * sizeof (*dst)); + return; + } +#endif + dstStride -= nmiddle; while (height--) { --- xc/programs/Xserver/hw/darwin/darwinKeyboard.c 2004-04-23 15:06:15.000000000 -0400 +++ xc-new/programs/Xserver/hw/darwin/darwinKeyboard.c 2007-01-09 22:50:50.000000000 -0500 @@ -64,7 +64,9 @@ /* Define this to use Alt for Mode_switch. */ #define ALT_IS_MODE_SWITCH 1 -#include +#define __BEGIN_DECLS +#define __END_DECLS +#include #include #include #include --- xc/programs/Xserver/hw/darwin/quartz/applewmExt.h 2004-04-23 15:15:17.000000000 -0400 +++ xc-new/programs/Xserver/hw/darwin/quartz/applewmExt.h 2007-01-09 22:50:50.000000000 -0500 @@ -59,8 +59,6 @@ FrameDrawProc FrameDraw; } AppleWMProcsRec, *AppleWMProcsPtr; -extern AppleWMProcsPtr appleWMProcs; - void AppleWMExtensionInit( AppleWMProcsPtr procsPtr ); --- xc/programs/Xserver/hw/vfb/InitOutput.c 2004-08-26 21:15:10.000000000 -0400 +++ xc-new/programs/Xserver/hw/vfb/InitOutput.c 2007-01-09 22:50:50.000000000 -0500 @@ -28,6 +28,13 @@ */ /* $XFree86: xc/programs/Xserver/hw/vfb/InitOutput.c,v 3.25 2003/11/15 04:01:56 dawes Exp $ */ +/* jsh: workaround for 3834723 */ +#ifdef HAS_SHM +#include +#include +#include +#endif /* HAS_SHM */ + #if defined(WIN32) #include #endif --- xc/programs/Xserver/hw/xnest/Screen.c 2004-08-11 18:40:14.000000000 -0400 +++ xc-new/programs/Xserver/hw/xnest/Screen.c 2007-01-09 22:50:50.000000000 -0500 @@ -360,6 +360,11 @@ if (!miScreenDevPrivateInit(pScreen, xnestWidth, NULL)) return FALSE; +#ifdef SHAPE + /* overwrite miSetShape with our own */ + pScreen->SetShape = xnestSetShape; +#endif /* SHAPE */ + /* devPrivates */ #define POSITION_OFFSET (pScreen->myNum * (xnestWidth + xnestHeight) / 32) --- xc/programs/Xserver/hw/xnest/Window.c 2004-04-23 15:54:21.000000000 -0400 +++ xc-new/programs/Xserver/hw/xnest/Window.c 2007-01-09 22:50:50.000000000 -0500 @@ -449,6 +449,13 @@ } #ifdef SHAPE +void +xnestSetShape(WindowPtr pWin) +{ + xnestShapeWindow(pWin); + miSetShape(pWin); +} + static Bool xnestRegionEqual(RegionPtr pReg1, RegionPtr pReg2) { --- xc/programs/Xserver/hw/xnest/XNWindow.h 2004-04-23 15:54:21.000000000 -0400 +++ xc-new/programs/Xserver/hw/xnest/XNWindow.h 2007-01-09 22:50:50.000000000 -0500 @@ -73,6 +73,7 @@ void xnestWindowExposures(WindowPtr pWin, RegionPtr pRgn, RegionPtr other_exposed); #ifdef SHAPE +void xnestSetShape(WindowPtr pWin); void xnestShapeWindow(WindowPtr pWin); #endif /* SHAPE */ --- xc/programs/Xserver/include/servermd.h 2004-08-09 18:37:22.000000000 -0400 +++ xc-new/programs/Xserver/include/servermd.h 2007-01-09 22:50:50.000000000 -0500 @@ -167,7 +167,7 @@ #endif /* hpux || __hppa__ */ -#if defined(__powerpc__) +#if defined(__powerpc__) || defined (__ppc__) #define IMAGE_BYTE_ORDER MSBFirst #define BITMAP_BIT_ORDER MSBFirst --- xc/programs/Xserver/include/windowstr.h 2004-07-31 04:24:13.000000000 -0400 +++ xc-new/programs/Xserver/include/windowstr.h 2007-01-09 22:50:50.000000000 -0500 @@ -139,6 +139,9 @@ #ifdef COMPOSITE unsigned redirectDraw:1; /* rendering is redirected from here */ #endif +#ifdef ROOTLESS + unsigned rootlessUnhittable:1; /* doesn't hit-test */ +#endif DevUnion *devPrivates; } WindowRec; --- xc/programs/Xserver/mi/miinitext.c 2004-12-13 00:48:41.000000000 -0500 +++ xc-new/programs/Xserver/mi/miinitext.c 2007-01-09 22:50:50.000000000 -0500 @@ -608,7 +608,7 @@ #ifdef XSYNC if (!noSyncExtension) SyncExtensionInit(); #endif -#if defined(XKB) && !defined(PRINT_ONLY_SERVER) && !defined(NO_HW_ONLY_EXTS) +#if defined(XKB) && !defined(PRINT_ONLY_SERVER) if (!noXkbExtension) XkbExtensionInit(); #endif #ifdef XCMISC --- xc/programs/Xserver/mi/miwindow.c 2004-04-23 15:54:26.000000000 -0400 +++ xc-new/programs/Xserver/mi/miwindow.c 2007-01-09 22:50:50.000000000 -0500 @@ -883,7 +883,11 @@ /* and move those bits */ - if (oldpt.x != x || oldpt.y != y) + if (oldpt.x != x || oldpt.y != y +#ifdef COMPOSITE + || pWin->redirectDraw +#endif + ) (*pWin->drawable.pScreen->CopyWindow)(pWin, oldpt, gravitate[g]); /* remove any overwritten bits from the remaining useful bits */ --- xc/programs/Xserver/miext/damage/damage.c 2004-12-12 19:56:07.000000000 -0500 +++ xc-new/programs/Xserver/miext/damage/damage.c 2007-01-09 22:50:50.000000000 -0500 @@ -742,9 +742,13 @@ /* The driver will only call SourceValidate() when pSrc != pDst, * but the software sprite (misprite.c) always need to know when a * drawable is copied so it can remove the sprite. See #1030. */ - if ((pSrc == pDst) && pSrc->pScreen->SourceValidate) - (*pSrc->pScreen->SourceValidate) (pSrc, srcx, srcy, width, height); - + if ((pSrc == pDst) && pSrc->pScreen->SourceValidate && + pSrc->type == DRAWABLE_WINDOW && + ((WindowPtr)pSrc)->viewable) + { + (*pSrc->pScreen->SourceValidate) (pSrc, srcx, srcy, width, height); + } + if (checkGCDamage (pDst, pGC)) { BoxRec box; --- xc/programs/Xserver/render/render.c 2004-08-06 19:42:10.000000000 -0400 +++ xc-new/programs/Xserver/render/render.c 2007-01-09 22:51:03.000000000 -0500 @@ -48,6 +48,10 @@ #include "xf86_ansic.h" #endif +#if !defined(UINT32_MAX) +#define UINT32_MAX 0xffffffffU +#endif + static int ProcRenderQueryVersion (ClientPtr pClient); static int ProcRenderQueryPictFormats (ClientPtr pClient); static int ProcRenderQueryPictIndexValues (ClientPtr pClient); @@ -1074,11 +1078,14 @@ } nglyphs = stuff->nglyphs; + if (nglyphs > UINT32_MAX / sizeof(GlyphNewRec)) + return BadAlloc; + if (nglyphs <= NLOCALGLYPH) glyphsBase = glyphsLocal; else { - glyphsBase = (GlyphNewPtr) ALLOCATE_LOCAL (nglyphs * sizeof (GlyphNewRec)); + glyphsBase = (GlyphNewPtr) Xalloc (nglyphs * sizeof (GlyphNewRec)); if (!glyphsBase) return BadAlloc; } @@ -1135,7 +1142,7 @@ } if (glyphsBase != glyphsLocal) - DEALLOCATE_LOCAL (glyphsBase); + Xfree (glyphsBase); return client->noClientException; bail: while (glyphs != glyphsBase) @@ -1144,7 +1151,7 @@ xfree (glyphs->glyph); } if (glyphsBase != glyphsLocal) - DEALLOCATE_LOCAL (glyphsBase); + Xfree (glyphsBase); return err; } @@ -1304,7 +1311,7 @@ { if (buffer + sizeof (GlyphSet) < end) { - gs = *(GlyphSet *) buffer; + memcpy(&gs, buffer, sizeof(GlyphSet)); glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client, gs, GlyphSetType, --- xc/programs/Xserver/xkb/xkbAccessX.c 2004-04-23 15:54:30.000000000 -0400 +++ xc-new/programs/Xserver/xkb/xkbAccessX.c 2007-01-09 22:50:50.000000000 -0500 @@ -320,7 +320,7 @@ void AccessXCancelRepeatKey(XkbSrvInfoPtr xkbi,KeyCode key) { - if (xkbi->repeatKey==key) + if (xkbi && xkbi->repeatKey==key) xkbi->repeatKey= 0; return; } --- xc/programs/fstobdf/chars.c 2004-04-23 15:54:32.000000000 -0400 +++ xc-new/programs/fstobdf/chars.c 2007-01-09 22:50:50.000000000 -0500 @@ -213,7 +213,8 @@ encoding=(chHigh << 8)+chLow; if ((charInfo->width != 0) || (charInfo->right != charInfo->left)) EmitBitmap(outFile, fontHeader, charInfo, encoding, bpr, glyph); - glyph += (charInfo->descent + charInfo->ascent) * bpr; + glyph = glyphs + + offsets[encoding-((firstCharHigh << 8)+firstCharLow) + 1].position; charInfo++; } } --- xc/programs/xterm/main.c 2005-01-12 16:45:10.000000000 -0500 +++ xc-new/programs/xterm/main.c 2007-01-09 22:50:50.000000000 -0500 @@ -376,7 +376,7 @@ #include #endif /* PUCC_PTYD */ -#ifdef __OpenBSD__ +#if defined(__OpenBSD__) || defined(__DARWIN__) #include #endif @@ -674,6 +674,11 @@ * to implement xterm -ls. They can turn on USE_LOGIN_DASH_P and turn off * WTMP and USE_LASTLOG. */ +#ifdef __DARWIN__ +#define USE_LOGIN_DASH_P +#define LOGIN_FILENAME "/usr/bin/login" +#endif + #ifdef USE_LOGIN_DASH_P #ifndef LOGIN_FILENAME #define LOGIN_FILENAME "/bin/login" @@ -2294,7 +2299,7 @@ (resource.utmpInhibit ? OPTY_NOP : OPTY_LOGIN), getuid(), from)) < 0); -#elif defined(__osf__) || (defined(__GLIBC__) && !defined(USE_USG_PTYS)) || defined(__NetBSD__) +#elif defined(__osf__) || (defined(__GLIBC__) && !defined(USE_USG_PTYS)) || defined(__NetBSD__) || defined(__DARWIN__) int tty; result = openpty(pty, &tty, ttydev, NULL, NULL); @@ -4148,6 +4153,9 @@ #endif /* !USE_ANY_SYSV_TERMIO && !USE_POSIX_TERMIOS */ #ifdef USE_LOGIN_DASH_P +#ifdef __DARWIN__ + added_utmp_entry = 1; /* login does this for us */ +#endif if (term->misc.login_shell && pw && added_utmp_entry) execl(bin_login, "login", "-p", "-f", login_name, (void *) 0); #endif