[23511] trunk/dports/x11/XFree86

source_changes at macosforge.org source_changes at macosforge.org
Tue Apr 3 05:50:25 PDT 2007


Revision: 23511
          http://trac.macosforge.org/projects/macports/changeset/23511
Author:   yves at macports.org
Date:     2007-04-03 05:50:24 -0700 (Tue, 03 Apr 2007)

Log Message:
-----------
XFree86 4.6.0 with joyful enhancements like :

* warn about a pre-existing Apple X11 installation before even fetching the sources.
* include freetype and security patches from fink

Modified Paths:
--------------
    trunk/dports/x11/XFree86/Portfile
    trunk/dports/x11/XFree86/files/XTerm.ad.diff

Added Paths:
-----------
    trunk/dports/x11/XFree86/files/patch-GL_apple-Imakefile
    trunk/dports/x11/XFree86/files/patch-GL_apple-dri_driver.h
    trunk/dports/x11/XFree86/files/patch-Xserver-darwin-Imakefile
    trunk/dports/x11/XFree86/files/patch-Xserver-darwin.c
    trunk/dports/x11/XFree86/files/xfree86.fink.patch

Modified: trunk/dports/x11/XFree86/Portfile
===================================================================
--- trunk/dports/x11/XFree86/Portfile	2007-04-03 11:09:46 UTC (rev 23510)
+++ trunk/dports/x11/XFree86/Portfile	2007-04-03 12:50:24 UTC (rev 23511)
@@ -2,65 +2,98 @@
 
 PortSystem 1.0
 name		XFree86
-version		4.5.0
+version		4.6.0
 categories	x11
-revision	2
 maintainers	nomaintainer at macports.org
+homepage    http://www.xfree86.org/
+
 description	X11R6 windowing system
-homepage        http://www.xfree86.org/
-long_description The XFree86 project's X window system implementation
+long_description \
+    The XFree86 project's X window system implementation
 
-platforms	darwin freebsd
-prefix		${x11prefix}
-master_sites	opendarwin	xfree:${version}/source/
+platforms       darwin freebsd
+master_sites    xfree:${version}/source/
 
-distfiles	XFree86-${version}-src-1.tgz \
-		XFree86-${version}-src-2.tgz \
-		XFree86-${version}-src-3.tgz \
-		XFree86-${version}-src-4.tgz \
-		XFree86-${version}-src-5.tgz
-checksums	XFree86-${version}-src-1.tgz md5 6c0fcf8069c13d068276016bbf6ad712 \
-		XFree86-${version}-src-2.tgz md5 cc296c71cbe58edc3ffdec1084e58f4c \
-		XFree86-${version}-src-3.tgz md5 c0ad630bfec4545857c2877b3e2dcbeb \
-		XFree86-${version}-src-4.tgz md5 217bb03a07cf94561b35815ce257c159 \
-		XFree86-${version}-src-5.tgz md5 598ce329eb06b8189f92704a5698253c
+distfiles \
+    ${distname}-src-1.tgz \
+    ${distname}-src-2.tgz \
+    ${distname}-src-3.tgz \
+    ${distname}-src-4.tgz \
+    ${distname}-src-5.tgz
+checksums \
+    ${distname}-src-1.tgz md5 6c05f3486f088d01584f4517540e8d18 \
+    ${distname}-src-2.tgz md5 f084d12aa734c9cd83e8d2a3a4eb3e32 \
+    ${distname}-src-3.tgz md5 05450997f1876098d791a4cf9db21af8 \
+    ${distname}-src-4.tgz md5 102ed22d33bd31a5853cb5addb51d7c9 \
+    ${distname}-src-5.tgz md5 f66708c7ff882e4ca232896266fbf92f
 
-patchfiles	GL_apple.diff applewmExt.h.diff darwinKeyboard.c.diff \
-		detect.mk.diff darwin.cf.diff xterm_Imakefile.diff \
-		XTerm.ad.diff
+patchfiles \
+    darwin.cf.diff darwinKeyboard.c.diff detect.mk.diff \
+    patch-GL_apple-Imakefile patch-GL_apple-dri_driver.h \
+    patch-Xserver-darwin.c patch-Xserver-darwin-Imakefile \
+    xterm_Imakefile.diff XTerm.ad.diff xfree86.fink.patch
 
