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: