diff --git a/ChangeLog b/ChangeLog index d9b6f1a2b..c1d0838af 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,15 +1,75 @@ +2004-05-04 Steve Hartwell + + * src/truetype/ttobjs.c (tt_driver_done): Fix typo. + +2004-05-04 Werner Lemberg + + * src/bdf/bdfdrivr.c (BDF_Face_Done, BDF_Face_Init, + BDF_Set_Pixel_Size): Don't use BDF_XXX but FT_XXX arguments which + are typecast to the proper BDF_XXX types within the function. + Update code accordingly. + Use FT_CALLBACK_DEF throughout. + (BDF_Set_Point_Size): New wrapper function. + (bdf_driver_class): Remove casts. + + * src/cff/cffdrivr.c (Get_Kerning, Load_Glyph, cff_get_interface): + Don't use CFF_XXX but FT_XXX arguments which are typecast to the + proper CFF_XXX types within the function. + Update code accordingly. + Use FT_CALLBACK_DEF throughout. + (cff_driver_class): Remove casts. + + * src/cff/cffobjs.h, src/cff/cffobjs.c (cff_size_done, + cff_size_init, cff_size_reset, cff_slot_done, cff_slot_init, + cff_face_init, cff_face_done, cff_driver_init, cff_driver_done): + Don't use CFF_XXX but FT_XXX arguments which are typecast to the + proper CFF_XXX types within the function. + Update code accordingly. + (cff_point_size_reset): New wrapper function. + + * src/cid/cidobjs.h, src/cid/cidobjs.c (cid_slot_done, + cid_slot_init, cid_size_done, cid_size_init, cid_size_reset, + cid_face_done, cid_face_init, cid_driver_init, cid_driver_done): + Don't use CID_XXX but FT_XXX arguments which are typecast to the + proper CID_XXX types within the function. + Update code accordingly. + (cid_point_size_reset): New wrapper function. + + * src/cid/cidgload.c, src/cid/cidgload.h (cid_slot_load_glyph): + Don't use CID_XXX but FT_XXX arguments which are typecast to the + proper CID_XXX types within the function. + Update code accordingly. + + * src/cid/cidriver.c (cid_get_interface): + Don't use CID_XXX but FT_XXX arguments which are typecast to the + proper CID_XXX types within the function. + Update code accordingly. + Use FT_CALLBACK_DEF. + (t1cid_driver_class): Remove casts. + + * src/truetype/ttdriver.c (tt_get_interface): Use FT_CALLBACK_DEF. + * src/truetype/ttgxvar.c (ft_var_load_avar): Don't free non-local + variables (this is done later). + (ft_var_load_avar): Fix call to FT_FRAME_ENTER. + (TT_Get_MM_Var): Fix size for `fvar_fields'. + (TT_Vary_Get_Glyph_Deltas): Handle deallocation of local variables + correctly. + + * src/base/ftdbgmem.c (ft_mem_debug_realloc): Don't abort if + current size is zero. + 2004-05-03 Steve Hartwell * src/truetype/ttobjs.h, src/truetype/ttobjs.c (tt_face_init, tt_face_done, tt_size_init, tt_size_done, tt_driver_init, tt_driver_done): Don't use TT_XXX but FT_XXX arguments which are - typecast to the proper TT_XXX within the function. + typecast to the proper TT_XXX types within the function. Update code accordingly. * src/truetype/ttdriver.c (Get_Kerning, Set_Char_Sizes, Set_Pixel_Sizes, Load_Glyph, tt_get_interface): Don't use TT_XXX but - FT_XXX arguments which are typecast to the proper TT_XXX within the - function. + FT_XXX arguments which are typecast to the proper TT_XXX types + within the function. Update code accordingly. (tt_driver_class): Remove casts. @@ -1402,7 +1462,7 @@ (FT_Load_Glyph): Update computation of linearHoriAdvance and linearVertAdvance. - * src/true/type/ttinterp.c (Update_Max): Use FT_REALLOC. + * src/truetype/ttinterp.c (Update_Max): Use FT_REALLOC. 2003-11-22 David Turner diff --git a/src/base/ftdbgmem.c b/src/base/ftdbgmem.c index 152220c60..05226e546 100644 --- a/src/base/ftdbgmem.c +++ b/src/base/ftdbgmem.c @@ -540,10 +540,15 @@ FT_Long line_no = table->line_no; + /* the following is valid according to ANSI C */ +#if 0 if ( block == NULL || cur_size == 0 ) ft_mem_debug_panic( "trying to reallocate NULL in (%s:%ld)", - file_name, line_no ); + file_name, line_no ); +#endif + /* while the following is allowed in ANSI C also, we abort since */ + /* such code shouldn't be in FreeType... */ if ( new_size <= 0 ) ft_mem_debug_panic( "trying to reallocate %p to size 0 (current is %ld) in (%s:%ld)", diff --git a/src/bdf/bdfdrivr.c b/src/bdf/bdfdrivr.c index 2e8f93ca6..e02a571ba 100644 --- a/src/bdf/bdfdrivr.c +++ b/src/bdf/bdfdrivr.c @@ -284,9 +284,10 @@ THE SOFTWARE. } - FT_CALLBACK_DEF( FT_Error ) - BDF_Face_Done( BDF_Face face ) + FT_CALLBACK_DEF( void ) + BDF_Face_Done( FT_Face bdfface ) /* BDF_Face */ { + BDF_Face face = (BDF_Face)bdfface; FT_Memory memory = FT_FACE_MEMORY( face ); @@ -296,26 +297,25 @@ THE SOFTWARE. FT_FREE( face->charset_encoding ); FT_FREE( face->charset_registry ); - FT_FREE( face->root.family_name ); + FT_FREE( bdfface->family_name ); - FT_FREE( face->root.available_sizes ); + FT_FREE( bdfface->available_sizes ); FT_FREE( face->bdffont ); FT_TRACE4(( "BDF_Face_Done: done face\n" )); - - return BDF_Err_Ok; } FT_CALLBACK_DEF( FT_Error ) BDF_Face_Init( FT_Stream stream, - BDF_Face face, + FT_Face bdfface, /* BDF_Face */ FT_Int face_index, FT_Int num_params, FT_Parameter* params ) { FT_Error error = BDF_Err_Ok; + BDF_Face face = (BDF_Face)bdfface; FT_Memory memory = FT_FACE_MEMORY( face ); bdf_font_t* font; @@ -346,7 +346,6 @@ THE SOFTWARE. /* we have a bdf font: let's construct the face object */ face->bdffont = font; { - FT_Face root = FT_FACE( face ); bdf_property_t* prop = NULL; @@ -357,18 +356,18 @@ THE SOFTWARE. font->unencoded_size, font->unencoded_used )); - root->num_faces = 1; - root->face_index = 0; - root->face_flags = FT_FACE_FLAG_FIXED_SIZES | - FT_FACE_FLAG_HORIZONTAL | - FT_FACE_FLAG_FAST_GLYPHS; + bdfface->num_faces = 1; + bdfface->face_index = 0; + bdfface->face_flags = FT_FACE_FLAG_FIXED_SIZES | + FT_FACE_FLAG_HORIZONTAL | + FT_FACE_FLAG_FAST_GLYPHS; prop = bdf_get_font_property( font, "SPACING" ); if ( prop && prop->format == BDF_ATOM && prop->value.atom && ( *(prop->value.atom) == 'M' || *(prop->value.atom) == 'm' || *(prop->value.atom) == 'C' || *(prop->value.atom) == 'c' ) ) - root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH; + bdfface->face_flags |= FT_FACE_FLAG_FIXED_WIDTH; /* FZ XXX: TO DO: FT_FACE_FLAGS_VERTICAL */ /* FZ XXX: I need a font to implement this */ @@ -379,24 +378,24 @@ THE SOFTWARE. int l = ft_strlen( prop->value.atom ) + 1; - if ( FT_NEW_ARRAY( root->family_name, l ) ) + if ( FT_NEW_ARRAY( bdfface->family_name, l ) ) goto Exit; - ft_strcpy( root->family_name, prop->value.atom ); + ft_strcpy( bdfface->family_name, prop->value.atom ); } else - root->family_name = 0; + bdfface->family_name = 0; if ( ( error = bdf_interpret_style( face ) ) != 0 ) goto Exit; - root->num_glyphs = font->glyphs_size; /* unencoded included */ + bdfface->num_glyphs = font->glyphs_size; /* unencoded included */ - root->num_fixed_sizes = 1; - if ( FT_NEW_ARRAY( root->available_sizes, 1 ) ) + bdfface->num_fixed_sizes = 1; + if ( FT_NEW_ARRAY( bdfface->available_sizes, 1 ) ) goto Exit; { - FT_Bitmap_Size* bsize = root->available_sizes; + FT_Bitmap_Size* bsize = bdfface->available_sizes; FT_Short resolution_x = 0, resolution_y = 0; @@ -521,8 +520,8 @@ THE SOFTWARE. #if 0 /* Select default charmap */ - if (root->num_charmaps) - root->charmap = root->charmaps[0]; + if ( bdfface->num_charmaps ) + bdfface->charmap = bdfface->charmaps[0]; #endif } @@ -544,27 +543,32 @@ THE SOFTWARE. error = FT_CMap_New( &bdf_cmap_class, NULL, &charmap, NULL ); /* Select default charmap */ - if (root->num_charmaps) - root->charmap = root->charmaps[0]; + if ( bdfface->num_charmaps ) + bdfface->charmap = bdfface->charmaps[0]; } } - } + } Exit: return error; Fail: - BDF_Face_Done( face ); + BDF_Face_Done( bdfface ); return BDF_Err_Unknown_File_Format; } - static FT_Error - BDF_Set_Pixel_Size( FT_Size size ) + FT_CALLBACK_DEF( FT_Error ) + BDF_Set_Pixel_Size( FT_Size size, + FT_UInt char_width, + FT_UInt char_height ) { BDF_Face face = (BDF_Face)FT_SIZE_FACE( size ); FT_Face root = FT_FACE( face ); + FT_UNUSED( char_width ); + FT_UNUSED( char_height ); + FT_TRACE4(( "rec %d - pres %d\n", size->metrics.y_ppem, root->available_sizes->y_ppem )); @@ -584,7 +588,23 @@ THE SOFTWARE. } - static FT_Error + FT_CALLBACK_DEF( FT_Error ) + BDF_Set_Point_Size( FT_Size size, + FT_F26Dot6 char_width, + FT_F26Dot6 char_height, + FT_UInt horz_resolution, + FT_UInt vert_resolution ) + { + FT_UNUSED( char_width ); + FT_UNUSED( char_height ); + FT_UNUSED( horz_resolution ); + FT_UNUSED( vert_resolution ); + + return BDF_Set_Pixel_Size( size, 0, 0 ); + } + + + FT_CALLBACK_DEF( FT_Error ) BDF_Glyph_Load( FT_GlyphSlot slot, FT_Size size, FT_UInt glyph_index, @@ -817,7 +837,7 @@ THE SOFTWARE. }; - static FT_Module_Interface + FT_CALLBACK_DEF( FT_Module_Interface ) bdf_driver_requester( FT_Module module, const char* name ) { @@ -851,21 +871,21 @@ THE SOFTWARE. sizeof ( FT_SizeRec ), sizeof ( FT_GlyphSlotRec ), - (FT_Face_InitFunc) BDF_Face_Init, - (FT_Face_DoneFunc) BDF_Face_Done, - (FT_Size_InitFunc) 0, - (FT_Size_DoneFunc) 0, - (FT_Slot_InitFunc) 0, - (FT_Slot_DoneFunc) 0, + BDF_Face_Init, + BDF_Face_Done, + 0, /* FT_Size_InitFunc */ + 0, /* FT_Size_DoneFunc */ + 0, /* FT_Slot_InitFunc */ + 0, /* FT_Slot_DoneFunc */ - (FT_Size_ResetPointsFunc) BDF_Set_Pixel_Size, - (FT_Size_ResetPixelsFunc) BDF_Set_Pixel_Size, + BDF_Set_Point_Size, + BDF_Set_Pixel_Size, - (FT_Slot_LoadFunc) BDF_Glyph_Load, + BDF_Glyph_Load, - (FT_Face_GetKerningFunc) 0, - (FT_Face_AttachFunc) 0, - (FT_Face_GetAdvancesFunc) 0 + 0, /* FT_Face_GetKerningFunc */ + 0, /* FT_Face_AttachFunc */ + 0, /* FT_Face_GetAdvancesFunc */ }; diff --git a/src/cff/cffdrivr.c b/src/cff/cffdrivr.c index 60ee90ae3..73db1909c 100644 --- a/src/cff/cffdrivr.c +++ b/src/cff/cffdrivr.c @@ -96,12 +96,13 @@ /* */ /* They can be implemented by format-specific interfaces. */ /* */ - static FT_Error - Get_Kerning( TT_Face face, + FT_CALLBACK_DEF( FT_Error ) + Get_Kerning( FT_Face ttface, /* TT_Face */ FT_UInt left_glyph, FT_UInt right_glyph, FT_Vector* kerning ) { + TT_Face face = (TT_Face)ttface; TT_Kern0_Pair pair; @@ -178,13 +179,15 @@ /* */ /* FreeType error code. 0 means success. */ /* */ - static FT_Error - Load_Glyph( CFF_GlyphSlot slot, - CFF_Size size, - FT_UShort glyph_index, - FT_Int32 load_flags ) + FT_CALLBACK_DEF( FT_Error ) + Load_Glyph( FT_GlyphSlot cffslot, /* CFF_GlyphSlot */ + FT_Size cffsize, /* CFF_Size */ + FT_UInt glyph_index, + FT_Int32 load_flags ) { FT_Error error; + CFF_GlyphSlot slot = (CFF_GlyphSlot)cffslot; + CFF_Size size = (CFF_Size)cffsize; if ( !slot ) @@ -409,8 +412,8 @@ }; - static FT_Module_Interface - cff_get_interface( CFF_Driver driver, + FT_CALLBACK_DEF( FT_Module_Interface ) + cff_get_interface( FT_Module driver, /* CFF_Driver */ const char* module_interface ) { FT_Module sfnt; @@ -422,7 +425,7 @@ return result; /* we pass our request to the `sfnt' module */ - sfnt = FT_Get_Module( driver->root.root.library, "sfnt" ); + sfnt = FT_Get_Module( driver->library, "sfnt" ); return sfnt ? sfnt->clazz->get_interface( sfnt, module_interface ) : 0; } @@ -446,9 +449,9 @@ 0, /* module-specific interface */ - (FT_Module_Constructor)cff_driver_init, - (FT_Module_Destructor) cff_driver_done, - (FT_Module_Requester) cff_get_interface, + cff_driver_init, + cff_driver_done, + cff_get_interface, }, /* now the specific driver fields */ @@ -456,21 +459,21 @@ sizeof( CFF_SizeRec ), sizeof( CFF_GlyphSlotRec ), - (FT_Face_InitFunc) cff_face_init, - (FT_Face_DoneFunc) cff_face_done, - (FT_Size_InitFunc) cff_size_init, - (FT_Size_DoneFunc) cff_size_done, - (FT_Slot_InitFunc) cff_slot_init, - (FT_Slot_DoneFunc) cff_slot_done, + cff_face_init, + cff_face_done, + cff_size_init, + cff_size_done, + cff_slot_init, + cff_slot_done, - (FT_Size_ResetPointsFunc)cff_size_reset, - (FT_Size_ResetPixelsFunc)cff_size_reset, + cff_point_size_reset, + cff_size_reset, - (FT_Slot_LoadFunc) Load_Glyph, + Load_Glyph, - (FT_Face_GetKerningFunc) Get_Kerning, - (FT_Face_AttachFunc) 0, - (FT_Face_GetAdvancesFunc)0, + Get_Kerning, + 0, /* FT_Face_AttachFunc */ + 0 /* FT_Face_GetAdvancesFunc */ }; diff --git a/src/cff/cffload.c b/src/cff/cffload.c index 44f3254bd..350e01f3f 100644 --- a/src/cff/cffload.c +++ b/src/cff/cffload.c @@ -1095,7 +1095,7 @@ idx->stream = stream; if ( !FT_READ_USHORT( count ) && - count > 0 ) + count > 0 ) { FT_Byte* p; FT_Byte offsize; diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c index 4d23b9a79..5860d215d 100644 --- a/src/cff/cffobjs.c +++ b/src/cff/cffobjs.c @@ -135,8 +135,11 @@ FT_LOCAL_DEF( void ) - cff_size_done( CFF_Size size ) + cff_size_done( FT_Size cffsize ) /* CFF_Size */ { + CFF_Size size = (CFF_Size)cffsize; + + if ( size->root.internal ) { PSH_Globals_Funcs funcs; @@ -152,8 +155,9 @@ FT_LOCAL_DEF( FT_Error ) - cff_size_init( CFF_Size size ) + cff_size_init( FT_Size cffsize ) /* CFF_Size */ { + CFF_Size size = (CFF_Size)cffsize; FT_Error error = CFF_Err_Ok; PSH_Globals_Funcs funcs = cff_size_get_globals_funcs( size ); @@ -225,12 +229,18 @@ FT_LOCAL_DEF( FT_Error ) - cff_size_reset( CFF_Size size ) + cff_size_reset( FT_Size cffsize, /* CFF_Size */ + FT_UInt char_width, + FT_UInt char_height ) { + CFF_Size size = (CFF_Size)cffsize; PSH_Globals_Funcs funcs = cff_size_get_globals_funcs( size ); FT_Error error = CFF_Err_Ok; FT_Face face = size->root.face; + FT_UNUSED( char_width ); + FT_UNUSED( char_height ); + if ( funcs ) error = funcs->set_scale( (PSH_Globals)size->root.internal, @@ -257,6 +267,22 @@ } + FT_LOCAL_DEF( FT_Error ) + cff_point_size_reset( FT_Size cffsize, + FT_F26Dot6 char_width, + FT_F26Dot6 char_height, + FT_UInt horz_resolution, + FT_UInt vert_resolution ) + { + FT_UNUSED( char_width ); + FT_UNUSED( char_height ); + FT_UNUSED( horz_resolution ); + FT_UNUSED( vert_resolution ); + + return cff_size_reset( cffsize, 0, 0 ); + } + + /*************************************************************************/ /* */ /* SLOT FUNCTIONS */ @@ -264,15 +290,18 @@ /*************************************************************************/ FT_LOCAL_DEF( void ) - cff_slot_done( CFF_GlyphSlot slot ) + cff_slot_done( FT_GlyphSlot cffslot ) /* CFF_GlyphSlot */ { + CFF_GlyphSlot slot = (CFF_GlyphSlot)cffslot; + slot->root.internal->glyph_hints = 0; } FT_LOCAL_DEF( FT_Error ) - cff_slot_init( CFF_GlyphSlot slot ) + cff_slot_init( FT_GlyphSlot cffslot ) /* CFF_GlyphSlot */ { + CFF_GlyphSlot slot = (CFF_GlyphSlot)cffslot; CFF_Face face = (CFF_Face)slot->root.face; CFF_Font font = (CFF_FontRec *)face->extra.data; PSHinter_Service pshinter = (PSHinter_Service)font->pshinter; @@ -328,11 +357,12 @@ FT_LOCAL_DEF( FT_Error ) cff_face_init( FT_Stream stream, - CFF_Face face, + FT_Face cffface, /* CFF_Face */ FT_Int face_index, FT_Int num_params, FT_Parameter* params ) { + CFF_Face face = (CFF_Face)cffface; FT_Error error; SFNT_Service sfnt; FT_Service_PsCMaps psnames; @@ -708,8 +738,9 @@ FT_LOCAL_DEF( void ) - cff_face_done( CFF_Face face ) + cff_face_done( FT_Face cffface ) /* CFF_Face */ { + CFF_Face face = (CFF_Face)cffface; FT_Memory memory = face->root.memory; SFNT_Service sfnt = (SFNT_Service)face->sfnt; @@ -731,18 +762,18 @@ FT_LOCAL_DEF( FT_Error ) - cff_driver_init( CFF_Driver driver ) + cff_driver_init( FT_Module module ) { - FT_UNUSED( driver ); + FT_UNUSED( module ); return CFF_Err_Ok; } FT_LOCAL_DEF( void ) - cff_driver_done( CFF_Driver driver ) + cff_driver_done( FT_Module module ) { - FT_UNUSED( driver ); + FT_UNUSED( module ); } diff --git a/src/cff/cffobjs.h b/src/cff/cffobjs.h index f02a5d748..0a5c969c6 100644 --- a/src/cff/cffobjs.h +++ b/src/cff/cffobjs.h @@ -113,19 +113,28 @@ FT_BEGIN_HEADER FT_LOCAL( FT_Error ) - cff_size_init( CFF_Size size ); + cff_size_init( FT_Size size ); /* CFF_Size */ FT_LOCAL( void ) - cff_size_done( CFF_Size size ); + cff_size_done( FT_Size size ); /* CFF_Size */ FT_LOCAL( FT_Error ) - cff_size_reset( CFF_Size size ); + cff_size_reset( FT_Size size, /* CFF_Size */ + FT_UInt char_width, + FT_UInt char_height ); + + FT_LOCAL( FT_Error ) + cff_point_size_reset( FT_Size cffsize, + FT_F26Dot6 char_width, + FT_F26Dot6 char_height, + FT_UInt horz_resolution, + FT_UInt vert_resolution ); FT_LOCAL( void ) - cff_slot_done( CFF_GlyphSlot slot ); + cff_slot_done( FT_GlyphSlot slot ); /* CFF_GlyphSlot */ FT_LOCAL( FT_Error ) - cff_slot_init( CFF_GlyphSlot slot ); + cff_slot_init( FT_GlyphSlot slot ); /* CFF_GlyphSlot */ /*************************************************************************/ @@ -134,13 +143,13 @@ FT_BEGIN_HEADER /* */ FT_LOCAL( FT_Error ) cff_face_init( FT_Stream stream, - CFF_Face face, + FT_Face face, /* CFF_Face */ FT_Int face_index, FT_Int num_params, FT_Parameter* params ); FT_LOCAL( void ) - cff_face_done( CFF_Face face ); + cff_face_done( FT_Face face ); /* CFF_Face */ /*************************************************************************/ @@ -148,10 +157,10 @@ FT_BEGIN_HEADER /* Driver functions */ /* */ FT_LOCAL( FT_Error ) - cff_driver_init( CFF_Driver driver ); + cff_driver_init( FT_Module module ); FT_LOCAL( void ) - cff_driver_done( CFF_Driver driver ); + cff_driver_done( FT_Module module ); FT_END_HEADER diff --git a/src/cid/cidgload.c b/src/cid/cidgload.c index 3717eeb9e..cbd0865d3 100644 --- a/src/cid/cidgload.c +++ b/src/cid/cidgload.c @@ -269,14 +269,16 @@ FT_LOCAL_DEF( FT_Error ) - cid_slot_load_glyph( CID_GlyphSlot glyph, - CID_Size size, - FT_Int glyph_index, - FT_Int32 load_flags ) + cid_slot_load_glyph( FT_GlyphSlot cidglyph, /* CID_GlyphSlot */ + FT_Size cidsize, /* CID_Size */ + FT_UInt glyph_index, + FT_Int32 load_flags ) { + CID_GlyphSlot glyph = (CID_GlyphSlot)cidglyph; + CID_Size size = (CID_Size)cidsize; FT_Error error; T1_DecoderRec decoder; - CID_Face face = (CID_Face)glyph->root.face; + CID_Face face = (CID_Face)cidglyph->face; FT_Bool hinting; PSAux_Service psaux = (PSAux_Service)face->psaux; @@ -287,22 +289,22 @@ if ( load_flags & FT_LOAD_NO_RECURSE ) load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING; - glyph->x_scale = size->root.metrics.x_scale; - glyph->y_scale = size->root.metrics.y_scale; + glyph->x_scale = cidsize->metrics.x_scale; + glyph->y_scale = cidsize->metrics.y_scale; - glyph->root.outline.n_points = 0; - glyph->root.outline.n_contours = 0; + cidglyph->outline.n_points = 0; + cidglyph->outline.n_contours = 0; hinting = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 && ( load_flags & FT_LOAD_NO_HINTING ) == 0 ); - glyph->root.format = FT_GLYPH_FORMAT_OUTLINE; + cidglyph->format = FT_GLYPH_FORMAT_OUTLINE; { error = psaux->t1_decoder_funcs->init( &decoder, - (FT_Face)face, - (FT_Size)size, - (FT_GlyphSlot)glyph, + cidglyph->face, + cidsize, + cidglyph, 0, /* glyph names -- XXX */ 0, /* blend == 0 */ hinting, @@ -327,18 +329,18 @@ /* bearing the yMax */ if ( !error ) { - glyph->root.outline.flags &= FT_OUTLINE_OWNER; - glyph->root.outline.flags |= FT_OUTLINE_REVERSE_FILL; + cidglyph->outline.flags &= FT_OUTLINE_OWNER; + cidglyph->outline.flags |= FT_OUTLINE_REVERSE_FILL; /* for composite glyphs, return only left side bearing and */ /* advance width */ if ( load_flags & FT_LOAD_NO_RECURSE ) { - FT_Slot_Internal internal = glyph->root.internal; + FT_Slot_Internal internal = cidglyph->internal; - glyph->root.metrics.horiBearingX = decoder.builder.left_bearing.x; - glyph->root.metrics.horiAdvance = decoder.builder.advance.x; + cidglyph->metrics.horiBearingX = decoder.builder.left_bearing.x; + cidglyph->metrics.horiAdvance = decoder.builder.advance.x; internal->glyph_matrix = font_matrix; internal->glyph_delta = font_offset; @@ -347,30 +349,30 @@ else { FT_BBox cbox; - FT_Glyph_Metrics* metrics = &glyph->root.metrics; + FT_Glyph_Metrics* metrics = &cidglyph->metrics; FT_Vector advance; /* copy the _unscaled_ advance width */ - metrics->horiAdvance = decoder.builder.advance.x; - glyph->root.linearHoriAdvance = decoder.builder.advance.x; - glyph->root.internal->glyph_transformed = 0; + metrics->horiAdvance = decoder.builder.advance.x; + cidglyph->linearHoriAdvance = decoder.builder.advance.x; + cidglyph->internal->glyph_transformed = 0; /* make up vertical metrics */ metrics->vertBearingX = 0; metrics->vertBearingY = 0; metrics->vertAdvance = 0; - glyph->root.linearVertAdvance = 0; - glyph->root.format = FT_GLYPH_FORMAT_OUTLINE; + cidglyph->linearVertAdvance = 0; + cidglyph->format = FT_GLYPH_FORMAT_OUTLINE; - if ( size && size->root.metrics.y_ppem < 24 ) - glyph->root.outline.flags |= FT_OUTLINE_HIGH_PRECISION; + if ( size && cidsize->metrics.y_ppem < 24 ) + cidglyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION; /* apply the font matrix */ - FT_Outline_Transform( &glyph->root.outline, &font_matrix ); + FT_Outline_Transform( &cidglyph->outline, &font_matrix ); - FT_Outline_Translate( &glyph->root.outline, + FT_Outline_Translate( &cidglyph->outline, font_offset.x, font_offset.y ); @@ -401,7 +403,7 @@ vec->y = FT_MulFix( vec->y, y_scale ); } - FT_Outline_Get_CBox( &glyph->root.outline, &cbox ); + FT_Outline_Get_CBox( &cidglyph->outline, &cbox ); /* Then scale the metrics */ metrics->horiAdvance = FT_MulFix( metrics->horiAdvance, x_scale ); @@ -421,7 +423,7 @@ } /* compute the other metrics */ - FT_Outline_Get_CBox( &glyph->root.outline, &cbox ); + FT_Outline_Get_CBox( &cidglyph->outline, &cbox ); /* grid fit the bounding box if necessary */ if ( hinting ) @@ -439,6 +441,7 @@ metrics->horiBearingY = cbox.yMax; } } + return error; } diff --git a/src/cid/cidgload.h b/src/cid/cidgload.h index 93858e865..a0a91bfea 100644 --- a/src/cid/cidgload.h +++ b/src/cid/cidgload.h @@ -4,7 +4,7 @@ /* */ /* OpenType Glyph Loader (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, */ @@ -37,10 +37,10 @@ FT_BEGIN_HEADER #endif /* 0 */ FT_LOCAL( FT_Error ) - cid_slot_load_glyph( CID_GlyphSlot glyph, - CID_Size size, - FT_Int glyph_index, - FT_Int32 load_flags ); + cid_slot_load_glyph( FT_GlyphSlot glyph, /* CID_Glyph_Slot */ + FT_Size size, /* CID_Size */ + FT_UInt glyph_index, + FT_Int32 load_flags ); FT_END_HEADER diff --git a/src/cid/cidobjs.c b/src/cid/cidobjs.c index 356d01805..691ec1749 100644 --- a/src/cid/cidobjs.c +++ b/src/cid/cidobjs.c @@ -47,20 +47,20 @@ /*************************************************************************/ FT_LOCAL_DEF( void ) - cid_slot_done( CID_GlyphSlot slot ) + cid_slot_done( FT_GlyphSlot slot ) { - slot->root.internal->glyph_hints = 0; + slot->internal->glyph_hints = 0; } FT_LOCAL_DEF( FT_Error ) - cid_slot_init( CID_GlyphSlot slot ) + cid_slot_init( FT_GlyphSlot slot ) { CID_Face face; PSHinter_Service pshinter; - face = (CID_Face)slot->root.face; + face = (CID_Face)slot->face; pshinter = (PSHinter_Service)face->pshinter; if ( pshinter ) @@ -68,7 +68,7 @@ FT_Module module; - module = FT_Get_Module( slot->root.face->driver->root.library, + module = FT_Get_Module( slot->face->driver->root.library, "pshinter" ); if ( module ) { @@ -76,7 +76,7 @@ funcs = pshinter->get_t1_funcs( module ); - slot->root.internal->glyph_hints = (void*)funcs; + slot->internal->glyph_hints = (void*)funcs; } } @@ -108,25 +108,29 @@ FT_LOCAL_DEF( void ) - cid_size_done( CID_Size size ) + cid_size_done( FT_Size cidsize ) /* CID_Size */ { - if ( size->root.internal ) + CID_Size size = (CID_Size)cidsize; + + + if ( cidsize->internal ) { PSH_Globals_Funcs funcs; funcs = cid_size_get_globals_funcs( size ); if ( funcs ) - funcs->destroy( (PSH_Globals)size->root.internal ); + funcs->destroy( (PSH_Globals)cidsize->internal ); - size->root.internal = 0; + cidsize->internal = 0; } } FT_LOCAL_DEF( FT_Error ) - cid_size_init( CID_Size size ) + cid_size_init( FT_Size cidsize ) /* CID_Size */ { + CID_Size size = (CID_Size)cidsize; FT_Error error = 0; PSH_Globals_Funcs funcs = cid_size_get_globals_funcs( size ); @@ -134,14 +138,14 @@ if ( funcs ) { PSH_Globals globals; - CID_Face face = (CID_Face)size->root.face; + CID_Face face = (CID_Face)cidsize->face; CID_FaceDict dict = face->cid.font_dicts + face->root.face_index; PS_Private priv = &dict->private_dict; - error = funcs->create( size->root.face->memory, priv, &globals ); + error = funcs->create( cidsize->face->memory, priv, &globals ); if ( !error ) - size->root.internal = (FT_Size_Internal)(void*)globals; + cidsize->internal = (FT_Size_Internal)(void*)globals; } return error; @@ -149,21 +153,43 @@ FT_LOCAL_DEF( FT_Error ) - cid_size_reset( CID_Size size ) + cid_size_reset( FT_Size cidsize, /* CID_Size */ + FT_UInt char_width, + FT_UInt char_height ) { + CID_Size size = (CID_Size)cidsize; PSH_Globals_Funcs funcs = cid_size_get_globals_funcs( size ); FT_Error error = 0; + FT_UNUSED( char_width ); + FT_UNUSED( char_height ); + if ( funcs ) - error = funcs->set_scale( (PSH_Globals)size->root.internal, - size->root.metrics.x_scale, - size->root.metrics.y_scale, + error = funcs->set_scale( (PSH_Globals)cidsize->internal, + cidsize->metrics.x_scale, + cidsize->metrics.y_scale, 0, 0 ); return error; } + FT_LOCAL_DEF( FT_Error ) + cid_point_size_reset( FT_Size size, + FT_F26Dot6 char_width, + FT_F26Dot6 char_height, + FT_UInt horz_resolution, + FT_UInt vert_resolution ) + { + FT_UNUSED( char_width ); + FT_UNUSED( char_height ); + FT_UNUSED( horz_resolution ); + FT_UNUSED( vert_resolution ); + + return cid_size_reset( size, 0, 0 ); + } + + /*************************************************************************/ /* */ /* FACE FUNCTIONS */ @@ -182,8 +208,9 @@ /* face :: A pointer to the face object to destroy. */ /* */ FT_LOCAL_DEF( void ) - cid_face_done( CID_Face face ) + cid_face_done( FT_Face cidface ) /* CID_Face */ { + CID_Face face = (CID_Face)cidface; FT_Memory memory; @@ -193,7 +220,7 @@ PS_FontInfo info = &cid->font_info; - memory = face->root.memory; + memory = cidface->memory; /* release subrs */ if ( face->subrs ) @@ -232,8 +259,8 @@ FT_FREE( cid->registry ); FT_FREE( cid->ordering ); - face->root.family_name = 0; - face->root.style_name = 0; + cidface->family_name = 0; + cidface->style_name = 0; FT_FREE( face->binary_data ); FT_FREE( face->cid_stream ); @@ -266,11 +293,12 @@ /* */ FT_LOCAL_DEF( FT_Error ) cid_face_init( FT_Stream stream, - CID_Face face, + FT_Face cidface, /* CID_Face */ FT_Int face_index, FT_Int num_params, FT_Parameter* params ) { + CID_Face face = (CID_Face)cidface; FT_Error error; FT_Service_PsCMaps psnames; PSAux_Service psaux; @@ -281,7 +309,7 @@ FT_UNUSED( stream ); - face->root.num_faces = 1; + cidface->num_faces = 1; FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS ); @@ -329,33 +357,32 @@ /* set up root face fields */ { - FT_Face root = (FT_Face)&face->root; CID_FaceInfo cid = &face->cid; PS_FontInfo info = &cid->font_info; - root->num_glyphs = cid->cid_count; - root->num_charmaps = 0; + cidface->num_glyphs = cid->cid_count; + cidface->num_charmaps = 0; - root->face_index = face_index; - root->face_flags = FT_FACE_FLAG_SCALABLE; + cidface->face_index = face_index; + cidface->face_flags = FT_FACE_FLAG_SCALABLE; - root->face_flags |= FT_FACE_FLAG_HORIZONTAL; + cidface->face_flags |= FT_FACE_FLAG_HORIZONTAL; if ( info->is_fixed_pitch ) - root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH; + cidface->face_flags |= FT_FACE_FLAG_FIXED_WIDTH; /* XXX: TODO: add kerning with .afm support */ /* get style name -- be careful, some broken fonts only */ /* have a /FontName dictionary entry! */ - root->family_name = info->family_name; + cidface->family_name = info->family_name; /* assume "Regular" style if we don't know better */ - root->style_name = (char *)"Regular"; - if ( root->family_name ) + cidface->style_name = (char *)"Regular"; + if ( cidface->family_name ) { char* full = info->full_name; - char* family = root->family_name; + char* family = cidface->family_name; if ( full ) @@ -376,7 +403,7 @@ else { if ( !*family ) - root->style_name = full; + cidface->style_name = full; break; } } @@ -387,42 +414,42 @@ { /* do we have a `/FontName'? */ if ( cid->cid_font_name ) - root->family_name = cid->cid_font_name; + cidface->family_name = cid->cid_font_name; } /* compute style flags */ - root->style_flags = 0; + cidface->style_flags = 0; if ( info->italic_angle ) - root->style_flags |= FT_STYLE_FLAG_ITALIC; + cidface->style_flags |= FT_STYLE_FLAG_ITALIC; if ( info->weight ) { if ( !ft_strcmp( info->weight, "Bold" ) || !ft_strcmp( info->weight, "Black" ) ) - root->style_flags |= FT_STYLE_FLAG_BOLD; + cidface->style_flags |= FT_STYLE_FLAG_BOLD; } /* no embedded bitmap support */ - root->num_fixed_sizes = 0; - root->available_sizes = 0; + cidface->num_fixed_sizes = 0; + cidface->available_sizes = 0; - root->bbox.xMin = cid->font_bbox.xMin >> 16; - root->bbox.yMin = cid->font_bbox.yMin >> 16; - root->bbox.xMax = ( cid->font_bbox.xMax + 0xFFFFU ) >> 16; - root->bbox.yMax = ( cid->font_bbox.yMax + 0xFFFFU ) >> 16; + cidface->bbox.xMin = cid->font_bbox.xMin >> 16; + cidface->bbox.yMin = cid->font_bbox.yMin >> 16; + cidface->bbox.xMax = ( cid->font_bbox.xMax + 0xFFFFU ) >> 16; + cidface->bbox.yMax = ( cid->font_bbox.yMax + 0xFFFFU ) >> 16; - if ( !root->units_per_EM ) - root->units_per_EM = 1000; + if ( !cidface->units_per_EM ) + cidface->units_per_EM = 1000; - root->ascender = (FT_Short)( root->bbox.yMax ); - root->descender = (FT_Short)( root->bbox.yMin ); - root->height = (FT_Short)( - ( ( root->ascender - root->descender ) * 12 ) / 10 ); + cidface->ascender = (FT_Short)( cidface->bbox.yMax ); + cidface->descender = (FT_Short)( cidface->bbox.yMin ); + cidface->height = (FT_Short)( + ( ( cidface->ascender - cidface->descender ) * 12 ) / 10 ); - root->underline_position = (FT_Short)info->underline_position; - root->underline_thickness = (FT_Short)info->underline_thickness; + cidface->underline_position = (FT_Short)info->underline_position; + cidface->underline_thickness = (FT_Short)info->underline_thickness; - root->internal->max_points = 0; - root->internal->max_contours = 0; + cidface->internal->max_points = 0; + cidface->internal->max_contours = 0; } Exit: @@ -445,7 +472,7 @@ /* FreeType error code. 0 means success. */ /* */ FT_LOCAL_DEF( FT_Error ) - cid_driver_init( CID_Driver driver ) + cid_driver_init( FT_Module driver ) { FT_UNUSED( driver ); @@ -465,7 +492,7 @@ /* driver :: A handle to the target CID driver. */ /* */ FT_LOCAL_DEF( void ) - cid_driver_done( CID_Driver driver ) + cid_driver_done( FT_Module driver ) { FT_UNUSED( driver ); } diff --git a/src/cid/cidobjs.h b/src/cid/cidobjs.h index 2d72d73e2..9d230baf8 100644 --- a/src/cid/cidobjs.h +++ b/src/cid/cidobjs.h @@ -4,7 +4,7 @@ /* */ /* CID objects manager (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, */ @@ -112,42 +112,47 @@ FT_BEGIN_HEADER FT_LOCAL( void ) - cid_slot_done( CID_GlyphSlot slot ); + cid_slot_done( FT_GlyphSlot slot ); FT_LOCAL( FT_Error ) - cid_slot_init( CID_GlyphSlot slot ); + cid_slot_init( FT_GlyphSlot slot ); FT_LOCAL( void ) - cid_size_done( CID_Size size ); - + cid_size_done( FT_Size size ); /* CID_Size */ FT_LOCAL( FT_Error ) - cid_size_init( CID_Size size ); - + cid_size_init( FT_Size size ); /* CID_Size */ FT_LOCAL( FT_Error ) - cid_size_reset( CID_Size size ); + cid_size_reset( FT_Size size, /* CID_Size */ + FT_UInt char_width, + FT_UInt char_height ); + + FT_LOCAL( FT_Error ) + cid_point_size_reset( FT_Size size, + FT_F26Dot6 char_width, + FT_F26Dot6 char_height, + FT_UInt horz_resolution, + FT_UInt vert_resolution ); FT_LOCAL( FT_Error ) cid_face_init( FT_Stream stream, - CID_Face face, + FT_Face face, /* CID_Face */ FT_Int face_index, FT_Int num_params, FT_Parameter* params ); - FT_LOCAL( void ) - cid_face_done( CID_Face face ); + cid_face_done( FT_Face face ); /* CID_Face */ FT_LOCAL( FT_Error ) - cid_driver_init( CID_Driver driver ); - + cid_driver_init( FT_Module driver ); FT_LOCAL( void ) - cid_driver_done( CID_Driver driver ); + cid_driver_done( FT_Module driver ); FT_END_HEADER diff --git a/src/cid/cidriver.c b/src/cid/cidriver.c index f5639b9f7..7d885a818 100644 --- a/src/cid/cidriver.c +++ b/src/cid/cidriver.c @@ -4,7 +4,7 @@ /* */ /* CID driver interface (body). */ /* */ -/* Copyright 1996-2001, 2002, 2003 by */ +/* Copyright 1996-2001, 2002, 2003, 2004 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -97,12 +97,11 @@ }; - static FT_Module_Interface - cid_get_interface( FT_Driver driver, - const FT_String* cid_interface ) + FT_CALLBACK_DEF( FT_Module_Interface ) + cid_get_interface( FT_Module module, + const char* cid_interface ) { - FT_UNUSED( driver ); - FT_UNUSED( cid_interface ); + FT_UNUSED( module ); return ft_service_list_lookup( cid_services, cid_interface ); } @@ -125,9 +124,9 @@ 0, - (FT_Module_Constructor)cid_driver_init, - (FT_Module_Destructor) cid_driver_done, - (FT_Module_Requester) cid_get_interface + cid_driver_init, + cid_driver_done, + cid_get_interface }, /* then the other font drivers fields */ @@ -135,23 +134,23 @@ sizeof( CID_SizeRec ), sizeof( CID_GlyphSlotRec ), - (FT_Face_InitFunc) cid_face_init, - (FT_Face_DoneFunc) cid_face_done, + cid_face_init, + cid_face_done, - (FT_Size_InitFunc) cid_size_init, - (FT_Size_DoneFunc) cid_size_done, - (FT_Slot_InitFunc) cid_slot_init, - (FT_Slot_DoneFunc) cid_slot_done, + cid_size_init, + cid_size_done, + cid_slot_init, + cid_slot_done, - (FT_Size_ResetPointsFunc)cid_size_reset, - (FT_Size_ResetPixelsFunc)cid_size_reset, + cid_point_size_reset, + cid_size_reset, - (FT_Slot_LoadFunc) cid_slot_load_glyph, + cid_slot_load_glyph, - (FT_Face_GetKerningFunc) 0, - (FT_Face_AttachFunc) 0, + 0, /* FT_Face_GetKerningFunc */ + 0, /* FT_Face_AttachFunc */ - (FT_Face_GetAdvancesFunc)0, + 0 /* FT_Face_GetAdvancesFunc */ }; diff --git a/src/truetype/ttdriver.c b/src/truetype/ttdriver.c index 30e5b6f55..25948839d 100644 --- a/src/truetype/ttdriver.c +++ b/src/truetype/ttdriver.c @@ -388,7 +388,7 @@ }; - static FT_Module_Interface + FT_CALLBACK_DEF( FT_Module_Interface ) tt_get_interface( FT_Module driver, /* TT_Driver */ const char* tt_interface ) { diff --git a/src/truetype/ttgxvar.c b/src/truetype/ttgxvar.c index e81f4df99..7c640de47 100644 --- a/src/truetype/ttgxvar.c +++ b/src/truetype/ttgxvar.c @@ -304,15 +304,7 @@ { segment->pairCount = FT_GET_USHORT(); if ( FT_NEW_ARRAY( segment->correspondence, segment->pairCount ) ) - { - /* Failure. Free everything we have done so far. */ - - for ( j = i - 1; j >= 0; --j ) - FT_FREE( blend->avar_segment[j].correspondence ); - - FT_FREE( blend->avar_segment ); goto Exit; - } for ( j = 0; j < segment->pairCount; ++j ) { @@ -408,7 +400,7 @@ if ( gvar_head.flags & 1 ) { - /* long offsets (one more offset than glyph, to mark size of last) */ + /* long offsets (one more offset than glyphs, to mark size of last) */ if ( FT_FRAME_ENTER( ( blend->gv_glyphcnt + 1 ) * 4L ) ) goto Exit; @@ -419,9 +411,10 @@ } else { - /* short offsets (one more offset than glyph, to mark size of last) */ + /* short offsets (one more offset than glyphs, to mark size of last) */ if ( FT_FRAME_ENTER( ( blend->gv_glyphcnt + 1 ) * 2L ) ) goto Exit; + for ( i = 0; i <= blend->gv_glyphcnt; ++i ) blend->glyphoffsets[i] = OffsetToData + FT_GET_USHORT() * 2; /* XXX: Undocumented: `*2'! */ @@ -435,10 +428,8 @@ gvar_head.axisCount * blend->tuplecount ) ) goto Exit; - if ( FT_STREAM_SEEK( gvar_start + gvar_head.offsetToCoord ) || - FT_FRAME_ENTER( blend->tuplecount - * gvar_head.axisCount - * sizeof ( short ) ) ) + if ( FT_STREAM_SEEK( gvar_start + gvar_head.offsetToCoord ) || + FT_FRAME_ENTER( blend->tuplecount * gvar_head.axisCount * 2L ) ) goto Exit; for ( i = 0; i < blend->tuplecount; ++i ) @@ -469,11 +460,11 @@ /* tupleIndex :: A flag saying whether this is an intermediate */ /* tuple or not. */ /* */ - /* tuple_coords :: The coordiates of the tuple in normalized axis */ + /* tuple_coords :: The coordinates of the tuple in normalized axis */ /* units. */ /* */ - /* im_start_coords :: The initial coordinatess where this tuple */ - /* starts to apply (for intermediate coordinates). */ + /* im_start_coords :: The initial coordinates where this tuple starts */ + /* to apply (for intermediate coordinates). */ /* */ /* im_end_coords :: The final coordinates after which this tuple no */ /* longer applies (for intermediate coordinates). */ @@ -621,7 +612,7 @@ #undef FT_STRUCTURE #define FT_STRUCTURE GX_FVar_Head - FT_FRAME_START( 14 ), + FT_FRAME_START( 16 ), FT_FRAME_LONG ( version ), FT_FRAME_USHORT( offsetToData ), FT_FRAME_USHORT( countSizePairs ), @@ -745,7 +736,7 @@ ns = mmvar->namedstyle; for ( i = 0; i < fvar_head.instanceCount; ++i ) { - if ( FT_FRAME_ENTER( 4 + 4 * fvar_head.axisCount ) ) + if ( FT_FRAME_ENTER( 4L + 4L * fvar_head.axisCount ) ) goto Exit; ns->strid = FT_GET_USHORT(); @@ -1304,9 +1295,9 @@ FT_ULong OffsetToData; FT_ULong here; FT_UInt i, j; - FT_Fixed* tuple_coords = NULL; + FT_Fixed* tuple_coords = NULL; FT_Fixed* im_start_coords = NULL; - FT_Fixed* im_end_coords = NULL; + FT_Fixed* im_end_coords = NULL; FT_UInt point_count, spoint_count = 0; FT_UShort* sharedpoints = NULL; FT_UShort* localpoints; @@ -1317,8 +1308,9 @@ if ( !face->doblend || blend == NULL ) return TT_Err_Invalid_Argument; + /* to be freed by the caller */ if ( ( error = FT_NEW_ARRAY( delta_xy, n_points ) ) ) - goto Fail; + goto Exit; *deltas = delta_xy; if ( glyph_index >= blend->gv_glyphcnt || @@ -1329,7 +1321,7 @@ if ( FT_STREAM_SEEK( blend->glyphoffsets[glyph_index] ) || FT_FRAME_ENTER( blend->glyphoffsets[glyph_index + 1] - blend->glyphoffsets[glyph_index] ) ) - goto Fail; + goto Fail1; glyph_start = FT_Stream_FTell( stream ); @@ -1339,7 +1331,7 @@ if ( FT_NEW_ARRAY( tuple_coords, blend->num_axis ) || FT_NEW_ARRAY( im_start_coords, blend->num_axis ) || FT_NEW_ARRAY( im_end_coords, blend->num_axis ) ) - goto Exit; + goto Fail2; tupleCount = FT_GET_USHORT(); OffsetToData = glyph_start + FT_GET_USHORT(); @@ -1375,7 +1367,7 @@ else if ( ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) >= blend->tuplecount ) { error = TT_Err_Invalid_Table; - goto Fail; + goto Fail3; } else { @@ -1428,7 +1420,7 @@ : point_count ); if ( points == NULL || deltas_y == NULL || deltas_x == NULL ) - /* failure, ignore it */; + ; /* failure, ignore it */ else if ( points == ALL_POINTS ) { @@ -1459,17 +1451,22 @@ FT_Stream_SeekSet( stream, here ); } + FT_FRAME_EXIT(); goto Exit; - Fail: - FT_FREE( delta_xy ); - *deltas = NULL; - - Exit: + Fail3: FT_FREE( tuple_coords ); FT_FREE( im_start_coords ); FT_FREE( im_end_coords ); + Fail2: + FT_FRAME_EXIT(); + + Fail1: + FT_FREE( delta_xy ); + *deltas = NULL; + + Exit: return error; } diff --git a/src/truetype/ttobjs.c b/src/truetype/ttobjs.c index 89d7c88b7..3914ba5da 100644 --- a/src/truetype/ttobjs.c +++ b/src/truetype/ttobjs.c @@ -892,7 +892,7 @@ driver->context = NULL; } #else - FT_UNUSED( driver ); + FT_UNUSED( ttdriver ); #endif }