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

Bug#359982: gs-gpl: [PATCH] Broken TT font rendering on 64bit platforms



Package: gs-gpl
Version: 8.50-1
Severity: important


I am resubmitting my earlier patch with adjustments for the 8.50-1 package, see also 
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=352133

Three header files (ttfoutl.h, tttype.h and tttypes.h) implicitly assume that 'long' is
32 bit, causing TT fonts to be rendered illegibly small when it is not.


Arne

--- gs-gpl-8.50-orig/src/ttfoutl.h	2004-10-21 17:05:13.000000000 +0200
+++ gs-gpl-8.50/src/ttfoutl.h	2006-03-29 23:21:34.000000000 +0200
@@ -20,6 +20,8 @@
 #ifndef incl_ttfoutl
 #define incl_ttfoutl
 
+#include "stdint_.h"
+
 #ifndef TFace_defined
 #define TFace_defined
 typedef struct _TFace TFace;
@@ -52,7 +54,7 @@ typedef struct {
     double x, y;
 } FloatPoint;
 
-typedef signed long F26Dot6;
+typedef int32_t F26Dot6;
 
 typedef struct { 
     F26Dot6 x;
--- gs-gpl-8.50-orig/src/tttype.h	2003-11-21 21:01:22.000000000 +0100
+++ gs-gpl-8.50/src/tttype.h	2006-03-29 23:21:34.000000000 +0200
@@ -49,6 +49,8 @@
 #ifndef FREETYPE_H
 #define FREETYPE_H
 
+#include "stdint_.h"
+
 #ifdef __cplusplus
   extern "C" {
 #endif
@@ -62,15 +64,15 @@
   /*                                                                 */
   /*******************************************************************/
 
-  typedef signed long     TT_Fixed;   /* Signed Fixed 16.16 Float */
+  typedef int32_t         TT_Fixed;   /* Signed Fixed 16.16 Float */
 
   typedef signed short    TT_FWord;   /* Distance in FUnits */
   typedef unsigned short  TT_UFWord;  /* Unsigned distance */
 
   typedef signed short    TT_Short;
   typedef unsigned short  TT_UShort;
-  typedef signed long     TT_Long;
-  typedef unsigned long   TT_ULong;
+  typedef int32_t         TT_Long;
+  typedef uint32_t        TT_ULong;
 
   typedef signed short    TT_F2Dot14; /* Signed fixed float 2.14 used for */
                                       /* unary vectors, with layout:      */
@@ -85,10 +87,10 @@
                                       /*  added.                          */
                                       /*                                  */
 
-  typedef signed long     TT_F26Dot6; /* 26.6 fixed float, used for       */
+  typedef int32_t         TT_F26Dot6; /* 26.6 fixed float, used for       */
                                       /* glyph points pixel coordinates.  */
 
-  typedef signed long     TT_Pos;     /* point position, expressed either */
+  typedef int32_t         TT_Pos;     /* point position, expressed either */
                                       /* in fractional pixels or notional */
                                       /* units, depending on context. For */
                                       /* example, glyph coordinates       */
--- gs-gpl-8.50-orig/src/tttypes.h	2003-10-01 15:44:56.000000000 +0200
+++ gs-gpl-8.50/src/tttypes.h	2006-03-29 23:21:34.000000000 +0200
@@ -65,19 +65,7 @@
   typedef unsigned long   ULong;
   typedef signed   long   Long;
 
-#if SIZEOF_INT == 4
-
-  typedef long int        Fixed;    /* signed fixed 16.16 float */
-
-#elif SIZEOF_LONG == 4
-
-  typedef long            Fixed;    /* signed fixed 16.16 float */
-
-#else
-
-#error "no 32bit type found"
-
-#endif
+  typedef int32_t         Fixed;    /* signed fixed 16.16 float */
 
   typedef int             Int;
 
@@ -117,7 +105,7 @@
 #define NULL  (void*)0
 #endif
 
-  typedef long*  PStorage;
+  typedef int32_t*  PStorage;
 
 
 /* Rounding mode constants */







Reply to: