From 6a681fa84a0ba1164726cedfc3623d84f1e3d60a Mon Sep 17 00:00:00 2001
From: David Turner <david@freetype.org>
Date: Fri, 27 Jan 2006 12:11:22 +0000
Subject: [PATCH]     * src/autofit/afwarp.c: simple #ifdef to prevent
 compilation when     the warp hinter isn't active (it shouldn't, still
 experimental)

    * Jamfile, include/freetype/config/ftmodule.h: removed "gxvalid"
    and "otvalid" from the list of modules that are linked statically
    to a given FreeType library. Functionality has been moved to the
    "ftvalid" CVS module.

    note also that current Make-based build system still compiles the
    modules though...

    * include/freetype/config/ftoption.h: added FT_STRICT_ALIASING,
    which controls the definitions of the memory management functions
    to avoid warnings with recent versions of GCC. this macro is
    only here to be disabled, in case we detect problems with the
    new scheme.

    NOTE: disable macro to use the memory debugger. this will be fixed
          later !!
---
 ChangeLog                            |  24 +++
 Jamfile                              |   4 +-
 include/freetype/config/ftmodule.h   |   2 -
 include/freetype/config/ftoption.h   |   9 +-
 include/freetype/internal/ftmemory.h | 224 +++++++++++++++++++++------
 include/freetype/internal/psaux.h    |  30 ----
 include/freetype/internal/t1types.h  |  42 +++++
 src/autofit/afwarp.c                 |   6 +
 src/base/ftbitmap.c                  |   4 +-
 src/base/ftobjs.c                    |  24 +--
 src/base/ftrfork.c                   |   2 +-
 src/base/ftutil.c                    | 129 +++++++++++++++
 src/bdf/bdfdrivr.c                   |   4 +-
 src/cache/ftccache.c                 |  12 +-
 src/cff/cffgload.c                   |   6 +-
 src/cff/cffload.c                    |   2 +-
 src/gzip/ftgzip.c                    |   6 +-
 src/otvalid/otvcommn.c               |   4 +-
 src/otvalid/otvgpos.c                |   4 +-
 src/pcf/pcfdrivr.c                   |   2 +-
 src/pfr/pfrobjs.c                    |   2 +-
 src/psaux/Jamfile                    |   4 +-
 src/psaux/afmparse.c                 |  67 ++++----
 src/psaux/afmparse.h                 |   2 +-
 src/psaux/psconv.c                   |  14 +-
 src/sfnt/sfobjs.c                    |   9 +-
 src/sfnt/ttsbit0.c                   |  12 +-
 src/tools/apinames.c                 |   8 +-
 src/type1/t1afm.c                    |  10 +-
 src/type1/t1afm.h                    |   2 +-
 30 files changed, 502 insertions(+), 168 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 4fd501735..6c50dc3c2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,29 @@
 2006-01-27  David Turner  <david@freetype.org>
 
+    * src/autofit/afwarp.c: simple #ifdef to prevent compilation when
+    the warp hinter isn't active (it shouldn't, still experimental)
+
+    * Jamfile, include/freetype/config/ftmodule.h: removed "gxvalid"
+    and "otvalid" from the list of modules that are linked statically
+    to a given FreeType library. Functionality has been moved to the
+    "ftvalid" CVS module.
+    
+    note also that current Make-based build system still compiles the
+    modules though...
+
+    * include/freetype/config/ftoption.h: added FT_STRICT_ALIASING,
+    which controls the definitions of the memory management functions
+    to avoid warnings with recent versions of GCC. this macro is
+    only here to be disabled, in case we detect problems with the
+    new scheme.
+    
+    NOTE: disable macro to use the memory debugger. this will be fixed
+          later !!
+
+    * builds/win32/visualc/freetype.dsp: updating project file to
+    define FT2_BUILD_LIBRARY, and remove gxvalid+otvalid from
+    compilation
+
     * builds/freetype.mk, Jamfile: define the macro FT2_BUILD_LIBRARY
     when compiling the library.
     
diff --git a/Jamfile b/Jamfile
index 81103b0b5..471c29854 100644
--- a/Jamfile
+++ b/Jamfile
@@ -76,10 +76,10 @@ FT2_COMPONENTS ?= autofit    # auto-fitter
                   cache      # cache sub-system
                   cff        # CFF/CEF font driver
                   cid        # PostScript CID-keyed font driver
-                  gxvalid    # validation of TrueTypeGX/AAT tables
+                  #gxvalid    # validation of TrueTypeGX/AAT tables
                   gzip       # support for gzip-compressed files
                   lzw        # support for LZW-compressed files
-                  otvalid    # validation of OpenType tables
+                  #otvalid    # validation of OpenType tables
                   pcf        # PCF font driver
                   pfr        # PFR/TrueDoc font driver
                   psaux      # common PostScript routines module
diff --git a/include/freetype/config/ftmodule.h b/include/freetype/config/ftmodule.h
index 6248a1860..f9694b8a0 100644
--- a/include/freetype/config/ftmodule.h
+++ b/include/freetype/config/ftmodule.h
@@ -15,6 +15,4 @@ FT_USE_MODULE(sfnt_module_class)
 FT_USE_MODULE(ft_smooth_renderer_class)
 FT_USE_MODULE(ft_smooth_lcd_renderer_class)
 FT_USE_MODULE(ft_smooth_lcdv_renderer_class)
-FT_USE_MODULE(otv_module_class)
 FT_USE_MODULE(bdf_driver_class)
-FT_USE_MODULE(gxv_module_class)
diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h
index 74b6b6648..ab5d1564b 100644
--- a/include/freetype/config/ftoption.h
+++ b/include/freetype/config/ftoption.h
@@ -561,7 +561,14 @@ FT_BEGIN_HEADER
  * reducing the heap footprint of memory-mapped TrueType files.
  *
  */
-/* #define  FT_OPTIMIZE_MEMORY */
+#define  FT_OPTIMIZE_MEMORY
+
+/* this temporary macro is used to control wether we're going to
+ * compile certain functions like FT_Alloc in a way that prevent recent
+ * GCC releases from spouting horrible "strict aliasing" warning
+ * messages each time a memory-management function is called
+ */
+#define  FT_STRICT_ALIASING
 
 FT_END_HEADER
 