-depends_build	bin:perl:perl5.8
-configure	{}
-worksrcdir	xc
-build.target	World
-destroot.target	install install.man
+depends_build   bin:perl:perl5.8
+use_configure   no
 
-variant darwin {
-	configure {
-		set hostfd [open "${worksrcpath}/config/cf/host.def" a+]
-		puts $hostfd "#define ProjectRoot ${prefix}"
-		puts $hostfd "#define NothingOutsideProjectRoot YES"
-		puts $hostfd "#define EtcX11Directory \"${prefix}/etc/X11\""
-		puts $hostfd "#define StandardIncludes      \"-I${workpath}/include\""
-		puts $hostfd "#define FontconfigFontsConfDir  \"${prefix}/etc/fonts\""
-#		puts $hostfd "#define        BuildFontServer         NO"
-#		puts $hostfd "#define        BuildFonts              NO"
-		close $hostfd
-	}
+prefix          ${x11prefix}
+worksrcdir      xc
 
-	post-patch {
-		file mkdir "${workpath}/include"
-		file link -symbolic "${workpath}/include/security" "/usr/include/pam"
-	}
+build.target    World
+destroot.target install install.man
+
+pre-fetch {
+    if { [file exists ${prefix}/bin/quartz-wm] } {
+        ui_msg ""
+        ui_warn "
+            You have an Apple X11 installation already.
+                MacPorts will not overwrite it. 
+            If you really want to use XFree86 instead,
+                please move it aside first :
+
+                    sudo mv /usr/X11R6 /usr/X11R6.apple
+        "
+        exit 1
+    }
 }
 
+platform darwin {
+    configure {
+        set hostfd [open "${worksrcpath}/config/cf/host.def" a+]
+        puts $hostfd "#define ProjectRoot ${prefix}"
+        puts $hostfd "#define NothingOutsideProjectRoot YES"
+        puts $hostfd "#define EtcX11Directory \"${prefix}/etc/X11\""
+        puts $hostfd "#define StandardIncludes      \"-I${workpath}/include\""
+        puts $hostfd "#define FontconfigFontsConfDir  \"${prefix}/etc/fonts\""
+        close $hostfd
+    }
 
-variant puredarwin {
-	post-configure	{
-		set hostfd [open "${worksrcpath}/config/cf/host.def" a+]
-		puts $hostfd "#define DarwinQuartzSupport NO"
-		puts $hostfd "#define BuildGlxExt YES"
-		puts $hostfd "#define BuildGLXLibrary YES"
-		close $hostfd
-	}
+    post-patch {
+        file mkdir "${workpath}/include"
+        file link -symbolic "${workpath}/include/security" "/usr/include/pam"
+    }
 }
+
+platform macosx {
+    # Should be fixed in Imakefile
+    pre-destroot {
+        reinplace \
+            "s|\$\(DESTDIR\)\[\[:space:\]\]\[\[:space:\]\]*\$\(|\$\(DESTDIR\)\$\(|g" \
+                ${worksrcpath}/programs/Xserver/Makefile
+     }
+     post-destroot {
+        xinstall -d ${destroot}/Applications/MacPorts
+        cd ${destroot}/Applications/MacPorts
+        system "ln -s ${prefix}/bin/XDarwin.app"
+    }
+}
+
+platform puredarwin {
+    post-configure	{
+        set hostfd [open "${worksrcpath}/config/cf/host.def" a+]
+        puts $hostfd "#define DarwinQuartzSupport NO"
+        puts $hostfd "#define BuildGlxExt YES"
+        puts $hostfd "#define BuildGLXLibrary YES"
+        close $hostfd
+    }
+}

Modified: trunk/dports/x11/XFree86/files/XTerm.ad.diff
===================================================================
--- trunk/dports/x11/XFree86/files/XTerm.ad.diff	2007-04-03 11:09:46 UTC (rev 23510)
+++ trunk/dports/x11/XFree86/files/XTerm.ad.diff	2007-04-03 12:50:24 UTC (rev 23511)
@@ -1,8 +1,11 @@
---- programs/xterm/XTerm.ad.orig	2005-05-01 22:22:27.000000000 -0700
-+++ programs/xterm/XTerm.ad	2005-05-01 22:59:23.000000000 -0700
-@@ -116,3 +116,5 @@
- *tek4014*font2: 8x13
+--- programs/xterm/XTerm.ad.orig	2006-04-09 20:34:36.000000000 -0400
++++ programs/xterm/XTerm.ad	2007-03-29 23:05:03.000000000 -0400
+@@ -115,6 +115,8 @@
  *tek4014*font3: 6x13
  *tek4014*fontSmall: 6x10
+ 
++*loginShell: true
 +
-+*loginShell: true
+ ! If xterm is built with a toolbar, the widget hierarchy looks like this,
+ ! showing widget name / class names.  The complete menu hierarchy is built
+ ! at startup because it is needed to make the layout work for the menubar:

Added: trunk/dports/x11/XFree86/files/patch-GL_apple-Imakefile
===================================================================
--- trunk/dports/x11/XFree86/files/patch-GL_apple-Imakefile	                        (rev 0)
+++ trunk/dports/x11/XFree86/files/patch-GL_apple-Imakefile	2007-04-03 12:50:24 UTC (rev 23511)
@@ -0,0 +1,11 @@
+--- lib/GL/apple/Imakefile.orig	2007-03-31 12:50:39.000000000 -0400
++++ lib/GL/apple/Imakefile	2007-03-31 12:51:22.000000000 -0400
+@@ -21,7 +21,7 @@
+ 
+      DRI_SRCS = dri_glx.c dri_driver.c dri_dispatch.c x-hash.c x-list.c
+      DRI_OBJS = dri_glx.o dri_driver.o dri_dispatch.o x-hash.o x-list.o
+-     DRI_INCS = -I$(GLXLIBSRC)/glx -I$(SERVERSRC)/GL/dri -I$(XPINCDIR) \
++     DRI_INCS = $(GLXLIBSRC)/glx -I$(SERVERSRC)/GL/dri -I$(XPINCDIR) \
+                 -I$(MESASRCDIR)/include -I$(MESASRCDIR)/src/mesa/glapi \
+                 -I$(GLXLIBSRC)/include
+ 

Added: trunk/dports/x11/XFree86/files/patch-GL_apple-dri_driver.h
===================================================================
--- trunk/dports/x11/XFree86/files/patch-GL_apple-dri_driver.h	                        (rev 0)
+++ trunk/dports/x11/XFree86/files/patch-GL_apple-dri_driver.h	2007-04-03 12:50:24 UTC (rev 23511)
@@ -0,0 +1,11 @@
+--- lib/GL/apple/dri_driver.h.orig	2005-10-14 11:15:55.000000000 -0400
++++ lib/GL/apple/dri_driver.h	2007-03-31 12:52:24.000000000 -0400
+@@ -36,6 +36,8 @@
+ #ifndef _DRI_DRIVER_H_
+ #define _DRI_DRIVER_H_
+ 
++typedef char GLchar;
++
+ #include "Xplugin.h"
+ #include <X11/Xthreads.h>
+ #include <CoreGraphics/CoreGraphics.h>

Added: trunk/dports/x11/XFree86/files/patch-Xserver-darwin-Imakefile
===================================================================
--- trunk/dports/x11/XFree86/files/patch-Xserver-darwin-Imakefile	                        (rev 0)
+++ trunk/dports/x11/XFree86/files/patch-Xserver-darwin-Imakefile	2007-04-03 12:50:24 UTC (rev 23511)
@@ -0,0 +1,11 @@
+--- programs/Xserver/hw/darwin/Imakefile.orig	2007-03-31 15:20:16.000000000 -0400
++++ programs/Xserver/hw/darwin/Imakefile	2007-03-31 15:20:38.000000000 -0400
+@@ -29,7 +29,7 @@
+ INCLUDES = -I$(SERVERSRC)/mi -I$(SERVERSRC)/fb -I$(SERVERSRC)/render \
+            -I$(SERVERSRC)/include -I$(SERVERSRC)/os \
+            -I$(SERVERSRC)/miext/shadow -I$(SERVERSRC)/hw/xfree86 \
+-           -I$(SERVERSRC)/Xi
++           -I$(SERVERSRC)/Xi -I$(SERVERSRC)/dbe -I$(SERVERSRC)/record
+ 
+ OSNAME = OSName
+ OSVENDOR = OSVendor

Added: trunk/dports/x11/XFree86/files/patch-Xserver-darwin.c
===================================================================
--- trunk/dports/x11/XFree86/files/patch-Xserver-darwin.c	                        (rev 0)
+++ trunk/dports/x11/XFree86/files/patch-Xserver-darwin.c	2007-04-03 12:50:24 UTC (rev 23511)
@@ -0,0 +1,12 @@
+--- programs/Xserver/hw/darwin/darwin.c.orig	2007-03-31 14:53:57.000000000 -0400
++++ programs/Xserver/hw/darwin/darwin.c	2007-03-31 14:54:35.000000000 -0400
+@@ -118,6 +118,9 @@
+ #ifndef PRE_RELEASE
+ #define PRE_RELEASE XF86_VERSION_SNAP
+ #endif
++#ifndef VENDOR_RELEASE
++#define VENDOR_RELEASE 6600
++#endif
+ 
+ void
+ DarwinPrintBanner()

Added: trunk/dports/x11/XFree86/files/xfree86.fink.patch
===================================================================
--- trunk/dports/x11/XFree86/files/xfree86.fink.patch	                        (rev 0)
+++ trunk/dports/x11/XFree86/files/xfree86.fink.patch	2007-04-03 12:50:24 UTC (rev 23511)
@@ -0,0 +1,724 @@
+--- extras/Xpm/lib/scan.c.orig	2005-03-12 18:15:46.000000000 -0500
++++ extras/Xpm/lib/scan.c	2007-01-09 23:05:26.000000000 -0500
+@@ -638,6 +638,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++)
+--- extras/freetype2/include/freetype/freetype.h.orig	2004-04-26 11:40:13.000000000 -0400
++++ extras/freetype2/include/freetype/freetype.h	2007-01-09 23:05:26.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 <ft2build.h>"
+-#error "  #include FT_FREETYPE_H"
++#include <ft2build.h>
+ #endif
+ 
+ 
+--- extras/freetype2/src/base/ftapi.c.orig	2005-02-28 18:19:13.000000000 -0500
++++ extras/freetype2/src/base/ftapi.c	2007-01-09 23:05:27.000000000 -0500
+@@ -161,5 +161,17 @@
+     FT_Stream_ExitFrame( stream );
+   }
+                    
++  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 */
+--- extras/freetype2/src/base/ftmac.c.orig	2004-04-26 12:15:54.000000000 -0400
++++ extras/freetype2/src/base/ftmac.c	2007-01-09 23:05:27.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++ )
+--- extras/freetype2/src/truetype/ttinterp.c.orig	2004-04-26 11:40:59.000000000 -0400
++++ extras/freetype2/src/truetype/ttinterp.c	2007-01-09 23:05:27.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 )
+--- include/Xarch.h.orig	2003-05-27 18:26:24.000000000 -0400
++++ include/Xarch.h	2007-01-09 23:05:27.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
+--- lib/X11/imEvToWire.c	2003-04-13 15:22:20.000000000 -0400
++++ lib/X11/imEvToWire.c	2007-01-09 23:05:27.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);
+--- lib/Xcursor/cursor.c.orig	2003-01-25 22:22:42.000000000 -0500
++++ lib/Xcursor/cursor.c	2007-01-09 23:05:27.000000000 -0500
+@@ -712,6 +712,7 @@
+ 	    anim[n].delay = images->images[n]->delay;
+ 	}
+ 	cursor = XRenderCreateAnimCursor (dpy, cursors->ncursor, anim);
++	XcursorCursorsDestroy(cursors);
+ 	free (anim);
+ 	return cursor;
+     }
+--- lib/Xpm/Imakefile.orig	2004-11-18 16:30:49.000000000 -0500
++++ lib/Xpm/Imakefile	2007-01-09 23:05:27.000000000 -0500
+@@ -99,6 +99,7 @@
+ LinkSourceFile(WrFFrI.c,$(XPMLIBDIR))
+ LinkSourceFile(CrBufFrP.c,$(XPMLIBDIR))
+ LinkSourceFile(CrIFrBuf.c,$(XPMLIBDIR))
++LinkSourceFile(s_popen.c,$(XPMLIBDIR))
+ LinkSourceFile(CrPFrDat.c,$(XPMLIBDIR))
+ LinkSourceFile(RdFToP.c,$(XPMLIBDIR))
+ LinkSourceFile(WrFFrP.c,$(XPMLIBDIR))
+--- lib/font/Type1/afm.c.orig	2004-10-23 11:29:26.000000000 -0400
++++ lib/font/Type1/afm.c	2007-01-09 23:05:27.000000000 -0500
+@@ -22,6 +22,7 @@
+ #include <stdio.h>
+ #include <string.h>
+ #include <stdlib.h>
++#include <limits.h>
+ #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) {
+--- lib/font/Type1/scanfont.c.orig	2003-11-28 23:55:28.000000000 -0500
++++ lib/font/Type1/scanfont.c	2007-01-09 23:05:27.000000000 -0500
+@@ -49,6 +49,7 @@
+ 
+ #ifndef FONTMODULE
+ #include <string.h>
++#include <limits.h>
+ #else
+ #include "Xdefs.h"	/* Bool declaration */
+ #include "Xmd.h"	/* INT32 declaration */
+@@ -843,6 +844,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;
+@@ -903,7 +906,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));
+@@ -1711,6 +1714,11 @@
+     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                        */
+ 
+--- lib/font/Type1/util.c.orig	2001-01-17 14:43:24.000000000 -0500
++++ lib/font/Type1/util.c	2007-01-09 23:05:27.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;
+--- lib/font/bitmap/pcfread.c.orig	2003-11-17 20:17:04.000000000 -0500
++++ lib/font/bitmap/pcfread.c	2007-01-09 23:05:27.000000000 -0500
+@@ -32,6 +32,8 @@
+  * Author:  Keith Packard, MIT X Consortium
+  */
+ 
++#include <stdint.h>
++
+ #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));
+--- programs/Xserver/dbe/dbe.c.orig	2001-10-27 23:33:04.000000000 -0400
++++ programs/Xserver/dbe/dbe.c	2007-01-09 23:05:56.000000000 -0500
+@@ -50,6 +50,10 @@
+ #include "xf86_ansic.h"
+ #endif
+ 
++#if !defined(UINT32_MAX)
++#define UINT32_MAX 0xffffffffU
++#endif
++
+ /* GLOBALS */
+ 
+ /* Per-screen initialization functions [init'ed by DbeRegisterFunction()] */
+@@ -728,11 +732,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);
+@@ -747,14 +754,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);
+         }
+ 
+@@ -763,7 +770,7 @@
+         {
+             if (dbeSwapInfo[i].window == dbeSwapInfo[j].window)
+             {
+-                DEALLOCATE_LOCAL(swapInfo);
++                Xfree(swapInfo);
+                 return(BadMatch);
+ 	    }
+         }
+@@ -774,7 +781,7 @@
+             (dbeSwapInfo[i].swapAction != XdbeUntouched ) &&
+             (dbeSwapInfo[i].swapAction != XdbeCopied    ))
+         {
+-            DEALLOCATE_LOCAL(swapInfo);
++            Xfree(swapInfo);
+             return(BadValue);
+         }
+ 
+@@ -804,12 +811,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() */
+@@ -893,10 +900,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);
+@@ -909,7 +918,7 @@
+             if (!(pDrawables[i] = (DrawablePtr)SecurityLookupDrawable(
+ 				drawables[i], client, SecurityReadAccess)))
+             {
+-                DEALLOCATE_LOCAL(pDrawables);
++                Xfree(pDrawables);
+                 return(BadDrawable);
+             }
+         }
+@@ -921,7 +930,7 @@
+     {
+         if (pDrawables)
+         {
+-            DEALLOCATE_LOCAL(pDrawables);
++            Xfree(pDrawables);
+         }
+ 
+         return(BadAlloc);
+@@ -948,7 +957,7 @@
+             /* Free pDrawables if we needed to allocate it above. */
+             if (pDrawables)
+             {
+-                DEALLOCATE_LOCAL(pDrawables);
++                Xfree(pDrawables);
+             }
+ 
+             return(BadAlloc);
+@@ -1029,7 +1038,7 @@
+ 
+     if (pDrawables)
+     {
+-        DEALLOCATE_LOCAL(pDrawables);
++        Xfree(pDrawables);
+     }
+ 
+     return(client->noClientException);
+--- programs/Xserver/fb/fb.h.orig	2004-06-10 13:28:10.000000000 -0400
++++ programs/Xserver/fb/fb.h	2007-01-09 23:05:27.000000000 -0500
+@@ -643,6 +643,10 @@
+ #ifdef __DARWIN__
+ #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
+--- programs/Xserver/fb/fbblt.c.orig	2000-09-27 20:47:22.000000000 -0400
++++ programs/Xserver/fb/fbblt.c	2007-01-09 23:05:27.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;
+--- programs/Xserver/fb/fbpict.c.orig	2004-06-10 13:28:10.000000000 -0400
++++ programs/Xserver/fb/fbpict.c	2007-01-09 23:05:27.000000000 -0500
+@@ -25,6 +25,10 @@
+ 
+ #include "fb.h"
+ 
++#ifdef FB_XP
++#include "Xplugin.h"
++#endif
++
+ #ifdef RENDER
+ 
+ #include "picturestr.h"
+@@ -172,6 +176,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;
+--- programs/Xserver/fb/fbsolid.c.orig	2001-10-27 23:33:08.000000000 -0400
++++ programs/Xserver/fb/fbsolid.c	2007-01-09 23:05:27.000000000 -0500
+@@ -26,6 +26,10 @@
+ 
+ #include "fb.h"
+ 
++#ifdef FB_XP
++#include "Xplugin.h"
++#endif
++
+ void
+ fbSolid (FbBits	    *dst,
+ 	 FbStride   dstStride,
+@@ -56,6 +60,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--)
+     {
+--- programs/Xserver/hw/vfb/InitOutput.c.orig	2005-01-30 12:48:44.000000000 -0500
++++ programs/Xserver/hw/vfb/InitOutput.c	2007-01-09 23:05:27.000000000 -0500
+@@ -83,6 +83,13 @@
+ 
+ /* $XFree86: xc/programs/Xserver/hw/vfb/InitOutput.c,v 3.31 2005/01/30 17:48:44 tsi Exp $ */
+ 
++/* jsh: workaround for 3834723 */
++#ifdef HAS_SHM
++#include <sys/types.h>
++#include <sys/ipc.h>
++#include <sys/shm.h>
++#endif /* HAS_SHM */
++
+ #if defined(WIN32)
+ #include <X11/Xwinsock.h>
+ #endif
+--- programs/Xserver/hw/xnest/Screen.c.orig	2003-11-16 00:05:20.000000000 -0500
++++ programs/Xserver/hw/xnest/Screen.c	2007-01-09 23:05:27.000000000 -0500
+@@ -359,6 +359,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)
+--- programs/Xserver/hw/xnest/Window.c.orig	2003-11-16 00:05:20.000000000 -0500
++++ programs/Xserver/hw/xnest/Window.c	2007-01-09 23:05:27.000000000 -0500
+@@ -449,6 +449,13 @@
+ }
+ 
+ #ifdef SHAPE
++void
++xnestSetShape(WindowPtr pWin)
++{
++  xnestShapeWindow(pWin);
++  miSetShape(pWin);
++}
++
+ static Bool
+ xnestRegionEqual(RegionPtr pReg1, RegionPtr pReg2)
+ {
+--- programs/Xserver/hw/xnest/XNWindow.h.orig	2003-11-16 00:05:20.000000000 -0500
++++ programs/Xserver/hw/xnest/XNWindow.h	2007-01-09 23:05:27.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 */
+ 
+--- programs/Xserver/include/servermd.h.orig	2004-03-21 06:27:06.000000000 -0500
++++ programs/Xserver/include/servermd.h	2007-01-09 23:05:27.000000000 -0500
+@@ -167,7 +167,7 @@
+ 
+ #endif /* hpux */
+ 
+-#if defined(__powerpc__)
++#if defined(__powerpc__) || defined (__ppc__)
+ 
+ #define IMAGE_BYTE_ORDER        MSBFirst
+ #define BITMAP_BIT_ORDER        MSBFirst
+--- programs/Xserver/mi/miwindow.c.orig	2003-11-10 13:22:49.000000000 -0500
++++ programs/Xserver/mi/miwindow.c	2007-01-09 23:05:27.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 */
+--- programs/Xserver/xkb/xkbAccessX.c.orig	2003-11-17 17:20:46.000000000 -0500
++++ programs/Xserver/xkb/xkbAccessX.c	2007-01-09 23:05:27.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;
+ }

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-changes/attachments/20070403/4e04b55e/attachment.html


More information about the macports-changes mailing list