From 08a8e43fb4b12da756a2dd5e675354dc3d60a5c8 Mon Sep 17 00:00:00 2001 From: Parth Wazurkar Date: Wed, 15 Aug 2018 02:01:12 +0530 Subject: [gf] Resolve failing of `GF_CMap'. * src/gf/gfdrivr.c(gf_cmap_char_{index, next}): Use `linear search' instead of `binary search' in the encoding table as it will always be unsorted. --- src/gf/gfdrivr.c | 54 +++++++++++------------------------------------------- 1 file changed, 11 insertions(+), 43 deletions(-) diff --git a/src/gf/gfdrivr.c b/src/gf/gfdrivr.c index c44c35c28..fd65cd65d 100644 --- a/src/gf/gfdrivr.c +++ b/src/gf/gfdrivr.c @@ -81,33 +81,21 @@ { GF_CMap cmap = (GF_CMap)gfcmap; GF_Encoding encodings = cmap->encodings; - FT_ULong min, max, mid; - FT_UInt result = 0; + FT_UInt max, code, result = 0, i; - min = 0; max = cmap->num_encodings; - while ( min < max ) + for( i = 0; i < max; i++ ) { - FT_ULong code; - - - mid = ( min + max ) >> 1; - code = (FT_ULong)encodings[mid].enc; - + code = (FT_ULong)encodings[i].enc; if ( charcode == code ) { - result = encodings[mid].glyph; - break; + result = encodings[i].glyph; + goto Exit; } - - if ( charcode < code ) - max = mid; - else - min = mid + 1; } - - return result; + Exit: + return result; } FT_CALLBACK_DEF( FT_UInt ) @@ -116,39 +104,19 @@ { GF_CMap cmap = (GF_CMap)gfcmap; GF_Encoding encodings = cmap->encodings; - FT_ULong min, max, mid; + FT_UInt result = 0, i, code, max; FT_ULong charcode = *acharcode + 1; - FT_UInt result = 0; - - min = 0; max = cmap->num_encodings; - while ( min < max ) + for( i = 0; i < max; i++ ) { - FT_ULong code; - - - mid = ( min + max ) >> 1; - code = (FT_ULong)encodings[mid].enc; - + code = (FT_ULong)encodings[i].enc; if ( charcode == code ) { - result = encodings[mid].glyph + 1; + result = encodings[i].glyph + 1; goto Exit; } - - if ( charcode < code ) - max = mid; - else - min = mid + 1; - } - - charcode = 0; - if ( min < cmap->num_encodings ) - { - charcode = (FT_ULong)encodings[min].enc; - result = encodings[min].glyph ; } Exit: -- cgit v1.2.1