diff --git a/include/freetype/internal/ftmemory.h b/include/freetype/internal/ftmemory.h
index f8ceaf726..30e77e363 100644
--- a/include/freetype/internal/ftmemory.h
+++ b/include/freetype/internal/ftmemory.h
@@ -56,7 +56,140 @@ FT_BEGIN_HEADER
   /*************************************************************************/
   /*************************************************************************/
 
-#ifdef FT_DEBUG_MEMORY
+#ifdef FT_STRICT_ALIASING
+
+ /* the allocation functions return a pointer, and the error code
+  * is written to through the 'p_error' parameter
+  */
+
+  FT_BASE( FT_Pointer )
+  FT_Alloc( FT_Memory  memory,
+            FT_Long    size,
+            FT_Error  *p_error );
+
+  FT_BASE( FT_Pointer )
+  FT_QAlloc( FT_Memory  memory,
+             FT_Long    size,
+             FT_Error  *p_error );
+
+  FT_BASE( FT_Pointer )
+  FT_Realloc( FT_Memory  memory,
+              FT_Long    current,
+              FT_Long    size,
+              void*      block,
+              FT_Error  *p_error );
+
+  FT_BASE( FT_Pointer )
+  FT_QRealloc( FT_Memory  memory,
+               FT_Long    current,
+               FT_Long    size,
+               void*      block,
+               FT_Error  *p_error );
+
+  FT_BASE( void )
+  FT_Free( FT_Memory    memory,
+           const void*  P );
+
+
+#  ifdef FT_DEBUG_MEMORY
+
+  FT_BASE( FT_Pointer )
+  FT_Alloc_Debug( FT_Memory    memory,
+                  FT_Long      size,
+                  FT_Error    *p_error,
+                  const char*  file_name,
+                  FT_Long      line_no );
+
+  FT_BASE( FT_Pointer )
+  FT_QAlloc_Debug( FT_Memory    memory,
+                   FT_Long      size,
+                   void*        P,
+                   FT_Error    *p_error,
+                   const char*  file_name,
+                   FT_Long      line_no );
+
+  FT_BASE( FT_Pointer )
+  FT_Realloc_Debug( FT_Memory    memory,
+                    FT_Long      current,
+                    FT_Long      size,
+                    void*        P,
+                    FT_Error    *p_error,
+                    const char*  file_name,
+                    FT_Long      line_no );
+
+  FT_BASE( FT_Pointer )
+  FT_QRealloc_Debug( FT_Memory    memory,
+                     FT_Long      current,
+                     FT_Long      size,
+                     void*        P,
+                     FT_Error    *p_error,
+                     const char*  file_name,
+                     FT_Long      line_no );
+
+  FT_BASE( void )
+  FT_Free_Debug( FT_Memory    memory,
+                 FT_Pointer   block,
+                 const char*  file_name,
+                 FT_Long      line_no );
+
+#    define FT_MEM_ALLOC( _pointer_, _size_ )                   \
+          (_pointer_) = FT_Alloc_Debug( memory, _size_, &error, \
+                        __FILE__, __LINE__ )
+
+#    define FT_MEM_REALLOC( _pointer_, _current_, _size_ )             \
+          (_pointer_) = FT_Realloc_Debug( memory, _current_, _size_,   \
+                            (_pointer_), &error,                       \
+                            __FILE__, __LINE__ )
+
+#    define FT_MEM_QALLOC( _pointer_, _size_ )                   \
+          (_pointer_) = FT_QAlloc_Debug( memory, _size_, &error, \
+                           __FILE__, __LINE__ )
+
+#    define FT_MEM_QREALLOC( _pointer_, _current_, _size_ )            \
+          (_pointer_) = FT_QRealloc_Debug( memory, _current_, _size_,  \
+                             (_pointer_), &error,                      \
+                             __FILE__, __LINE__ )
+
+#    define FT_MEM_FREE( _pointer_ )                                \
+    FT_BEGIN_STMNT                                                  \
+      if ( _pointer_ ) {                                            \
+        FT_Free_Debug( memory, (_pointer_), __FILE__, __LINE__ );   \
+        (_pointer_) = NULL;                                         \
+      }                                                             \
+    FT_END_STMNT
+
+
+#  else  /* !FT_DEBUG_MEMORY */
+
+#    define FT_MEM_ALLOC( _pointer_, _size_ )         \
+          (_pointer_) = FT_Alloc( memory, _size_, &error )
+
+#    define FT_MEM_FREE( _pointer_ )             \
+    FT_BEGIN_STMNT                               \
+      if ( (_pointer_) ) {                       \
+        FT_Free( memory, (_pointer_) );          \
+        (_pointer_) = NULL;                      \
+      }                                          \
+    FT_END_STMNT
+
+#  define FT_MEM_REALLOC( _pointer_, _current_, _size_ )        \
+          (_pointer_) = FT_Realloc( memory, _current_, _size_,  \
+                                    (_pointer_), &error )
+
+#  define FT_MEM_QALLOC( _pointer_, _size_ )              \
+          (_pointer_) = FT_QAlloc( memory, _size_, &error )
+
+#  define FT_MEM_QREALLOC( _pointer_, _current_, _size_ )        \
+          (_pointer_) = FT_QRealloc( memory, _current_, _size_,  \
+                                     (_pointer_), &error )
+
+#  endif /* !FT_DEBUG_MEMORY */
+
+#  define  FT_MEM_SET_ERROR(cond)  ( (cond), error != 0 )
+
+#else /* !FT_STRICT_ALIASING */
+
+#  ifdef FT_DEBUG_MEMORY
 
   FT_BASE( FT_Error )
   FT_Alloc_Debug( FT_Memory    memory,
@@ -94,7 +227,8 @@ FT_BEGIN_HEADER
                  const char*  file_name,
                  FT_Long      line_no );
 
-#endif
+#  endif /* FT_DEBUG_MEMORY */
+
 
 
   /*************************************************************************/
@@ -249,45 +383,6 @@ FT_BEGIN_HEADER
   FT_Free( FT_Memory  memory,
            void*     *P );
 
-
-#define FT_MEM_SET( dest, byte, count )     ft_memset( dest, byte, count )
-
-#define FT_MEM_COPY( dest, source, count )  ft_memcpy( dest, source, count )
-
-#define FT_MEM_MOVE( dest, source, count )  ft_memmove( dest, source, count )
-
-
-#define FT_MEM_ZERO( dest, count )  FT_MEM_SET( dest, 0, count )
-
-#define FT_ZERO( p )                FT_MEM_ZERO( p, sizeof ( *(p) ) )
-
-#define FT_ARRAY_ZERO( dest, count )                        \
-          FT_MEM_ZERO( dest, (count) * sizeof ( *(dest) ) )
-
-#define FT_ARRAY_COPY( dest, source, count )                        \
-          FT_MEM_COPY( dest, source, (count) * sizeof ( *(dest) ) )
-
-#define FT_ARRAY_MOVE( dest, source, count )                        \
-          FT_MEM_MOVE( dest, source, (count) * sizeof ( *(dest) ) )
-
-
-  /*
-   *  Return the maximum number of adressable elements in an array.
-   *  We limit ourselves to INT_MAX, rather than UINT_MAX, to avoid
-   *  any problems.
-   */
-#define FT_ARRAY_MAX( ptr )           ( FT_INT_MAX / sizeof ( *(ptr) ) )
-
-#define FT_ARRAY_CHECK( ptr, count )  ( (count) <= FT_ARRAY_MAX( ptr ) )
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* We first define FT_MEM_ALLOC, FT_MEM_REALLOC, and FT_MEM_FREE.  All   */
-  /* macros use an _implicit_ `memory' parameter to access the current     */
-  /* memory allocator.                                                     */
-  /*                                                                       */
-
 #ifdef FT_DEBUG_MEMORY
 
 #define FT_MEM_ALLOC( _pointer_, _size_ )              \
@@ -340,6 +435,43 @@ FT_BEGIN_HEADER
 
 #endif /* !FT_DEBUG_MEMORY */
 
+#  define  FT_MEM_SET_ERROR(cond)   ( (error = (cond)) != 0 )
+
+#endif /* !FT_STRICT_ALIASING */
+
+
+
+#define FT_MEM_SET( dest, byte, count )     ft_memset( dest, byte, count )
+
+#define FT_MEM_COPY( dest, source, count )  ft_memcpy( dest, source, count )
+
+#define FT_MEM_MOVE( dest, source, count )  ft_memmove( dest, source, count )
+
+
+#define FT_MEM_ZERO( dest, count )  FT_MEM_SET( dest, 0, count )
+
+#define FT_ZERO( p )                FT_MEM_ZERO( p, sizeof ( *(p) ) )
+
+#define FT_ARRAY_ZERO( dest, count )                        \
+          FT_MEM_ZERO( dest, (count) * sizeof ( *(dest) ) )
+
+#define FT_ARRAY_COPY( dest, source, count )                        \
+          FT_MEM_COPY( dest, source, (count) * sizeof ( *(dest) ) )
+
+#define FT_ARRAY_MOVE( dest, source, count )                        \
+          FT_MEM_MOVE( dest, source, (count) * sizeof ( *(dest) ) )
+
+
+  /*
+   *  Return the maximum number of adressable elements in an array.
+   *  We limit ourselves to INT_MAX, rather than UINT_MAX, to avoid
+   *  any problems.
+   */
+#define FT_ARRAY_MAX( ptr )           ( FT_INT_MAX / sizeof ( *(ptr) ) )
+
+#define FT_ARRAY_CHECK( ptr, count )  ( (count) <= FT_ARRAY_MAX( ptr ) )
+
+
 
   /*************************************************************************/
   /*                                                                       */
@@ -388,17 +520,19 @@ FT_BEGIN_HEADER
   /* if an error occured (i.e. if 'error != 0').                           */
   /*                                                                       */
 
+
+
 #define FT_ALLOC( _pointer_, _size_ )                       \
-          FT_SET_ERROR( FT_MEM_ALLOC( _pointer_, _size_ ) )
+          FT_MEM_SET_ERROR( FT_MEM_ALLOC( _pointer_, _size_ ) )
 
 #define FT_REALLOC( _pointer_, _current_, _size_ )                       \
-          FT_SET_ERROR( FT_MEM_REALLOC( _pointer_, _current_, _size_ ) )
+          FT_MEM_SET_ERROR( FT_MEM_REALLOC( _pointer_, _current_, _size_ ) )
 
 #define FT_QALLOC( _pointer_, _size_ )                       \
-          FT_SET_ERROR( FT_MEM_QALLOC( _pointer_, _size_ ) )
+          FT_MEM_SET_ERROR( FT_MEM_QALLOC( _pointer_, _size_ ) )
 
 #define FT_QREALLOC( _pointer_, _current_, _size_ )                       \
-          FT_SET_ERROR( FT_MEM_QREALLOC( _pointer_, _current_, _size_ ) )
+          FT_MEM_SET_ERROR( FT_MEM_QREALLOC( _pointer_, _current_, _size_ ) )
 
 
 #define FT_FREE( _pointer_ )       \
diff --git a/include/freetype/internal/psaux.h b/include/freetype/internal/psaux.h
index 49c53d091..7ca47d8c9 100644
--- a/include/freetype/internal/psaux.h
+++ b/include/freetype/internal/psaux.h
@@ -695,35 +695,6 @@ FT_BEGIN_HEADER
 
   typedef struct AFM_ParserRec_*  AFM_Parser;
 
