static void Free_LigCaretList( HB_LigCaretList* lcl ) { HB_UShort n, count; HB_LigGlyph* lg; if ( !lcl->loaded ) return; if ( lcl->LigGlyph ) { count = lcl->LigGlyphCount; lg = lcl->LigGlyph; for ( n = 0; n < count; n++ ) Free_LigGlyph( &lg[n] ); FREE( lg ); } _HB_OPEN_Free_Coverage( &lcl->Coverage ); }
static void Free_AttachList( HB_AttachList* al) { HB_UShort n, count; HB_AttachPoint* ap; if ( !al->loaded ) return; if ( al->AttachPoint ) { count = al->GlyphCount; ap = al->AttachPoint; for ( n = 0; n < count; n++ ) Free_AttachPoint( &ap[n] ); FREE( ap ); } _HB_OPEN_Free_Coverage( &al->Coverage ); }
static FT_Error Load_LigCaretList( HB_LigCaretList* lcl, FT_Stream stream ) { FT_Memory memory = stream->memory; FT_Error error; FT_UShort m, n, count; FT_ULong cur_offset, new_offset, base_offset; HB_LigGlyph* lg; base_offset = FILE_Pos(); if ( ACCESS_Frame( 2L ) ) return error; new_offset = GET_UShort() + base_offset; FORGET_Frame(); cur_offset = FILE_Pos(); if ( FILE_Seek( new_offset ) || ( error = _HB_OPEN_Load_Coverage( &lcl->Coverage, stream ) ) != FT_Err_Ok ) return error; (void)FILE_Seek( cur_offset ); if ( ACCESS_Frame( 2L ) ) goto Fail2; count = lcl->LigGlyphCount = GET_UShort(); FORGET_Frame(); lcl->LigGlyph = NULL; if ( ALLOC_ARRAY( lcl->LigGlyph, count, HB_LigGlyph ) ) goto Fail2; lg = lcl->LigGlyph; for ( n = 0; n < count; n++ ) { if ( ACCESS_Frame( 2L ) ) goto Fail1; new_offset = GET_UShort() + base_offset; FORGET_Frame(); cur_offset = FILE_Pos(); if ( FILE_Seek( new_offset ) || ( error = Load_LigGlyph( &lg[n], stream ) ) != FT_Err_Ok ) goto Fail1; (void)FILE_Seek( cur_offset ); } lcl->loaded = TRUE; return FT_Err_Ok; Fail1: for ( m = 0; m < n; m++ ) Free_LigGlyph( &lg[m], memory ); FREE( lg ); Fail2: _HB_OPEN_Free_Coverage( &lcl->Coverage, memory ); return error; }
static FT_Error Load_AttachList( HB_AttachList* al, FT_Stream stream ) { FT_Memory memory = stream->memory; FT_Error error; FT_UShort n, m, count; FT_ULong cur_offset, new_offset, base_offset; HB_AttachPoint* ap; base_offset = FILE_Pos(); if ( ACCESS_Frame( 2L ) ) return error; new_offset = GET_UShort() + base_offset; FORGET_Frame(); cur_offset = FILE_Pos(); if ( FILE_Seek( new_offset ) || ( error = _HB_OPEN_Load_Coverage( &al->Coverage, stream ) ) != FT_Err_Ok ) return error; (void)FILE_Seek( cur_offset ); if ( ACCESS_Frame( 2L ) ) goto Fail2; count = al->GlyphCount = GET_UShort(); FORGET_Frame(); al->AttachPoint = NULL; if ( ALLOC_ARRAY( al->AttachPoint, count, HB_AttachPoint ) ) goto Fail2; ap = al->AttachPoint; for ( n = 0; n < count; n++ ) { if ( ACCESS_Frame( 2L ) ) goto Fail1; new_offset = GET_UShort() + base_offset; FORGET_Frame(); cur_offset = FILE_Pos(); if ( FILE_Seek( new_offset ) || ( error = Load_AttachPoint( &ap[n], stream ) ) != FT_Err_Ok ) goto Fail1; (void)FILE_Seek( cur_offset ); } al->loaded = TRUE; return FT_Err_Ok; Fail1: for ( m = 0; m < n; m++ ) Free_AttachPoint( &ap[m], memory ); FREE( ap ); Fail2: _HB_OPEN_Free_Coverage( &al->Coverage, memory ); return error; }