diff --git a/src/gxlayout/gxlookuptbl.c b/src/gxlayout/gxlookuptbl.c index 20c2128ce..4298caf04 100644 --- a/src/gxlayout/gxlookuptbl.c +++ b/src/gxlayout/gxlookuptbl.c @@ -52,11 +52,11 @@ FT_FRAME_USHORT (rangeShift), FT_FRAME_END }; - + FT_STREAM_READ_FIELDS( fields, header ); return error; } - + static FT_Error gx_LookupTable_load_raw_values ( FT_Stream stream, FT_Long value_count, @@ -64,12 +64,11 @@ { FT_Error error; FT_Long i; - + for ( i = 0; i < value_count; i++) { value_slot[i].extra.any = NULL; - error = FT_READ_SHORT(value_slot[i].raw.s); - if ( error ) + if ( FT_READ_SHORT(value_slot[i].raw.s) ) return error; } return error; @@ -78,7 +77,7 @@ static FT_Error gx_LookupTable_load_segment_generic( GX_LookupTable lookup_table, FT_Stream stream ) - + { FT_Error error; FT_Memory memory = stream->memory; @@ -89,15 +88,11 @@ if ( FT_NEW_ARRAY( segment, binSrchHeader.nUnits ) ) return error; - + for ( i = 0; i < binSrchHeader.nUnits; i++ ) { - error = FT_READ_USHORT(segment[i].lastGlyph); - if ( error ) - goto Failure; - - error = FT_READ_USHORT(segment[i].firstGlyph); - if ( error ) + if ( FT_READ_USHORT(segment[i].lastGlyph) || + FT_READ_USHORT(segment[i].firstGlyph) ) goto Failure; error = gx_LookupTable_load_raw_values(stream, 1, &(segment[i].value)); @@ -119,8 +114,8 @@ FT_FREE(segment_table->segments); segment_table->segments = NULL; } - - + + static FT_Error gx_LookupTable_load_single_table( GX_LookupTable lookup_table, FT_Stream stream ) @@ -137,16 +132,15 @@ for ( i = 0; i < binSrchHeader.nUnits; i++ ) { - error = FT_READ_USHORT(single[i].glyph); - if ( error ) + if ( FT_READ_USHORT(single[i].glyph) ) goto Failure; - + gx_LookupTable_load_raw_values(stream, 1, &(single[i].value)); if ( error ) goto Failure; } single_table->entries = single; - + return error; Failure: FT_FREE(single); @@ -159,12 +153,12 @@ GX_LookupTable lookup_table ) { GX_LookupTable_Single_Table single_table = lookup_table->fsHeader.single_table; - + FT_FREE(single_table->entries); single_table->entries = NULL; } - static FT_Error + static FT_Error gx_LookupTable_load_binSrch( GX_LookupTable lookup_table, FT_Stream stream ) { @@ -188,7 +182,7 @@ if ( FT_MEM_NEW (binSrch) ) return error; - + binSrch->dummy = NULL; error = gx_load_BinSrchHeader( stream, &(binSrch->binSrchHeader) ); if ( error ) @@ -215,7 +209,7 @@ { GX_LookupTable_BinSrch binSrch = lookup_table->fsHeader.bin_srch; gx_LookupTable_finalizer finalizer; - + switch (lookup_table->format) { case GX_LOOKUPTABLE_SEGMENT_SINGLE: @@ -229,17 +223,17 @@ finalizer = NULL; } FT_ASSERT(finalizer); - + finalizer ( memory, lookup_table ); - binSrch->dummy = NULL; + binSrch->dummy = NULL; FT_FREE ( lookup_table->fsHeader.bin_srch ); lookup_table->fsHeader.bin_srch = NULL; } - static FT_Error + static FT_Error gx_LookupTable_load_simple_array( GX_LookupTable lookup_table, FT_Stream stream ) - + { FT_Error error; FT_Memory memory = stream->memory; @@ -247,7 +241,7 @@ if ( FT_NEW_ARRAY (value_slot, lookup_table->num_glyphs) ) return error; - error = gx_LookupTable_load_raw_values ( stream, + error = gx_LookupTable_load_raw_values ( stream, lookup_table->num_glyphs, value_slot ); if ( error ) @@ -261,7 +255,7 @@ return error; } - static void + static void gx_LookupTable_free_simple_array( FT_Memory memory, GX_LookupTable lookup_table ) { @@ -269,7 +263,7 @@ lookup_table->fsHeader.simple_array = NULL; } - static FT_Error + static FT_Error gx_LookupTable_load_trimmed_array( GX_LookupTable lookup_table, FT_Stream stream ) { @@ -279,15 +273,11 @@ GX_LookupTable_Trimmed_Array trimmed_array; GX_LookupValue value_slot; - error = FT_READ_USHORT(firstGlyph); - if ( error ) - return error; - - error = FT_READ_USHORT(glyphCount); - if ( error ) + if ( FT_READ_USHORT(firstGlyph) || + FT_READ_USHORT(glyphCount) ) return error; - - if ( FT_ALLOC (trimmed_array, + + if ( FT_ALLOC (trimmed_array, sizeof (*trimmed_array) + sizeof(*trimmed_array->valueArray) * glyphCount) ) return error; trimmed_array->firstGlyph = firstGlyph; @@ -299,7 +289,7 @@ goto Failure; lookup_table->fsHeader.trimmed_array = trimmed_array; - trimmed_array->valueArray = value_slot; + trimmed_array->valueArray = value_slot; return error; Failure: @@ -308,19 +298,19 @@ return error; } - static void + static void gx_LookupTable_free_trimmed_array( FT_Memory memory, GX_LookupTable lookup_table ) { GX_LookupTable_Trimmed_Array trimmed_array; - + trimmed_array = lookup_table->fsHeader.trimmed_array; trimmed_array->valueArray = NULL; FT_FREE(trimmed_array); lookup_table->fsHeader.trimmed_array = NULL; } - + FT_LOCAL_DEF( FT_Error ) gx_face_load_LookupTable ( GX_Face face, FT_Stream stream, @@ -332,10 +322,9 @@ lookup_table->position = FT_STREAM_POS(); lookup_table->num_glyphs = face->root.num_glyphs; lookup_table->fsHeader.any = NULL; - error = FT_READ_SHORT(lookup_table->format); - if ( error ) + if ( FT_READ_SHORT(lookup_table->format) ) return error; - + switch ( lookup_table->format ) { case GX_LOOKUPTABLE_SIMPLE_ARRAY: @@ -357,7 +346,7 @@ FT_Memory memory ) { gx_LookupTable_finalizer finalizer; - + switch ( lookup_table->format ) { case GX_LOOKUPTABLE_SIMPLE_ARRAY: @@ -385,19 +374,19 @@ { for ( i = 0; i < lookup_table->num_glyphs; i++ ) { - error = (* funcs->simple_array_func)(lookup_table->format, + error = (* funcs->simple_array_func)(lookup_table->format, i, &((lookup_table->fsHeader.simple_array)[i]), user); if ( error ) return error; } - } + } else if ( funcs->generic_func ) { for ( i = 0; i < lookup_table->num_glyphs; i++ ) { - error = (* funcs->generic_func)(lookup_table->format, + error = (* funcs->generic_func)(lookup_table->format, &((lookup_table->fsHeader.simple_array)[i]), user); if ( error ) @@ -427,7 +416,7 @@ segment_func = funcs->segment_array_func; else segment_func = NULL; - + if ( segment_func ) { for ( i = 0; i < header->nUnits; i++ ) @@ -469,7 +458,7 @@ GX_LookupSingle entries; GX_BinSrchHeader binSrchHeader; FT_Long i; - + single_table = lookup_table->fsHeader.single_table; entries = single_table->entries; binSrchHeader = &(single_table->binSrchHeader); @@ -547,7 +536,7 @@ FT_Pointer user ) { gx_LookupTable_traverser traverser; - + switch (lookup_table->format) { case GX_LOOKUPTABLE_SIMPLE_ARRAY: @@ -583,8 +572,8 @@ else return 0; } - - + + static int lookup_lookup_single(const void *keyval, const void *datum) { @@ -612,7 +601,7 @@ GX_LookupTable_Trimmed_Array trimmed_array; FT_Long trimmed_index; - + void * bs_key = &glyph; void * bs_base; size_t bs_n; @@ -620,7 +609,7 @@ int (* bs_cmp)(const void* keyval, const void* datum); - result.firstGlyph = GX_LOOKUP_RESULT_NO_FIRST_GLYPH; + result.firstGlyph = GX_LOOKUP_RESULT_NO_FIRST_GLYPH; result.value = NULL; switch ( lookup_table->format ) { @@ -674,13 +663,13 @@ FT_Error error; FT_UShort glyph; GX_LookupResultRec result; - + for ( glyph = 0; glyph < 0xFFFF; glyph++ ) { result = gx_LookupTable_lookup ( lookup_table, glyph ); if ( result.value == NULL) continue ; - + if (( error = func( glyph, result.value, result.firstGlyph, user ) )) return error; }