-  typedef struct  AFM_TrackKernRec_
-  {
-    FT_Int    degree;
-    FT_Fixed  min_ptsize;
-    FT_Fixed  min_kern;
-    FT_Fixed  max_ptsize;
-    FT_Fixed  max_kern;
-
-  } AFM_TrackKernRec, *AFM_TrackKern;
-
-  typedef struct  AFM_KernPairRec_
-  {
-    FT_Int  index1;
-    FT_Int  index2;
-    FT_Int  x;
-    FT_Int  y;
-
-  } AFM_KernPairRec, *AFM_KernPair;
-
-  typedef struct  AFM_FontInfoRec_
-  {
-    FT_Bool        IsCIDFont;
-    AFM_TrackKern  TrackKerns;   /* free if non-NULL */
-    FT_Int         NumTrackKern;
-    AFM_KernPair   KernPairs;    /* free if non-NULL */
-    FT_Int         NumKernPair;
-
-  } AFM_FontInfoRec, *AFM_FontInfo;
-
   typedef struct  AFM_Parser_FuncsRec_
   {
     FT_Error
@@ -742,7 +713,6 @@ FT_BEGIN_HEADER
 
   typedef struct AFM_StreamRec_*  AFM_Stream;
 
-
   /*************************************************************************/
   /*                                                                       */
   /* <Struct>                                                              */
diff --git a/include/freetype/internal/t1types.h b/include/freetype/internal/t1types.h
index 75f737bb2..0a16453f1 100644
--- a/include/freetype/internal/t1types.h
+++ b/include/freetype/internal/t1types.h
@@ -129,6 +129,48 @@ FT_BEGIN_HEADER
   } CID_SubrsRec, *CID_Subrs;
 
 
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /***                AFM FONT INFORMATION STRUCTURES                    ***/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  typedef struct  AFM_TrackKernRec_
+  {
+    FT_Int    degree;
+    FT_Fixed  min_ptsize;
+    FT_Fixed  min_kern;
+    FT_Fixed  max_ptsize;
+    FT_Fixed  max_kern;
+
+  } AFM_TrackKernRec, *AFM_TrackKern;
+
+  typedef struct  AFM_KernPairRec_
+  {
+    FT_Int  index1;
+    FT_Int  index2;
+    FT_Int  x;
+    FT_Int  y;
+
+  } AFM_KernPairRec, *AFM_KernPair;
+
+  typedef struct  AFM_FontInfoRec_
+  {
+    FT_Bool        IsCIDFont;
+    AFM_TrackKern  TrackKerns;   /* free if non-NULL */
+    FT_Int         NumTrackKern;
+    AFM_KernPair   KernPairs;    /* free if non-NULL */
+    FT_Int         NumKernPair;
+
+  } AFM_FontInfoRec, *AFM_FontInfo;
+
+
   /*************************************************************************/
   /*************************************************************************/
   /*************************************************************************/
diff --git a/src/autofit/afwarp.c b/src/autofit/afwarp.c
index ac3994209..c8f86c715 100644
--- a/src/autofit/afwarp.c
+++ b/src/autofit/afwarp.c
@@ -18,6 +18,7 @@
 
 #include "afwarp.h"
 
+#ifdef AF_USE_WARPER
 
 #if 1
   static const AF_WarpScore
@@ -303,5 +304,10 @@
     *a_delta = warper->best_delta;
   }
 
+#else /* !AF_USE_WARPER */
+
+char  af_warper_dummy = 0;  /* make compiler happy */
+
+#endif /* !AF_USE_WARPER */
 
 /* END */
diff --git a/src/base/ftbitmap.c b/src/base/ftbitmap.c
index dc5911d4c..f856de1d0 100644
--- a/src/base/ftbitmap.c
+++ b/src/base/ftbitmap.c
@@ -73,10 +73,10 @@
       target_size = (FT_ULong)( target_pitch * target->rows );
 
       if ( target_size != size )
-        FT_QREALLOC( target->buffer, target_size, size );
+        (void)FT_QREALLOC( target->buffer, target_size, size );
     }
     else
-      FT_QALLOC( target->buffer, size );
+      (void)FT_QALLOC( target->buffer, size );
 
     if ( !error )
     {
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index a01afcbb8..4ba53c703 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -267,7 +267,8 @@
   ft_glyphslot_alloc_bitmap( FT_GlyphSlot  slot,
                              FT_ULong      size )
   {
-    FT_Memory  memory = FT_FACE_MEMORY( slot->face );
+    FT_Memory   memory = FT_FACE_MEMORY( slot->face );
+    FT_Error    error;
 
 
     if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
@@ -275,7 +276,8 @@
     else
       slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
 
-    return FT_MEM_ALLOC( slot->bitmap.buffer, size );
+    (void)FT_ALLOC( slot->bitmap.buffer, size );
+    return error;
   }
 
 
@@ -895,7 +897,7 @@
     FT_Driver_Class   clazz;
     FT_Face           face = 0;
     FT_Error          error, error2;
-    FT_Face_Internal  internal;
+    FT_Face_Internal  internal = NULL;
 
 
     clazz  = driver->clazz;
@@ -1722,10 +1724,10 @@
     if ( FT_IS_SCALABLE( face ) )
     {
       if ( face->height < 0 )
-        face->height = -face->height;
+        face->height = (short)-face->height;
 
       if ( !FT_HAS_VERTICAL( face ) )
-        face->max_advance_height = face->height;
+        face->max_advance_height = (short)face->height;
     }
 
     if ( FT_HAS_FIXED_SIZES( face ) )
@@ -1739,9 +1741,9 @@
 
 
         if ( bsize->height < 0 )
-          bsize->height = -bsize->height;
+          bsize->height = (FT_Short) -bsize->height;
         if ( bsize->x_ppem < 0 )
-          bsize->x_ppem = -bsize->x_ppem;
+          bsize->x_ppem = (FT_Short) -bsize->x_ppem;
         if ( bsize->y_ppem < 0 )
           bsize->y_ppem = -bsize->y_ppem;
       }
@@ -2085,8 +2087,8 @@
     metrics = &face->size->metrics;
     bsize   = face->available_sizes + strike_index;
 
-    metrics->x_ppem = ( bsize->x_ppem + 32 ) >> 6;
-    metrics->y_ppem = ( bsize->y_ppem + 32 ) >> 6;
+    metrics->x_ppem = (FT_UShort)(( bsize->x_ppem + 32 ) >> 6);
+    metrics->y_ppem = (FT_UShort)(( bsize->y_ppem + 32 ) >> 6);
 
     if ( FT_IS_SCALABLE( face ) )
     {
@@ -2197,8 +2199,8 @@
         scaled_h = FT_MulFix( face->units_per_EM, metrics->y_scale );
       }
 
-      metrics->x_ppem = ( scaled_w + 32 ) >> 6;
-      metrics->y_ppem = ( scaled_h + 32 ) >> 6;
+      metrics->x_ppem = (FT_UShort)(( scaled_w + 32 ) >> 6);
+      metrics->y_ppem = (FT_UShort)(( scaled_h + 32 ) >> 6);
 
       ft_recompute_scaled_metrics( face, metrics );
     }
diff --git a/src/base/ftrfork.c b/src/base/ftrfork.c
index 50dcf858c..3b92247ea 100644
--- a/src/base/ftrfork.c
+++ b/src/base/ftrfork.c
@@ -657,7 +657,7 @@
     char*        tmp;
     const char*  slash;
     unsigned     new_length;
-    FT_ULong     error = FT_Err_Ok;
+    FT_Error     error = FT_Err_Ok;
 
     FT_UNUSED( error );
 
