shithub: freetype+ttf2subf

Download patch

ref: 645af08157345524dae6e7df4cb75f5514f52f0b
parent: 1357c19b65242a682bca485344a95077073f305c
author: Werner Lemberg <[email protected]>
date: Mon Sep 6 03:06:56 EDT 2004

* include/freetype/internal/ftobjs.h: Don't include
FT_CONFIG_STANDARD_LIBRARY_H.
(FT_Validator, FT_VAlidationLevel, FT_ValidatorRec, FT_VALIDATOR,
ft_validator_init, ft_validator_run, ft_validator_error, FT_INVALID,
FT_INVALID_TOO_SHORT, FT_INVALID_OFFSET, FT_INVALID_FORMAT,
FT_INVALID_GLYPH_ID, FT_INVALID_DATA): Move to...

* include/freetype/internal/ftvalid.h: New file.
Make FT_INVALID return module-specific error codes.

* include/freetype/internal/internal.h (FT_INTERNAL_VALIDATE_H): New
macro.

* include/freetype/fterrors.h: Undefine FT_ERR_PREFIX only if
FT_KEEP_ERR_PREFIX isn't defined.

* src/base/ftobjs.c: Include FT_INTERNAL_VALIDATE_H.

* src/sfnt/ttcmap.h: Don't include FT_INTERNAL_OBJECTS_H but
FT_INTERNAL_VALIDATE_H.

* src/sfnt/ttcmap.c: Don't include FT_INTERNAL_OBJECTS_H but
FT_INTERNAL_VALIDATE_H.
Include sferrors.h before FT_INTERNAL_VALIDATE_H.
s/FT_Err_Ok/SFNT_Err_Ok/.

* src/sfnt/sferrors.h: Define FT_KEEP_ERR_PREFIX.

* src/type1/t1afm.c: Include t1errors.h.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,35 @@
+2004-09-04  Werner Lemberg  <[email protected]>
+
+	* include/freetype/internal/ftobjs.h: Don't include
+	FT_CONFIG_STANDARD_LIBRARY_H.
+	(FT_Validator, FT_VAlidationLevel, FT_ValidatorRec, FT_VALIDATOR,
+	ft_validator_init, ft_validator_run, ft_validator_error, FT_INVALID,
+	FT_INVALID_TOO_SHORT, FT_INVALID_OFFSET, FT_INVALID_FORMAT,
+	FT_INVALID_GLYPH_ID, FT_INVALID_DATA): Move to...
+
+	* include/freetype/internal/ftvalid.h: New file.
+	Make FT_INVALID return module-specific error codes.
+
+	* include/freetype/internal/internal.h (FT_INTERNAL_VALIDATE_H): New
+	macro.
+
+	* include/freetype/fterrors.h: Undefine FT_ERR_PREFIX only if
+	FT_KEEP_ERR_PREFIX isn't defined.
+
+	* src/base/ftobjs.c: Include FT_INTERNAL_VALIDATE_H.
+
+	* src/sfnt/ttcmap.h: Don't include FT_INTERNAL_OBJECTS_H but
+	FT_INTERNAL_VALIDATE_H.
+
+	* src/sfnt/ttcmap.c: Don't include FT_INTERNAL_OBJECTS_H but
+	FT_INTERNAL_VALIDATE_H.
+	Include sferrors.h before FT_INTERNAL_VALIDATE_H.
+	s/FT_Err_Ok/SFNT_Err_Ok/.
+
+	* src/sfnt/sferrors.h: Define FT_KEEP_ERR_PREFIX.
+
+	* src/type1/t1afm.c: Include t1errors.h.
+
 2004-09-03  Werner Lemberg  <[email protected]>
 
 	* src/base/ftdebug.c (ft_debug_init): Highest debug level is 7,
--- a/include/freetype/fterrors.h
+++ b/include/freetype/fterrors.h
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    FreeType error code handling (specification).                        */
 /*                                                                         */
-/*  Copyright 1996-2001, 2002 by                                           */
+/*  Copyright 1996-2001, 2002, 2004 by                                     */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -25,17 +25,12 @@
   /* I - Error Formats                                                     */
   /* -----------------                                                     */
   /*                                                                       */
-  /*   Since release 2.1, the error constants have changed.  The lower     */
-  /*   byte of the error value gives the "generic" error code, while the   */
-  /*   higher byte indicates in which module the error occurred.           */
-  /*                                                                       */
-  /*   You can use the macro FT_ERROR_BASE(x) macro to extract the generic */
-  /*   error code from an FT_Error value.                                  */
-  /*                                                                       */
   /*   The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be   */
-  /*   undefined in ftoption.h in order to make the higher byte always     */
-  /*   zero, in case you need to be compatible with previous versions of   */
-  /*   FreeType 2.                                                         */
+  /*   defined in ftoption.h in order to make the higher byte indicate     */
+  /*   the module where the error has happened (this is not compatible     */
+  /*   with standard builds of FreeType 2).  You can then use the macro    */
+  /*   FT_ERROR_BASE macro to extract the generic error code from an       */
+  /*   FT_Error value.                                                     */
   /*                                                                       */
   /*                                                                       */
   /* II - Error Message strings                                            */
@@ -158,7 +153,7 @@
 #define FT_ERRORDEF_( e, v, s )   \
           FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v + FT_ERR_BASE, s )
 
-  /* this is only used for FT_Err_Ok, which must be 0! */
+  /* this is only used for <module>_Err_Ok, which must be 0! */
 #define FT_NOERRORDEF_( e, v, s ) \
           FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s )
 
@@ -168,7 +163,7 @@
 #endif
 
 
-  /* no include the error codes */
+  /* now include the error codes */
 #include FT_ERROR_DEFINITIONS_H
 
 
@@ -197,9 +192,13 @@
 #undef FT_NOERRORDEF_
 
 #undef FT_NEED_EXTERN_C
-#undef FT_ERR_PREFIX
-#undef FT_ERR_BASE
 #undef FT_ERR_CONCAT
+#undef FT_ERR_BASE
+
+  /* FT_KEEP_ERR_PREFIX is needed for ftvalid.h */
+#ifndef FT_KEEP_ERR_PREFIX
+#undef FT_ERR_PREFIX
+#endif
 
 #endif /* __FTERRORS_H__ */
 
--- a/include/freetype/fttypes.h
+++ b/include/freetype/fttypes.h
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    FreeType simple types definitions (specification only).              */
 /*                                                                         */
-/*  Copyright 1996-2001 by                                                 */
+/*  Copyright 1996-2001, 2002, 2004 by                                     */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
--- a/include/freetype/internal/ftobjs.h
+++ b/include/freetype/internal/ftobjs.h
@@ -27,7 +27,6 @@
 #define __FTOBJS_H__
 
 #include <ft2build.h>
-#include FT_CONFIG_STANDARD_LIBRARY_H   /* for ft_setjmp and ft_longjmp */
 #include FT_RENDER_H
 #include FT_SIZES_H
 #include FT_INTERNAL_MEMORY_H
@@ -79,111 +78,6 @@
 #define FT_PIX_FLOOR( x )     ( (x) & ~63 )
 #define FT_PIX_ROUND( x )     FT_PIX_FLOOR( (x) + 32 )
 #define FT_PIX_CEIL( x )      FT_PIX_FLOOR( (x) + 63 )
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-  /****                                                                 ****/
-  /****                                                                 ****/
-  /****                    V A L I D A T I O N                          ****/
-  /****                                                                 ****/
-  /****                                                                 ****/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-
-  /* handle to a validation object */
-  typedef struct FT_ValidatorRec_*  FT_Validator;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* There are three distinct validation levels defined here:              */
-  /*                                                                       */
-  /* FT_VALIDATE_DEFAULT ::                                                */
-  /*   A table that passes this validation level can be used reliably by   */
-  /*   FreeType.  It generally means that all offsets have been checked to */
-  /*   prevent out-of-bound reads, array counts are correct, etc.          */
-  /*                                                                       */
-  /* FT_VALIDATE_TIGHT ::                                                  */
-  /*   A table that passes this validation level can be used reliably and  */
-  /*   doesn't contain invalid data.  For example, a charmap table that    */
-  /*   returns invalid glyph indices will not pass, even though it can     */
-  /*   be used with FreeType in default mode (the library will simply      */
-  /*   return an error later when trying to load the glyph).               */
-  /*                                                                       */
-  /*   It also check that fields that must be a multiple of 2, 4, or 8     */
-  /*   don't have incorrect values, etc.                                   */
-  /*                                                                       */
-  /* FT_VALIDATE_PARANOID ::                                               */
-  /*   Only for font debugging.  Checks that a table follows the           */
-  /*   specification by 100%.  Very few fonts will be able to pass this    */
-  /*   level anyway but it can be useful for certain tools like font       */
-  /*   editors/converters.                                                 */
-  /*                                                                       */
-  typedef enum  FT_ValidationLevel_
-  {
-    FT_VALIDATE_DEFAULT = 0,
-    FT_VALIDATE_TIGHT,
-    FT_VALIDATE_PARANOID
-
-  } FT_ValidationLevel;
-
-
-  /* validator structure */
-  typedef struct  FT_ValidatorRec_
-  {
-    const FT_Byte*      base;        /* address of table in memory       */
-    const FT_Byte*      limit;       /* `base' + sizeof(table) in memory */
-    FT_ValidationLevel  level;       /* validation level                 */
-    FT_Error            error;       /* error returned. 0 means success  */
-
-    ft_jmp_buf          jump_buffer; /* used for exception handling      */
-
-  } FT_ValidatorRec;
-
-
-#define FT_VALIDATOR( x )  ((FT_Validator)( x ))
-
-
-  FT_BASE( void )
-  ft_validator_init( FT_Validator        valid,
-                     const FT_Byte*      base,
-                     const FT_Byte*      limit,
-                     FT_ValidationLevel  level );
-
-  FT_BASE( FT_Int )
-  ft_validator_run( FT_Validator  valid );
-
-  /* Sets the error field in a validator, then calls `longjmp' to return */
-  /* to high-level caller.  Using `setjmp/longjmp' avoids many stupid    */
-  /* error checks within the validation routines.                        */
-  /*                                                                     */
-  FT_BASE( void )
-  ft_validator_error( FT_Validator  valid,
-                      FT_Error      error );
-
-
-  /* Calls ft_validate_error.  Assumes that the `valid' local variable */
-  /* holds a pointer to the current validator object.                  */
-  /*                                                                   */
-#define FT_INVALID( _error )  ft_validator_error( valid, _error )
-
-  /* called when a broken table is detected */
-#define FT_INVALID_TOO_SHORT  FT_INVALID( FT_Err_Invalid_Table )
-
-  /* called when an invalid offset is detected */
-#define FT_INVALID_OFFSET     FT_INVALID( FT_Err_Invalid_Offset )
-
-  /* called when an invalid format/value is detected */
-#define FT_INVALID_FORMAT     FT_INVALID( FT_Err_Invalid_Table )
-
-  /* called when an invalid glyph index is detected */
-#define FT_INVALID_GLYPH_ID   FT_INVALID( FT_Err_Invalid_Glyph_Index )
-
-  /* called when an invalid field value is detected */
-#define FT_INVALID_DATA       FT_INVALID( FT_Err_Invalid_Table )
 
 
   /*************************************************************************/
