From babe6af16740f3fa3c19ef4b689f29d574c5fbc8 Mon Sep 17 00:00:00 2001 From: Alexei Podtelezhnikov Date: Mon, 18 Sep 2023 15:01:26 +0000 Subject: [PATCH] * src/base/ftcalc.c /* FT_SqrtFixed */: Fix defunct overflow. --- src/base/ftcalc.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/base/ftcalc.c b/src/base/ftcalc.c index ba4d5e3fd..0b915992a 100644 --- a/src/base/ftcalc.c +++ b/src/base/ftcalc.c @@ -917,17 +917,18 @@ /* documentation is in ftcalc.h */ - /* Algorithm and code by Christophe Meessen (1993). */ + /* Algorithm and code by Christophe Meessen (1993) */ + /* with overflow fixed. */ FT_BASE_DEF( FT_UInt32 ) - FT_SqrtFixed( FT_UInt32 r ) + FT_SqrtFixed( FT_UInt32 v ) { - FT_UInt32 t, q, b; + FT_UInt32 r = v >> 1; + FT_UInt32 q = ( v & 1 ) << 15; + FT_UInt32 b = 0x20000000; + FT_UInt32 t; - q = 0; - - b = 0x40000000; - while ( b > 0x40 ) + do { t = q + b; if ( r >= t ) @@ -938,8 +939,9 @@ r <<= 1; b >>= 1; } + while ( b > 0x20 ); - return q >> 8; + return q >> 7; } #endif /* 0 */