diff --git a/src/base/ftutil.c b/src/base/ftutil.c
index 765252dad..6ed1db2ce 100644
--- a/src/base/ftutil.c
+++ b/src/base/ftutil.c
@@ -45,6 +45,133 @@
   /*************************************************************************/
   /*************************************************************************/
 
+#ifdef FT_STRICT_ALIASING
+
+
+  FT_BASE_DEF( FT_Pointer )
+  FT_Alloc( FT_Memory  memory,
+            FT_Long    size,
+            FT_Error  *p_error )
+  {
+    FT_Error    error = 0;
+    FT_Pointer  block = NULL;
+    
+    if ( size > 0 )
+    {
+      block = memory->alloc( memory, size );
+      if ( block == NULL )
+        error = FT_Err_Out_Of_Memory;
+      else
+        FT_MEM_ZERO( block, size );
+    }
+    *p_error = error;
+    return block;
+  }
+              
+
+  FT_BASE_DEF( FT_Pointer )
+  FT_QAlloc( FT_Memory  memory,
+             FT_Long    size,
+             FT_Error  *p_error )
+  {
+    FT_Error    error = 0;
+    FT_Pointer  block = NULL;
+    
+    if ( size > 0 )
+    {
+      block = memory->alloc( memory, size );
+      if ( block == NULL )
+        error = FT_Err_Out_Of_Memory;
+    }
+    *p_error = error;
+    return block;
+  }
+               
+
+  FT_BASE_DEF( FT_Pointer )
+  FT_Realloc( FT_Memory  memory,
+              FT_Long    current,
+              FT_Long    size,
+              void*      block,
+              FT_Error  *p_error )
+  {
+    FT_Error    error = 0;
+    
+    if ( size <= 0 )
+    {
+      FT_Free( memory, block );
+      block = NULL;
+    }
+    else if ( current <= 0 )
+    {
+      FT_ASSERT( block == NULL );
+      
+      block = FT_Alloc( memory, size, &error );
+    }
+    else
+    {
+      FT_Pointer  block2;
+
+      block2 = memory->realloc( memory, current, size, block );
+      if ( block2 == NULL )
+        error = FT_Err_Out_Of_Memory;
+      else
+      {
+        block = block2;
+        if ( size > current )
+          FT_MEM_ZERO( (char*)block + current, size-current );
+      }
+    }
+    *p_error = error;
+    return block;
+  }
+                
+
+  FT_BASE_DEF( FT_Pointer )
+  FT_QRealloc( FT_Memory  memory,
+               FT_Long    current,
+               FT_Long    size,
+               void*      block,
+               FT_Error  *p_error )
+  {
+    FT_Error  error = 0;
+    
+    if ( size <= 0 )
+    {
+      FT_Free( memory, block );
+      block = NULL;
+    }
+    else if ( current <= 0 )
+    {
+      FT_ASSERT( block == NULL );
+      
+      block = FT_QAlloc( memory, size, &error );
+    }
+    else
+    {
+      FT_Pointer  block2;
+
+      block2 = memory->realloc( memory, current, size, block );
+      if ( block2 == NULL )
+        error = FT_Err_Out_Of_Memory;
+      else
+        block = block2;
+    }
+    *p_error = error;
+    return block;
+
+  }               
+
+  FT_BASE_DEF( void )
+  FT_Free( FT_Memory   memory,
+           const void *P )
+  {
+    if ( P )
+      memory->free( memory, (void*)P );
+  }           
+
+#else /* !FT_STRICT_ALIASING */
+
   /* documentation is in ftmemory.h */
 
   FT_BASE_DEF( FT_Error )
@@ -208,6 +335,8 @@
     }
   }
 
+#endif /* !FT_STRICT_ALIASING */
+
 
   /*************************************************************************/
   /*************************************************************************/
diff --git a/src/bdf/bdfdrivr.c b/src/bdf/bdfdrivr.c
index dcb16c967..93592f517 100644
--- a/src/bdf/bdfdrivr.c
+++ b/src/bdf/bdfdrivr.c
@@ -249,7 +249,9 @@ THE SOFTWARE.
 
     if ( !parts || !len )
     {
-      FT_ALLOC( face->style_name, ft_strlen( "Regular" ) + 1 );
+      if ( FT_ALLOC( face->style_name, ft_strlen( "Regular" ) + 1 ) )
+        return error;
+        
       ft_strcpy( face->style_name, "Regular" );
     }
     else
diff --git a/src/cache/ftccache.c b/src/cache/ftccache.c
index 347079442..a4e6b1d54 100644
--- a/src/cache/ftccache.c
+++ b/src/cache/ftccache.c
@@ -100,10 +100,11 @@
         if ( p >= mask )
         {
           FT_Memory  memory = cache->memory;
+          FT_Error   error;
 
 
           /* if we can't expand the array, leave immediately */
-          if ( FT_MEM_RENEW_ARRAY( cache->buckets, (mask+1)*2, (mask+1)*4 ) )
+          if ( FT_RENEW_ARRAY( cache->buckets, (mask+1)*2, (mask+1)*4 ) )
             break;
         }
 
@@ -152,11 +153,12 @@
         if ( p == 0 )
         {
           FT_Memory  memory = cache->memory;
+          FT_Error   error;
 
 
           /* if we can't shrink the array, leave immediately */
-          if ( FT_MEM_RENEW_ARRAY( cache->buckets,
-                                   ( mask + 1 ) * 2, mask + 1 ) )
+          if ( FT_RENEW_ARRAY( cache->buckets,
+                               ( mask + 1 ) * 2, mask + 1 ) )
             break;
 
           cache->mask >>= 1;
@@ -320,13 +322,15 @@
   ftc_cache_init( FTC_Cache  cache )
   {
     FT_Memory  memory = cache->memory;
+    FT_Error   error;
 
 
     cache->p     = 0;
     cache->mask  = FTC_HASH_INITIAL_SIZE - 1;
     cache->slack = FTC_HASH_INITIAL_SIZE * FTC_HASH_MAX_LOAD;
 
-    return ( FT_MEM_NEW_ARRAY( cache->buckets, FTC_HASH_INITIAL_SIZE * 2 ) );
+    (void)FT_NEW_ARRAY( cache->buckets, FTC_HASH_INITIAL_SIZE * 2 );
+    return error;
   }
 
 
diff --git a/src/cff/cffgload.c b/src/cff/cffgload.c
index 13cdfa71f..3b848e31d 100644
--- a/src/cff/cffgload.c
+++ b/src/cff/cffgload.c
@@ -2610,9 +2610,9 @@
         glyph->root.linearHoriAdvance           = decoder.glyph_width;
         glyph->root.internal->glyph_transformed = 0;
 
-        has_vertical_info = face->vertical_info                   &&
-                            face->vertical.number_Of_VMetrics > 0 &&
-                            face->vertical.long_metrics != 0;
+        has_vertical_info = FT_BOOL( face->vertical_info                   &&
+                                     face->vertical.number_Of_VMetrics > 0 &&
+                                     face->vertical.long_metrics != 0 );
 
         /* get the vertical metrics from the vtmx table if we have one */
         if ( has_vertical_info )
diff --git a/src/cff/cffload.c b/src/cff/cffload.c
index b14976ff9..5556565db 100644
--- a/src/cff/cffload.c
+++ b/src/cff/cffload.c
@@ -2294,7 +2294,7 @@
       for ( idx = 0; idx < font->num_subfonts; idx++ )
         cff_subfont_done( memory, font->subfonts[idx] );
 
-      FT_FREE( font->subfonts );
+      /* FT_FREE( font->subfonts ); -- bug this is a static array !! */
     }
 
     cff_encoding_done( &font->encoding );