--- /dev/null
+++ b/include/freetype/internal/ftvalid.h
@@ -1,0 +1,148 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftvalid.h                                                              */
+/*                                                                         */
+/*    FreeType validation support (specification).                         */
+/*                                                                         */
+/*  Copyright 2004 by                                                      */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTVALID_H__
+#define __FTVALID_H__
+
+#include <ft2build.h>
+#include FT_CONFIG_STANDARD_LIBRARY_H   /* for ft_setjmp and ft_longjmp */
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /****                    V A L I D A T I O N                          ****/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /* handle to a validation object */
+  typedef struct FT_ValidatorRec_*  FT_Validator;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* There are three distinct validation levels defined here:              */
+  /*                                                                       */
+  /* FT_VALIDATE_DEFAULT ::                                                */
+  /*   A table that passes this validation level can be used reliably by   */
+  /*   FreeType.  It generally means that all offsets have been checked to */
+  /*   prevent out-of-bound reads, array counts are correct, etc.          */
+  /*                                                                       */
+  /* FT_VALIDATE_TIGHT ::                                                  */
+  /*   A table that passes this validation level can be used reliably and  */
+  /*   doesn't contain invalid data.  For example, a charmap table that    */
+  /*   returns invalid glyph indices will not pass, even though it can     */
+  /*   be used with FreeType in default mode (the library will simply      */
+  /*   return an error later when trying to load the glyph).               */
+  /*                                                                       */
+  /*   It also check that fields that must be a multiple of 2, 4, or 8     */
+  /*   don't have incorrect values, etc.                                   */
+  /*                                                                       */
+  /* FT_VALIDATE_PARANOID ::                                               */
+  /*   Only for font debugging.  Checks that a table follows the           */
+  /*   specification by 100%.  Very few fonts will be able to pass this    */
+  /*   level anyway but it can be useful for certain tools like font       */
+  /*   editors/converters.                                                 */
+  /*                                                                       */
+  typedef enum  FT_ValidationLevel_
+  {
+    FT_VALIDATE_DEFAULT = 0,
+    FT_VALIDATE_TIGHT,
+    FT_VALIDATE_PARANOID
+
+  } FT_ValidationLevel;
+
+
+  /* validator structure */
+  typedef struct  FT_ValidatorRec_
+  {
+    const FT_Byte*      base;        /* address of table in memory       */
+    const FT_Byte*      limit;       /* `base' + sizeof(table) in memory */
+    FT_ValidationLevel  level;       /* validation level                 */
+    FT_Error            error;       /* error returned. 0 means success  */
+
+    ft_jmp_buf          jump_buffer; /* used for exception handling      */
+
+  } FT_ValidatorRec;
+
+
+#define FT_VALIDATOR( x )  ((FT_Validator)( x ))
+
+
+  FT_BASE( void )
+  ft_validator_init( FT_Validator        valid,
+                     const FT_Byte*      base,
+                     const FT_Byte*      limit,
+                     FT_ValidationLevel  level );
+
+  FT_BASE( FT_Int )
+  ft_validator_run( FT_Validator  valid );
+
+  /* Sets the error field in a validator, then calls `longjmp' to return */
+  /* to high-level caller.  Using `setjmp/longjmp' avoids many stupid    */
+  /* error checks within the validation routines.                        */
+  /*                                                                     */
+  FT_BASE( void )
+  ft_validator_error( FT_Validator  valid,
+                      FT_Error      error );
+
+
+  /* Calls ft_validate_error.  Assumes that the `valid' local variable */
+  /* holds a pointer to the current validator object.                  */
+  /*                                                                   */
+  /* Use preprocessor prescan to pass FT_ERR_PREFIX.                   */
+  /*                                                                   */
+#define FT_INVALID( _prefix, _error )  FT_INVALID_( _prefix, _error )
+#define FT_INVALID_( _prefix, _error ) \
+          ft_validator_error( valid, _prefix ## _error )
+
+  /* called when a broken table is detected */
+#define FT_INVALID_TOO_SHORT \
+          FT_INVALID( FT_ERR_PREFIX, Invalid_Table )
+
+  /* called when an invalid offset is detected */
+#define FT_INVALID_OFFSET \
+          FT_INVALID( FT_ERR_PREFIX, Invalid_Offset )
+
+  /* called when an invalid format/value is detected */
+#define FT_INVALID_FORMAT \
+          FT_INVALID( FT_ERR_PREFIX, Invalid_Table )
+
+  /* called when an invalid glyph index is detected */
+#define FT_INVALID_GLYPH_ID \
+          FT_INVALID( FT_ERR_PREFIX, Invalid_Glyph_Index )
+
+  /* called when an invalid field value is detected */
+#define FT_INVALID_DATA \
+          FT_INVALID( FT_ERR_PREFIX, Invalid_Table )
+
+
+FT_END_HEADER
+
+#endif /* __FTVALID_H__ */
+
+
+/* END */
--- a/include/freetype/internal/internal.h
+++ b/include/freetype/internal/internal.h
@@ -35,6 +35,7 @@
 #define FT_INTERNAL_SFNT_H                <freetype/internal/sfnt.h>
 #define FT_INTERNAL_SERVICE_H             <freetype/internal/ftserv.h>
 #define FT_INTERNAL_RFORK_H               <freetype/internal/ftrfork.h>
+#define FT_INTERNAL_VALIDATE_H            <freetype/internal/ftvalid.h>
 
 #define FT_INTERNAL_TRUETYPE_TYPES_H      <freetype/internal/tttypes.h>
 #define FT_INTERNAL_TYPE1_TYPES_H         <freetype/internal/t1types.h>
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -19,6 +19,7 @@
 #include <ft2build.h>
 #include FT_LIST_H
 #include FT_OUTLINE_H
+#include FT_INTERNAL_VALIDATE_H
 #include FT_INTERNAL_OBJECTS_H
 #include FT_INTERNAL_DEBUG_H
 #include FT_INTERNAL_RFORK_H
--- a/src/sfnt/sferrors.h
+++ b/src/sfnt/sferrors.h
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    SFNT error codes (specification only).                               */
 /*                                                                         */
-/*  Copyright 2001 by                                                      */
+/*  Copyright 2001, 2004 by                                                */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -31,6 +31,8 @@
 
 #define FT_ERR_PREFIX  SFNT_Err_
 #define FT_ERR_BASE    FT_Mod_Err_SFNT
+
+#define FT_KEEP_ERR_PREFIX
 
 #include FT_ERRORS_H
 
--- a/src/sfnt/ttcmap.c
+++ b/src/sfnt/ttcmap.c
@@ -18,12 +18,14 @@
 
 #include <ft2build.h>
 #include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
+
+#include "sferrors.h"           /* must come before FT_INTERNAL_VALIDATE_H */
+
+#include FT_INTERNAL_VALIDATE_H
 #include FT_INTERNAL_STREAM_H
 #include "ttload.h"
 #include "ttcmap.h"
 
-#include "sferrors.h"
 
   /*************************************************************************/
   /*                                                                       */
@@ -153,7 +155,7 @@
 
     cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p );
 
