From e01a41d5ebf2437652b99d20761449030049622a Mon Sep 17 00:00:00 2001 From: David Turner Date: Tue, 28 Mar 2000 11:17:58 +0000 Subject: [PATCH] fixed a stupid bug in FT_MulFix --- src/base/ftcalc.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/base/ftcalc.c b/src/base/ftcalc.c index e2cc4d773..544ca0e5e 100644 --- a/src/base/ftcalc.c +++ b/src/base/ftcalc.c @@ -325,7 +325,7 @@ FT_Long b ) { FT_Long s; - + FT_ULong ua, ub; if ( a == 0 || b == 0x10000L ) return a; @@ -333,19 +333,22 @@ s = a; a = ABS(a); s ^= b; b = ABS(b); - if ( a <= 2048 && b <= 1048576L ) + ua = (FT_ULong)a; + ub = (FT_ULong)b; + + if ( ua <= 2048 && ub <= 1048576L ) { - a = ( a*b + 0x8000 ) >> 16; + ua = ( ua*ub + 0x8000 ) >> 16; } else { - FT_Long al = a & 0xFFFF; + FT_ULong al = ua & 0xFFFF; - a = (a >> 16)*b + al*(b >> 16) + ( al*(b & 0xFFFF) >> 16 ); + ua = (ua >> 16)*ub + al*(ub >> 16) + ( al*(ub & 0xFFFF) >> 16 ); } - return ( s < 0 ? -a : a ); + return ( s < 0 ? -(FT_Long)ua : ua ); }