diff --git a/ChangeLog b/ChangeLog index 5829467ed..488ce6eae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,35 @@ +2004-09-04 Werner Lemberg + + * 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 * src/base/ftdebug.c (ft_debug_init): Highest debug level is 7, diff --git a/include/freetype/fterrors.h b/include/freetype/fterrors.h index 1def4f9ce..6a2bed02a 100644 --- 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 _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__ */ diff --git a/include/freetype/fttypes.h b/include/freetype/fttypes.h index b2da13e57..e47f00266 100644 --- 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, */ diff --git a/include/freetype/internal/ftobjs.h b/include/freetype/internal/ftobjs.h index 3a28119af..805c3aeb2 100644 --- a/include/freetype/internal/ftobjs.h +++ b/include/freetype/internal/ftobjs.h @@ -27,7 +27,6 @@ #define __FTOBJS_H__ #include -#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 @@ -81,111 +80,6 @@ FT_BEGIN_HEADER #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 ) - - /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ diff --git a/include/freetype/internal/ftvalid.h b/include/freetype/internal/ftvalid.h new file mode 100644 index 000000000..4ee204d27 --- /dev/null +++ b/include/freetype/internal/ftvalid.h @@ -0,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 +#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 */ diff --git a/include/freetype/internal/internal.h b/include/freetype/internal/internal.h index 1e5ac44d5..27d5dc585 100644 --- a/include/freetype/internal/internal.h +++ b/include/freetype/internal/internal.h @@ -35,6 +35,7 @@ #define FT_INTERNAL_SFNT_H #define FT_INTERNAL_SERVICE_H #define FT_INTERNAL_RFORK_H +#define FT_INTERNAL_VALIDATE_H #define FT_INTERNAL_TRUETYPE_TYPES_H #define FT_INTERNAL_TYPE1_TYPES_H diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index b18e8ed43..aa2584449 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -19,6 +19,7 @@ #include #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 diff --git a/src/sfnt/sferrors.h b/src/sfnt/sferrors.h index fd2736b6c..27f90de28 100644 --- 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, */ @@ -32,6 +32,8 @@ #define FT_ERR_PREFIX SFNT_Err_ #define FT_ERR_BASE FT_Mod_Err_SFNT +#define FT_KEEP_ERR_PREFIX + #include FT_ERRORS_H #endif /* __SFERRORS_H__ */ diff --git a/src/sfnt/ttcmap.c b/src/sfnt/ttcmap.c index 752c8ad8c..71f216c12 100644 --- a/src/sfnt/ttcmap.c +++ b/src/sfnt/ttcmap.c @@ -18,12 +18,14 @@ #include #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; } diff --git a/src/sfnt/ttcmap.h b/src/sfnt/ttcmap.h index dd27f1e44..8ba60178c 100644 --- a/src/sfnt/ttcmap.h +++ b/src/sfnt/ttcmap.h @@ -22,7 +22,7 @@ #include #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 diff --git a/src/type1/t1afm.c b/src/type1/t1afm.c index c56ba653b..bef8251e1 100644 --- a/src/type1/t1afm.c +++ b/src/type1/t1afm.c @@ -18,6 +18,7 @@ #include #include "t1afm.h" +#include "t1errors.h" #include FT_INTERNAL_STREAM_H #include FT_INTERNAL_TYPE1_TYPES_H