From cabdc818b656cf7fb1732375709224b51c5a4b2a Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Tue, 17 Jul 2001 12:37:54 +0000 Subject: [PATCH] * include/freetype/internal/psaux.h (PS_Table): Use FT_Offset for `cursor' and `capacity'. * src/psaux/psobjc.c (reallocate_t1_table): Use FT_Long for second parameter. (PS_Table_Add): Use FT_Offset for `new_size'. * src/base/ftsynth.c: Include ftcalc.h unconditionally. --- ChangeLog | 12 +++++ include/freetype/internal/psaux.h | 4 +- src/psaux/psobjs.c | 6 +-- src/sfnt/ttload.c | 90 +++++++++++++++++++++---------- 4 files changed, 78 insertions(+), 34 deletions(-) diff --git a/ChangeLog b/ChangeLog index 769445c4e..8043121a9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2001-07-17 Werner Lemberg + + * include/freetype/internal/psaux.h (PS_Table): Use FT_Offset for + `cursor' and `capacity'. + * src/psaux/psobjc.c (reallocate_t1_table): Use FT_Long for second + parameter. + (PS_Table_Add): Use FT_Offset for `new_size'. + +2001-07-13 Werner Lemberg + + * src/base/ftsynth.c: Include ftcalc.h unconditionally. + 2001-07-07 David Turner * src/truetype/ttgload.c, src/truetype/ttinterp.c, src/pcf/pcfread: diff --git a/include/freetype/internal/psaux.h b/include/freetype/internal/psaux.h index cfc0888f0..1911829ac 100644 --- a/include/freetype/internal/psaux.h +++ b/include/freetype/internal/psaux.h @@ -115,8 +115,8 @@ FT_BEGIN_HEADER struct PS_Table_ { FT_Byte* block; /* current memory block */ - FT_Int cursor; /* current cursor in memory block */ - FT_Int capacity; /* current size of memory block */ + FT_Offset cursor; /* current cursor in memory block */ + FT_Offset capacity; /* current size of memory block */ FT_Long init; FT_Int max_elems; diff --git a/src/psaux/psobjs.c b/src/psaux/psobjs.c index ac9057d14..e38c10421 100644 --- a/src/psaux/psobjs.c +++ b/src/psaux/psobjs.c @@ -101,7 +101,7 @@ static FT_Error reallocate_t1_table( PS_Table* table, - FT_Int new_size ) + FT_Long new_size ) { FT_Memory memory = table->memory; FT_Byte* old_base = table->block; @@ -163,8 +163,8 @@ /* grow the base block if needed */ if ( table->cursor + length > table->capacity ) { - FT_Error error; - FT_Int new_size = table->capacity; + FT_Error error; + FT_Offset new_size = table->capacity; while ( new_size < table->cursor + length ) diff --git a/src/sfnt/ttload.c b/src/sfnt/ttload.c index ae72f37a8..ab5534233 100644 --- a/src/sfnt/ttload.c +++ b/src/sfnt/ttload.c @@ -566,9 +566,15 @@ #undef FT_STRUCTURE #define FT_STRUCTURE TT_MaxProfile - FT_FRAME_START( 32 ), - FT_FRAME_ULONG ( version ), + FT_FRAME_START( 6 ), + FT_FRAME_LONG ( version ), FT_FRAME_USHORT( numGlyphs ), + FT_FRAME_END + }; + + const FT_Frame_Field maxp_fields_extra[] = + { + FT_FRAME_START( 26 ), FT_FRAME_USHORT( maxPoints ), FT_FRAME_USHORT( maxContours ), FT_FRAME_USHORT( maxCompositePoints ), @@ -582,7 +588,8 @@ FT_FRAME_USHORT( maxSizeOfInstructions ), FT_FRAME_USHORT( maxComponentElements ), FT_FRAME_USHORT( maxComponentDepth ), - FT_FRAME_END }; + FT_FRAME_END + }; FT_TRACE2(( "Load_TT_MaxProfile: %08p\n", face )); @@ -594,37 +601,57 @@ if ( READ_Fields( maxp_fields, maxProfile ) ) goto Exit; - /* XXX: an adjustment that is necessary to load certain */ - /* broken fonts like `Keystrokes MT' :-( */ - /* */ - /* We allocate 64 function entries by default when */ - /* the maxFunctionDefs field is null. */ + maxProfile->maxPoints = 0; + maxProfile->maxContours = 0; + maxProfile->maxCompositePoints = 0; + maxProfile->maxCompositeContours = 0; + maxProfile->maxZones = 0; + maxProfile->maxTwilightPoints = 0; + maxProfile->maxStorage = 0; + maxProfile->maxFunctionDefs = 0; + maxProfile->maxInstructionDefs = 0; + maxProfile->maxStackElements = 0; + maxProfile->maxSizeOfInstructions = 0; + maxProfile->maxComponentElements = 0; + maxProfile->maxComponentDepth = 0; - if ( maxProfile->maxFunctionDefs == 0 ) - maxProfile->maxFunctionDefs = 64; + if ( maxProfile->version >= 0x10000L ) + { + if ( READ_Fields( maxp_fields_extra, maxProfile ) ) + goto Exit; - face->root.num_glyphs = maxProfile->numGlyphs; + /* XXX: an adjustment that is necessary to load certain */ + /* broken fonts like `Keystrokes MT' :-( */ + /* */ + /* We allocate 64 function entries by default when */ + /* the maxFunctionDefs field is null. */ - face->root.internal->max_points = - (FT_UShort)MAX( maxProfile->maxCompositePoints, - maxProfile->maxPoints ); + if ( maxProfile->maxFunctionDefs == 0 ) + maxProfile->maxFunctionDefs = 64; - face->root.internal->max_contours = - (FT_Short)MAX( maxProfile->maxCompositeContours, - maxProfile->maxContours ); + face->root.num_glyphs = maxProfile->numGlyphs; - face->max_components = (FT_ULong)maxProfile->maxComponentElements + - maxProfile->maxComponentDepth; + face->root.internal->max_points = + (FT_UShort)MAX( maxProfile->maxCompositePoints, + maxProfile->maxPoints ); - /* XXX: some fonts have maxComponents set to 0; we will */ - /* then use 16 of them by default. */ - if ( face->max_components == 0 ) - face->max_components = 16; + face->root.internal->max_contours = + (FT_Short)MAX( maxProfile->maxCompositeContours, + maxProfile->maxContours ); - /* We also increase maxPoints and maxContours in order to support */ - /* some broken fonts. */ - face->root.internal->max_points += 8; - face->root.internal->max_contours += 4; + face->max_components = (FT_ULong)maxProfile->maxComponentElements + + maxProfile->maxComponentDepth; + + /* XXX: some fonts have maxComponents set to 0; we will */ + /* then use 16 of them by default. */ + if ( face->max_components == 0 ) + face->max_components = 16; + + /* We also increase maxPoints and maxContours in order to support */ + /* some broken fonts. */ + face->root.internal->max_points += 8; + face->root.internal->max_contours += 4; + } FT_TRACE2(( "MAXP loaded.\n" )); @@ -1211,11 +1238,11 @@ FT_Error error; TT_OS2* os2; + const FT_Frame_Field os2_fields[] = + { #undef FT_STRUCTURE #define FT_STRUCTURE TT_OS2 - const FT_Frame_Field os2_fields[] = - { FT_FRAME_START( 78 ), FT_FRAME_USHORT( version ), FT_FRAME_SHORT ( xAvgCharWidth ), @@ -1304,6 +1331,11 @@ os2->ulCodePageRange1 = 0; os2->ulCodePageRange2 = 0; + os2->sxHeight = 0; + os2->sCapHeight = 0; + os2->usDefaultChar = 0; + os2->usBreakChar = 0; + os2->usMaxContext = 0; if ( os2->version >= 0x0001 ) {