diff --git a/ChangeLog b/ChangeLog index 1a2df15fb..14b5ed7a6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,8 @@ -2014-09-08 Alexei Podtelezhnikov +2014-09-19 Alexei Podtelezhnikov + + * src/base/ftcalc.c: Harmonize code. + +2014-09-15 Alexei Podtelezhnikov [base] Tighten the overflow check in `FT_MulDiv'. diff --git a/src/base/ftcalc.c b/src/base/ftcalc.c index c333b9b36..be65a7aab 100644 --- a/src/base/ftcalc.c +++ b/src/base/ftcalc.c @@ -166,11 +166,10 @@ FT_Long b, FT_Long c ) { - FT_Int s; + FT_Int s = 1; FT_Long d; - s = 1; if ( a < 0 ) { a = -a; s = -1; } if ( b < 0 ) { b = -b; s = -s; } if ( c < 0 ) { c = -c; s = -s; } @@ -189,11 +188,10 @@ FT_Long b, FT_Long c ) { - FT_Int s; + FT_Int s = 1; FT_Long d; - s = 1; if ( a < 0 ) { a = -a; s = -1; } if ( b < 0 ) { b = -b; s = -s; } if ( c < 0 ) { c = -c; s = -s; } @@ -221,17 +219,8 @@ FT_Long c; - if ( a < 0 ) - { - a = -a; - s = -1; - } - - if ( b < 0 ) - { - b = -b; - s = -s; - } + if ( a < 0 ) { a = -a; s = -1; } + if ( b < 0 ) { b = -b; s = -s; } c = (FT_Long)( ( (FT_Int64)a * b + 0x8000L ) >> 16 ); @@ -251,23 +240,11 @@ FT_Long q; - if ( a < 0 ) - { - a = -a; - s = -1; - } - if ( b < 0 ) - { - b = -b; - s = -s; - } + if ( a < 0 ) { a = -a; s = -1; } + if ( b < 0 ) { b = -b; s = -s; } - if ( b == 0 ) - /* check for division by 0 */ - q = 0x7FFFFFFFL; - else - /* compute result directly */ - q = (FT_Long)( ( ( (FT_UInt64)a << 16 ) + ( b >> 1 ) ) / b ); + q = (FT_Long)( b > 0 ? ( ( (FT_UInt64)a << 16 ) + ( b >> 1 ) ) / b + : 0x7FFFFFFFL ); return ( s < 0 ? -q : q ); } @@ -412,16 +389,16 @@ FT_Long b, FT_Long c ) { - long s; + FT_Int s = 1; /* XXX: this function does not allow 64-bit arguments */ if ( a == 0 || b == c ) return a; - s = a; a = FT_ABS( a ); - s ^= b; b = FT_ABS( b ); - s ^= c; c = FT_ABS( c ); + if ( a < 0 ) { a = -a; s = -1; } + if ( b < 0 ) { b = -b; s = -s; } + if ( c < 0 ) { c = -c; s = -s; } if ( c == 0 ) a = 0x7FFFFFFFL; @@ -451,15 +428,15 @@ FT_Long b, FT_Long c ) { - long s; + FT_Int s = 1; if ( a == 0 || b == c ) return a; - s = a; a = FT_ABS( a ); - s ^= b; b = FT_ABS( b ); - s ^= c; c = FT_ABS( c ); + if ( a < 0 ) { a = -a; s = -1; } + if ( b < 0 ) { b = -b; s = -s; } + if ( c < 0 ) { c = -c; s = -s; } if ( c == 0 ) a = 0x7FFFFFFFL; @@ -550,15 +527,15 @@ #else /* 0 */ - FT_Long s; + FT_Int s = 1; FT_ULong ua, ub; if ( a == 0 || b == 0x10000L ) return a; - s = a; a = FT_ABS( a ); - s ^= b; b = FT_ABS( b ); + if ( a < 0 ) { a = -a; s = -1; } + if ( b < 0 ) { b = -b; s = -s; } ua = (FT_ULong)a; ub = (FT_ULong)b; @@ -587,13 +564,13 @@ FT_DivFix( FT_Long a, FT_Long b ) { - FT_Long s; + FT_Int s = 1; FT_Long q; /* XXX: this function does not allow 64-bit arguments */ - s = a; a = FT_ABS( a ); - s ^= b; b = FT_ABS( b ); + if ( a < 0 ) { a = -a; s = -1; } + if ( b < 0 ) { b = -b; s = -s; } if ( b == 0 ) {