diff --git a/src/gzip/ftgzip.c b/src/gzip/ftgzip.c
index 67e7bb8f0..bfbcbf9e1 100644
--- a/src/gzip/ftgzip.c
+++ b/src/gzip/ftgzip.c
@@ -99,12 +99,12 @@
                  uInt       size )
   {
     FT_ULong    sz = (FT_ULong)size * items;
+    FT_Error    error;
     FT_Pointer  p;
 
 
-    FT_MEM_ALLOC( p, sz );
-
-    return (voidpf) p;
+    (void)FT_ALLOC( p, sz );
+    return p;
   }
 
 
diff --git a/src/otvalid/otvcommn.c b/src/otvalid/otvcommn.c
index 1b9d77c42..293960f34 100644
--- a/src/otvalid/otvcommn.c
+++ b/src/otvalid/otvcommn.c
@@ -222,10 +222,10 @@
 
         OTV_LIMIT_CHECK( 2 );
 
-        OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount ));
-
         GlyphCount = FT_NEXT_USHORT( p );
 
+        OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount ));
+
         OTV_LIMIT_CHECK( GlyphCount * 2 );    /* ClassValueArray */
       }
       break;
diff --git a/src/otvalid/otvgpos.c b/src/otvalid/otvgpos.c
index b6bd6ed5f..d21d8eae5 100644
--- a/src/otvalid/otvgpos.c
+++ b/src/otvalid/otvgpos.c
@@ -67,10 +67,10 @@
 
     OTV_LIMIT_CHECK( 2 );
 
-    OTV_TRACE(( " (Count = %d)\n", Count ));
-
     Count = FT_NEXT_USHORT( p );
 
+    OTV_TRACE(( " (Count = %d)\n", Count ));
+
     OTV_LIMIT_CHECK( Count * valid->extra1 * 2 );
 
     table_size = Count * valid->extra1 * 2 + 2;
diff --git a/src/pcf/pcfdrivr.c b/src/pcf/pcfdrivr.c
index 3aaeb477d..719e58f95 100644
--- a/src/pcf/pcfdrivr.c
+++ b/src/pcf/pcfdrivr.c
@@ -213,7 +213,7 @@ THE SOFTWARE.
 
         FT_FREE( prop->name );
         if ( prop->isString )
-          FT_FREE( prop->value );
+          FT_FREE( prop->value.atom );
       }
 
       FT_FREE( face->properties );
diff --git a/src/pfr/pfrobjs.c b/src/pfr/pfrobjs.c
index b4b89e595..127040073 100644
--- a/src/pfr/pfrobjs.c
+++ b/src/pfr/pfrobjs.c
@@ -480,7 +480,7 @@
         FT_UInt    probe    = power * size;
         FT_UInt    extra    = count - power;
         FT_Byte*   base     = stream->cursor;
-        FT_Bool    twobytes = item->flags & 1;
+        FT_Bool    twobytes = FT_BOOL(item->flags & 1);
         FT_Byte*   p;
         FT_UInt32  cpair;
 
diff --git a/src/psaux/Jamfile b/src/psaux/Jamfile
index a8c199c9b..07c653d21 100644
--- a/src/psaux/Jamfile
+++ b/src/psaux/Jamfile
@@ -16,7 +16,9 @@ SubDir  FT2_TOP $(FT2_SRC_DIR) psaux ;
 
   if $(FT2_MULTI)
   {
-    _sources = psauxmod psobjs t1decode t1cmap ;
+    _sources = psauxmod psobjs   t1decode t1cmap
+               psconv   afmparse 
+               ;
   }
   else
   {
diff --git a/src/psaux/afmparse.c b/src/psaux/afmparse.c
index fa33fba7e..27d0c131b 100644
--- a/src/psaux/afmparse.c
+++ b/src/psaux/afmparse.c
@@ -15,7 +15,8 @@
 /*                                                                         */
 /***************************************************************************/
 
-
+#include <ft2build.h>
+#include FT_FREETYPE_H
 #include FT_INTERNAL_POSTSCRIPT_AUX_H
 #include FT_INTERNAL_DEBUG_H
 
@@ -90,7 +91,7 @@
   static int
   afm_stream_skip_spaces( AFM_Stream  stream )
   {
-    int  ch;
+    int  ch = 0;  /* make stupid compiler happy */
 
 
     if ( AFM_STATUS_EOC( stream ) )
@@ -277,7 +278,7 @@
   } AFM_Token;
 
 
-  static const char*  afm_key_table[N_AFM_TOKENS] =
+  static const char*  const afm_key_table[N_AFM_TOKENS] =
   {
     "Ascender",
     "AxisLabel",
@@ -356,11 +357,6 @@
   };
 
 
-#define AFM_MAX_ARGUMENTS  5
-
-  static AFM_ValueRec  shared_vals[AFM_MAX_ARGUMENTS];
-
-
   /*
    * `afm_parser_read_vals' and `afm_parser_next_key' provide
    * high-level operations to an AFM_Stream.  The rest of the
@@ -401,12 +397,16 @@
       {
       case AFM_VALUE_TYPE_STRING:
       case AFM_VALUE_TYPE_NAME:
-        if ( !FT_QAlloc( parser->memory, len + 1,
-                         (void**)&(val->u.s)  ) )
-        {
-          ft_memcpy( val->u.s, str, len );
-          val->u.s[len] = '\0';
-        }
+		  {
+            FT_Memory  memory = parser->memory;
+			FT_Error   error;
+        
+			if ( !FT_QALLOC( val->u.s, len + 1 ) )
+			{
+              ft_memcpy( val->u.s, str, len );
+              val->u.s[len] = '\0';
+			}
+		  }
         break;
 
       case AFM_VALUE_TYPE_FIXED:
@@ -420,8 +420,8 @@
         break;
 
       case AFM_VALUE_TYPE_BOOL:
-        val->u.b = ( len == 4                          &&
-                     ft_strncmp( str, "true", 4 ) == 0 );
+        val->u.b = FT_BOOL( len == 4                      &&
+                            !ft_strncmp( str, "true", 4 ) );
         break;
 
       case AFM_VALUE_TYPE_INDEX:
@@ -443,7 +443,7 @@
                        FT_UInt*    len )
   {
     AFM_Stream  stream = parser->stream;
-    char*       key;
+    char*       key    = 0;  /* make stupid compiler happy */
 
 
     if ( line )
@@ -598,13 +598,14 @@
       FT_Error   error;
 
 
-      FT_QNEW_ARRAY( fi->TrackKerns, fi->NumTrackKern );
-      if ( error )
+      if ( FT_QNEW_ARRAY( fi->TrackKerns, fi->NumTrackKern ) )
         return error;
     }
 