-    return FT_Err_Ok;
+    return SFNT_Err_Ok;
   }
 
 
@@ -161,7 +163,7 @@
   const TT_CMap_ClassRec  tt_cmap0_class_rec =
   {
     {
-      sizeof( TT_CMapRec ),
+      sizeof ( TT_CMapRec ),
 
       (FT_CMap_InitFunc)     tt_cmap_init,
       (FT_CMap_DoneFunc)     NULL,
@@ -523,7 +525,7 @@
 
     cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p );
 
-    return FT_Err_Ok;
+    return SFNT_Err_Ok;
   }
 
 
@@ -531,7 +533,7 @@
   const TT_CMap_ClassRec  tt_cmap2_class_rec =
   {
     {
-      sizeof( TT_CMapRec ),
+      sizeof ( TT_CMapRec ),
 
       (FT_CMap_InitFunc)     tt_cmap_init,
       (FT_CMap_DoneFunc)     NULL,
@@ -1098,7 +1100,7 @@
 
     cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p );
 
-    return FT_Err_Ok;
+    return SFNT_Err_Ok;
   }
 
 
@@ -1256,7 +1258,7 @@
 
     cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p );
 
-    return FT_Err_Ok;
+    return SFNT_Err_Ok;
   }
 
 
@@ -1506,7 +1508,8 @@
 
 
     cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p );
-    return FT_Err_Ok;
+
+    return SFNT_Err_Ok;
   }
 
 
@@ -1652,7 +1655,7 @@
 
     cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p );
 
-    return FT_Err_Ok;
+    return SFNT_Err_Ok;
   }
 
 
@@ -1836,7 +1839,7 @@
 
     cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p );
 
-    return FT_Err_Ok;
+    return SFNT_Err_Ok;
   }
 
 
--- a/src/sfnt/ttcmap.h
+++ b/src/sfnt/ttcmap.h
@@ -22,7 +22,7 @@
 
 #include <ft2build.h>
 #include FT_INTERNAL_TRUETYPE_TYPES_H
-#include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_VALIDATE_H
 #include FT_SERVICE_TT_CMAP_H
 
 FT_BEGIN_HEADER
--- a/src/type1/t1afm.c
+++ b/src/type1/t1afm.c
@@ -18,6 +18,7 @@
 
 #include <ft2build.h>
 #include "t1afm.h"
+#include "t1errors.h"
 #include FT_INTERNAL_STREAM_H
 #include FT_INTERNAL_TYPE1_TYPES_H