| Index: src/truetype/ttgxvar.c
|
| diff --git a/src/truetype/ttgxvar.c b/src/truetype/ttgxvar.c
|
| index 69b702f621eb3fa90ad6a502602510f7b116910a..7899d3671dc8f07c7b2d065f3e47910aa308482b 100644
|
| --- a/src/truetype/ttgxvar.c
|
| +++ b/src/truetype/ttgxvar.c
|
| @@ -4,7 +4,7 @@
|
| /* */
|
| /* TrueType GX Font Variation loader */
|
| /* */
|
| -/* Copyright 2004-2011 by */
|
| +/* Copyright 2004-2013 by */
|
| /* David Turner, Robert Wilhelm, Werner Lemberg, and George Williams. */
|
| /* */
|
| /* This file is part of the FreeType project, and may only be used, */
|
| @@ -61,9 +61,9 @@
|
|
|
|
|
| #define FT_Stream_FTell( stream ) \
|
| - ( (stream)->cursor - (stream)->base )
|
| + (FT_ULong)( (stream)->cursor - (stream)->base )
|
| #define FT_Stream_SeekSet( stream, off ) \
|
| - ( (stream)->cursor = (stream)->base+(off) )
|
| + ( (stream)->cursor = (stream)->base + (off) )
|
|
|
|
|
| /*************************************************************************/
|
| @@ -91,7 +91,9 @@
|
| /* indicates that there is a delta for every point without needing to */
|
| /* enumerate all of them. */
|
| /* */
|
| -#define ALL_POINTS (FT_UShort*)( -1 )
|
| +
|
| + /* ensure that value `0' has the same width as a pointer */
|
| +#define ALL_POINTS (FT_UShort*)~(FT_PtrDist)0
|
|
|
|
|
| #define GX_PT_POINTS_ARE_WORDS 0x80
|
| @@ -130,7 +132,7 @@
|
| FT_Int j;
|
| FT_Int first;
|
| FT_Memory memory = stream->memory;
|
| - FT_Error error = TT_Err_Ok;
|
| + FT_Error error = FT_Err_Ok;
|
|
|
| FT_UNUSED( error );
|
|
|
| @@ -215,7 +217,7 @@
|
| FT_Offset i;
|
| FT_UInt j;
|
| FT_Memory memory = stream->memory;
|
| - FT_Error error = TT_Err_Ok;
|
| + FT_Error error = FT_Err_Ok;
|
|
|
| FT_UNUSED( error );
|
|
|
| @@ -283,7 +285,7 @@
|
| FT_Memory memory = stream->memory;
|
| GX_Blend blend = face->blend;
|
| GX_AVarSegment segment;
|
| - FT_Error error = TT_Err_Ok;
|
| + FT_Error error = FT_Err_Ok;
|
| FT_ULong version;
|
| FT_Long axisCount;
|
| FT_Int i, j;
|
| @@ -412,7 +414,7 @@
|
| if ( gvar_head.version != (FT_Long)0x00010000L ||
|
| gvar_head.axisCount != (FT_UShort)blend->mmvar->num_axis )
|
| {
|
| - error = TT_Err_Invalid_Table;
|
| + error = FT_THROW( Invalid_Table );
|
| goto Exit;
|
| }
|
|
|
| @@ -501,11 +503,9 @@
|
| FT_Fixed* im_end_coords )
|
| {
|
| FT_UInt i;
|
| - FT_Fixed apply;
|
| - FT_Fixed temp;
|
| + FT_Fixed apply = 0x10000L;
|
|
|
|
|
| - apply = 0x10000L;
|
| for ( i = 0; i < blend->num_axis; ++i )
|
| {
|
| if ( tuple_coords[i] == 0 )
|
| @@ -525,11 +525,10 @@
|
|
|
| else if ( !( tupleIndex & GX_TI_INTERMEDIATE_TUPLE ) )
|
| /* not an intermediate tuple */
|
| - apply = FT_MulDiv( apply,
|
| + apply = FT_MulFix( apply,
|
| blend->normalizedcoords[i] > 0
|
| ? blend->normalizedcoords[i]
|
| - : -blend->normalizedcoords[i],
|
| - 0x10000L );
|
| + : -blend->normalizedcoords[i] );
|
|
|
| else if ( blend->normalizedcoords[i] <= im_start_coords[i] ||
|
| blend->normalizedcoords[i] >= im_end_coords[i] )
|
| @@ -539,20 +538,14 @@
|
| }
|
|
|
| else if ( blend->normalizedcoords[i] < tuple_coords[i] )
|
| - {
|
| - temp = FT_MulDiv( blend->normalizedcoords[i] - im_start_coords[i],
|
| - 0x10000L,
|
| - tuple_coords[i] - im_start_coords[i]);
|
| - apply = FT_MulDiv( apply, temp, 0x10000L );
|
| - }
|
| + apply = FT_MulDiv( apply,
|
| + blend->normalizedcoords[i] - im_start_coords[i],
|
| + tuple_coords[i] - im_start_coords[i] );
|
|
|
| else
|
| - {
|
| - temp = FT_MulDiv( im_end_coords[i] - blend->normalizedcoords[i],
|
| - 0x10000L,
|
| - im_end_coords[i] - tuple_coords[i] );
|
| - apply = FT_MulDiv( apply, temp, 0x10000L );
|
| - }
|
| + apply = FT_MulDiv( apply,
|
| + im_end_coords[i] - blend->normalizedcoords[i],
|
| + im_end_coords[i] - tuple_coords[i] );
|
| }
|
|
|
| return apply;
|
| @@ -619,7 +612,7 @@
|
| FT_Stream stream = face->root.stream;
|
| FT_Memory memory = face->root.memory;
|
| FT_ULong table_len;
|
| - FT_Error error = TT_Err_Ok;
|
| + FT_Error error = FT_Err_Ok;
|
| FT_ULong fvar_start;
|
| FT_Int i, j;
|
| FT_MM_Var* mmvar = NULL;
|
| @@ -690,7 +683,7 @@
|
| fvar_head.offsetToData + fvar_head.axisCount * 20U +
|
| fvar_head.instanceCount * fvar_head.instanceSize > table_len )
|
| {
|
| - error = TT_Err_Invalid_Table;
|
| + error = FT_THROW( Invalid_Table );
|
| goto Exit;
|
| }
|
|
|
| @@ -712,7 +705,7 @@
|
| mmvar->num_axis =
|
| fvar_head.axisCount;
|
| mmvar->num_designs =
|
| - (FT_UInt)-1; /* meaningless in this context; each glyph */
|
| + ~0U; /* meaningless in this context; each glyph */
|
| /* may have a different number of designs */
|
| /* (or tuples, as called by Apple) */
|
| mmvar->num_namedstyles =
|
| @@ -856,7 +849,7 @@
|
| FT_UInt num_coords,
|
| FT_Fixed* coords )
|
| {
|
| - FT_Error error = TT_Err_Ok;
|
| + FT_Error error = FT_Err_Ok;
|
| GX_Blend blend;
|
| FT_MM_Var* mmvar;
|
| FT_UInt i;
|
| @@ -884,14 +877,14 @@
|
|
|
| if ( num_coords != mmvar->num_axis )
|
| {
|
| - error = TT_Err_Invalid_Argument;
|
| + error = FT_THROW( Invalid_Argument );
|
| goto Exit;
|
| }
|
|
|
| for ( i = 0; i < num_coords; ++i )
|
| if ( coords[i] < -0x00010000L || coords[i] > 0x00010000L )
|
| {
|
| - error = TT_Err_Invalid_Argument;
|
| + error = FT_THROW( Invalid_Argument );
|
| goto Exit;
|
| }
|
|
|
| @@ -992,7 +985,7 @@
|
| FT_UInt num_coords,
|
| FT_Fixed* coords )
|
| {
|
| - FT_Error error = TT_Err_Ok;
|
| + FT_Error error = FT_Err_Ok;
|
| FT_Fixed* normalized = NULL;
|
| GX_Blend blend;
|
| FT_MM_Var* mmvar;
|
| @@ -1013,7 +1006,7 @@
|
|
|
| if ( num_coords != mmvar->num_axis )
|
| {
|
| - error = TT_Err_Invalid_Argument;
|
| + error = FT_THROW( Invalid_Argument );
|
| goto Exit;
|
| }
|
|
|
| @@ -1029,24 +1022,16 @@
|
| {
|
| if ( coords[i] > a->maximum || coords[i] < a->minimum )
|
| {
|
| - error = TT_Err_Invalid_Argument;
|
| + error = FT_THROW( Invalid_Argument );
|
| goto Exit;
|
| }
|
|
|
| if ( coords[i] < a->def )
|
| - {
|
| - normalized[i] = -FT_MulDiv( coords[i] - a->def,
|
| - 0x10000L,
|
| - a->minimum - a->def );
|
| - }
|
| + normalized[i] = -FT_DivFix( coords[i] - a->def, a->minimum - a->def );
|
| else if ( a->maximum == a->def )
|
| normalized[i] = 0;
|
| else
|
| - {
|
| - normalized[i] = FT_MulDiv( coords[i] - a->def,
|
| - 0x10000L,
|
| - a->maximum - a->def );
|
| - }
|
| + normalized[i] = FT_DivFix( coords[i] - a->def, a->maximum - a->def );
|
| }
|
|
|
| if ( !blend->avar_checked )
|
| @@ -1061,15 +1046,11 @@
|
| if ( normalized[i] < av->correspondence[j].fromCoord )
|
| {
|
| normalized[i] =
|
| - FT_MulDiv(
|
| - FT_MulDiv(
|
| - normalized[i] - av->correspondence[j - 1].fromCoord,
|
| - 0x10000L,
|
| - av->correspondence[j].fromCoord -
|
| - av->correspondence[j - 1].fromCoord ),
|
| - av->correspondence[j].toCoord -
|
| - av->correspondence[j - 1].toCoord,
|
| - 0x10000L ) +
|
| + FT_MulDiv( normalized[i] - av->correspondence[j - 1].fromCoord,
|
| + av->correspondence[j].toCoord -
|
| + av->correspondence[j - 1].toCoord,
|
| + av->correspondence[j].fromCoord -
|
| + av->correspondence[j - 1].fromCoord ) +
|
| av->correspondence[j - 1].toCoord;
|
| break;
|
| }
|
| @@ -1141,7 +1122,7 @@
|
| {
|
| FT_TRACE2(( "tt_face_vary_cvt: no blend specified\n" ));
|
|
|
| - error = TT_Err_Ok;
|
| + error = FT_Err_Ok;
|
| goto Exit;
|
| }
|
|
|
| @@ -1149,7 +1130,7 @@
|
| {
|
| FT_TRACE2(( "tt_face_vary_cvt: no `cvt ' table\n" ));
|
|
|
| - error = TT_Err_Ok;
|
| + error = FT_Err_Ok;
|
| goto Exit;
|
| }
|
|
|
| @@ -1158,13 +1139,13 @@
|
| {
|
| FT_TRACE2(( "is missing\n" ));
|
|
|
| - error = TT_Err_Ok;
|
| + error = FT_Err_Ok;
|
| goto Exit;
|
| }
|
|
|
| if ( FT_FRAME_ENTER( table_len ) )
|
| {
|
| - error = TT_Err_Ok;
|
| + error = FT_Err_Ok;
|
| goto Exit;
|
| }
|
|
|
| @@ -1173,7 +1154,7 @@
|
| {
|
| FT_TRACE2(( "bad table version\n" ));
|
|
|
| - error = TT_Err_Ok;
|
| + error = FT_Err_Ok;
|
| goto FExit;
|
| }
|
|
|
| @@ -1344,7 +1325,7 @@
|
|
|
|
|
| if ( !face->doblend || blend == NULL )
|
| - return TT_Err_Invalid_Argument;
|
| + return FT_THROW( Invalid_Argument );
|
|
|
| /* to be freed by the caller */
|
| if ( FT_NEW_ARRAY( delta_xy, n_points ) )
|
| @@ -1354,7 +1335,7 @@
|
| if ( glyph_index >= blend->gv_glyphcnt ||
|
| blend->glyphoffsets[glyph_index] ==
|
| blend->glyphoffsets[glyph_index + 1] )
|
| - return TT_Err_Ok; /* no variation data for this glyph */
|
| + return FT_Err_Ok; /* no variation data for this glyph */
|
|
|
| if ( FT_STREAM_SEEK( blend->glyphoffsets[glyph_index] ) ||
|
| FT_FRAME_ENTER( blend->glyphoffsets[glyph_index + 1] -
|
| @@ -1404,7 +1385,7 @@
|
| }
|
| else if ( ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) >= blend->tuplecount )
|
| {
|
| - error = TT_Err_Invalid_Table;
|
| + error = FT_THROW( Invalid_Table );
|
| goto Fail3;
|
| }
|
| else
|
|
|