-    while ( ( key = afm_parser_next_key( parser, 1, &len ) ) )
+    while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 )
     {
+      AFM_ValueRec  shared_vals[5];
+      
       switch ( afm_tokenize( key, len ) )
       {
       case AFM_TOKEN_TRACKKERN:
@@ -694,12 +695,11 @@
       FT_Error   error;
 
 
-      FT_QNEW_ARRAY( fi->KernPairs, fi->NumKernPair );
-      if ( error )
+      if ( FT_QNEW_ARRAY( fi->KernPairs, fi->NumKernPair ) )
         return error;
     }
 
-    while ( ( key = afm_parser_next_key( parser, 1, &len ) ) )
+    while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 )
     {
       AFM_Token  token = afm_tokenize( key, len );
 
@@ -710,7 +710,8 @@
       case AFM_TOKEN_KPX:
       case AFM_TOKEN_KPY:
         {
-          FT_Int  r;
+          FT_Int        r;
+          AFM_ValueRec  shared_vals[4];
 
 
           n++;
@@ -775,7 +776,7 @@
     FT_UInt   len;
 
 
-    while ( ( key = afm_parser_next_key( parser, 1, &len ) ) )
+    while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 )
     {
       switch ( afm_tokenize( key, len ) )
       {
@@ -826,7 +827,7 @@
         goto Fail;
     }
 
-    while ( ( key = afm_parser_next_key( parser, 1, &len ) ) )
+    while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 )
     {
       AFM_Token  token = afm_tokenize( key, len );
 
@@ -859,7 +860,7 @@
          ft_strncmp( key, "StartFontMetrics", 16 ) != 0 )
       return PSaux_Err_Unknown_File_Format;
 
-    while ( ( key = afm_parser_next_key( parser, 1, &len ) ) )
+    while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 )
     {
       switch ( afm_tokenize( key, len ) )
       {
@@ -876,11 +877,15 @@
         break;
 
       case AFM_TOKEN_ISCIDFONT:
-        shared_vals[0].type = AFM_VALUE_TYPE_BOOL;
-        if ( afm_parser_read_vals( parser, shared_vals, 1 ) != 1 )
-          goto Fail;
+        {
+          AFM_ValueRec  shared_vals[1];
+          
+          shared_vals[0].type = AFM_VALUE_TYPE_BOOL;
+          if ( afm_parser_read_vals( parser, shared_vals, 1 ) != 1 )
+            goto Fail;
 
-        fi->IsCIDFont = shared_vals[0].u.b;
+          fi->IsCIDFont = shared_vals[0].u.b;
+        }
         break;
 
       case AFM_TOKEN_STARTCHARMETRICS:
diff --git a/src/psaux/afmparse.h b/src/psaux/afmparse.h
index 192727a03..c2fce75c8 100644
--- a/src/psaux/afmparse.h
+++ b/src/psaux/afmparse.h
@@ -66,13 +66,13 @@ FT_BEGIN_HEADER
 
   } AFM_ValueRec, *AFM_Value;
 
+#define  AFM_MAX_ARGUMENTS  5
 
   FT_LOCAL( FT_Int )
   afm_parser_read_vals( AFM_Parser  parser,
                         AFM_Value   vals,
                         FT_Int      n );
 
-
   /* read the next key from the next line or column */
   FT_LOCAL( char* )
   afm_parser_next_key( AFM_Parser  parser,
diff --git a/src/psaux/psconv.c b/src/psaux/psconv.c
index 40c22dc7c..0fb19ee82 100644
--- a/src/psaux/psconv.c
+++ b/src/psaux/psconv.c
@@ -20,6 +20,7 @@
 #include FT_INTERNAL_POSTSCRIPT_AUX_H
 #include FT_INTERNAL_DEBUG_H
 
+#include "psconv.h"
 #include "psobjs.h"
 #include "psauxerr.h"
 
@@ -85,7 +86,7 @@
 
     if ( *p == '-' || *p == '+' )
     {
-      sign = ( *p == '-' );
+      sign = FT_BOOL( *p == '-' );
 
       p++;
       if ( p == limit )
@@ -156,7 +157,7 @@
 
     if ( *p == '-' || *p == '+' )
     {
-      sign = ( *p == '-' );
+      sign = FT_BOOL( *p == '-' );
 
       p++;
       if ( p == limit )
@@ -351,9 +352,12 @@
         break;
 
       if ( r % 2 )
-        *buffer++ += c;
+	  {
+        *buffer = (FT_Byte)(*buffer + c);
+		buffer++;
+	  }
       else
-        *buffer = c << 4;
+        *buffer = (FT_Byte)(c << 4);
 
       r++;
     }
@@ -378,7 +382,7 @@
 
     for ( r = 0, p = *cursor; r < n && p < limit; r++, p++ )
     {
-      FT_Byte  b = ( *p ^ ( s >> 8 ) );
+      FT_Byte  b = (FT_Byte)( *p ^ ( s >> 8 ) );
 
 
       s = (FT_UShort)( ( *p + s ) * 52845U + 22719 );
diff --git a/src/sfnt/sfobjs.c b/src/sfnt/sfobjs.c
index 6ffc5a2f1..2d5f79a4b 100644
--- a/src/sfnt/sfobjs.c
+++ b/src/sfnt/sfobjs.c
@@ -51,11 +51,12 @@
     FT_String*  string;
     FT_UInt     len, code, n;
     FT_Byte*    read = (FT_Byte*)entry->string;
+	FT_Error    error;
 
 
     len = (FT_UInt)entry->stringLength / 2;
 
-    if ( FT_MEM_NEW_ARRAY( string, len + 1 ) )
+    if ( FT_NEW_ARRAY( string, len + 1 ) )
       return NULL;
 
     for ( n = 0; n < len; n++ )
@@ -81,11 +82,12 @@
     FT_String*  string;
     FT_UInt     len, code, n;
     FT_Byte*    read = (FT_Byte*)entry->string;
+	FT_Error    error;
 
 
     len = (FT_UInt)entry->stringLength / 4;
 
-    if ( FT_MEM_NEW_ARRAY( string, len + 1 ) )
+    if ( FT_NEW_ARRAY( string, len + 1 ) )
       return NULL;
 
     for ( n = 0; n < len; n++ )
@@ -111,11 +113,12 @@
     FT_String*  string;
     FT_UInt     len, code, n;
     FT_Byte*    read = (FT_Byte*)entry->string;
+	FT_Error    error;
 
 
     len = (FT_UInt)entry->stringLength;
 
-    if ( FT_MEM_NEW_ARRAY( string, len + 1 ) )
+    if ( FT_NEW_ARRAY( string, len + 1 ) )
       return NULL;
 
     for ( n = 0; n < len; n++ )
diff --git a/src/sfnt/ttsbit0.c b/src/sfnt/ttsbit0.c
index 6e63fe23f..d1e8b961b 100644
--- a/src/sfnt/ttsbit0.c
+++ b/src/sfnt/ttsbit0.c
@@ -172,9 +172,9 @@
         bsize->y_ppem = (FT_Pos)(y_ppem << 6);
 
         /* XXX: Is this correct? */
-        bsize->height = ascender - descender;
-        bsize->width  = (FT_Short)( avgwidth * y_ppem + em_size / 2 ) /
-                          em_size;
+        bsize->height = (FT_Short)(ascender - descender);
+        bsize->width  = (FT_Short)( ( avgwidth * y_ppem + em_size / 2 ) /
+                                     em_size );
 
         /* assume 72dpi */
         bsize->size   = bsize->y_ppem;
@@ -232,9 +232,9 @@
     bsize  = ( (FT_Face)face )->available_sizes + strike_index;
     strike = face->sbit_table + 8 + strike_index * 48;
 
-    metrics->x_ppem = bsize->x_ppem >> 6;
-    metrics->y_ppem = bsize->y_ppem >> 6;
-    metrics->height = bsize->height << 6;
+    metrics->x_ppem = (FT_UShort)(bsize->x_ppem >> 6);
+    metrics->y_ppem = (FT_UShort)(bsize->y_ppem >> 6);
+    metrics->height = (FT_UShort)(bsize->height << 6);
 
     metrics->ascender  = (FT_Char)strike[16] << 6;  /* hori.ascender  */
     metrics->descender = (FT_Char)strike[17] << 6;  /* hori.descender */
diff --git a/src/tools/apinames.c b/src/tools/apinames.c
index e4383cfa3..51668a022 100644
--- a/src/tools/apinames.c
+++ b/src/tools/apinames.c
@@ -1,6 +1,6 @@
 /*
  * This little program is used to parse the FreeType headers and
- * find the declaration of all public API.  This is easy, because
+ * find the declaration of all public APIs.  This is easy, because
  * they all look like the following:
  *
  *   FT_EXPORT( return_type )
@@ -19,6 +19,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <ctype.h>
 
 #define  PROGRAM_NAME     "apinames"
 #define  PROGRAM_VERSION  "0.1"
@@ -75,7 +76,7 @@ names_add( const char*  name,
   {
     nm = the_names + nn;
 
-    if ( nm->hash                      == h &&
+    if ( (int)nm->hash                 == h &&
          memcmp( name, nm->name, len ) == 0 &&
          nm->name[len]                 == 0 )
       return;
@@ -164,7 +165,7 @@ names_dump( FILE*         out,
         if ( dot != NULL )
         {
           int  len = (dot - dll_name);
-          if ( len > sizeof(temp)-1 )
+          if ( len > (int)(sizeof(temp)-1) )
             len = sizeof(temp)-1;
 
           memcpy( temp, dll_name, len );
@@ -257,7 +258,6 @@ read_header_file( FILE*  file, int  verbose )
       case STATE_TYPE:
         {
           char*   name = p;
-          size_t  func_len;
 
           while ( isalnum(*p) || *p == '_' )
             p++;
diff --git a/src/type1/t1afm.c b/src/type1/t1afm.c
index bdf2f42df..e1c98ec70 100644
--- a/src/type1/t1afm.c
+++ b/src/type1/t1afm.c
@@ -20,7 +20,7 @@
 #include "t1afm.h"
 #include "t1errors.h"
 #include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_TYPE1_TYPES_H
+#include FT_INTERNAL_POSTSCRIPT_AUX_H
 
 
   /*************************************************************************/
@@ -232,12 +232,14 @@
     FT_Error       error = T1_Err_Unknown_File_Format;
 
 
-    if ( FT_FRAME_ENTER( stream->size ) )
+    if ( FT_NEW( fi ) )
       return error;
 
-    FT_NEW( fi );
-    if ( error )
+    if ( FT_FRAME_ENTER( stream->size ) )
+    {
+      FT_FREE( fi );
       return error;
+    }
 
     psaux = (PSAux_Service)( (T1_Face)t1_face )->psaux;
     if ( psaux && psaux->afm_parser_funcs )
diff --git a/src/type1/t1afm.h b/src/type1/t1afm.h
index 7f9957e6d..8eb1764de 100644
--- a/src/type1/t1afm.h
+++ b/src/type1/t1afm.h
@@ -21,7 +21,7 @@
 
 #include <ft2build.h>
 #include "t1objs.h"
-
+#include FT_INTERNAL_TYPE1_TYPES_H
 
 FT_BEGIN_HEADER