diff --git a/src/bdf/bdflib.c b/src/bdf/bdflib.c index 00de85473..0d7a27773 100644 --- a/src/bdf/bdflib.c +++ b/src/bdf/bdflib.c @@ -1473,8 +1473,6 @@ /* Set the character name in the parse info first until the */ /* encoding can be checked for an unencoded character. */ - FT_FREE( p->glyph_name ); - error = bdf_list_split_( &p->list, " +", line, linelen ); if ( error ) goto Exit; @@ -1548,43 +1546,35 @@ glyph = font->glyphs + font->glyphs_used++; glyph->name = p->glyph_name; glyph->encoding = (unsigned long)p->glyph_enc; - - /* Reset the initial glyph info. */ - p->glyph_name = NULL; } - else + else if ( p->opts->keep_unencoded ) { - /* Unencoded glyph. Check whether it should */ - /* be added or not. */ - if ( p->opts->keep_unencoded ) + /* Allocate the next unencoded glyph. */ + if ( font->unencoded_used == font->unencoded_size ) { - /* Allocate the next unencoded glyph. */ - if ( font->unencoded_used == font->unencoded_size ) - { - if ( FT_RENEW_ARRAY( font->unencoded , - font->unencoded_size, - font->unencoded_size + 4 ) ) - goto Exit; - - font->unencoded_size += 4; - } - - glyph = font->unencoded + font->unencoded_used; - glyph->name = p->glyph_name; - glyph->encoding = font->unencoded_used++; + if ( FT_RENEW_ARRAY( font->unencoded , + font->unencoded_size, + font->unencoded_size + 4 ) ) + goto Exit; - /* Reset the initial glyph info. */ - p->glyph_name = NULL; - } - else - { - /* Free up the glyph name if the unencoded shouldn't be */ - /* kept. */ - FT_FREE( p->glyph_name ); + font->unencoded_size += 4; } + + glyph = font->unencoded + font->unencoded_used; + glyph->name = p->glyph_name; + glyph->encoding = font->unencoded_used++; + } + else + { + /* Free up the glyph name if the unencoded shouldn't be */ + /* kept. */ + FT_FREE( p->glyph_name ); + glyph = NULL; } - p->flags |= BDF_ENCODING_; + p->glyph_name = NULL; + p->glyph = glyph; + p->flags |= BDF_ENCODING_; goto Exit; } @@ -1593,10 +1583,7 @@ goto Missing_Encoding; /* Point at the glyph being constructed. */ - if ( p->glyph_enc == -1 ) - glyph = font->unencoded + ( font->unencoded_used - 1 ); - else - glyph = font->glyphs + ( font->glyphs_used - 1 ); + glyph = p->glyph; /* Expect the SWIDTH (scalable width) field next. */ if ( _bdf_strncmp( line, "SWIDTH", 6 ) == 0 ) @@ -1728,7 +1715,6 @@ if ( !bitmap_size || FT_ALLOC( glyph->bitmap, glyph->bytes ) ) goto Exit; - p->glyph = glyph; p->row = 0; p->flags |= BDF_BITMAP_; *next = bdf_parse_bitmap_;