From: Tom Lane Date: Tue, 4 Jul 2000 06:29:27 +0000 (+0000) Subject: Now that I look at it, is_stopword() is broken and always has been. X-Git-Tag: REL7_1_BETA~1007 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4e71240dbb64b08d16e41ebf60898602124b303d;p=postgresql Now that I look at it, is_stopword() is broken and always has been. Doesn't anyone remember how to program a binary search?? --- diff --git a/contrib/fulltextindex/fti.c b/contrib/fulltextindex/fti.c index be4522321d..a98fcd47dc 100644 --- a/contrib/fulltextindex/fti.c +++ b/contrib/fulltextindex/fti.c @@ -351,10 +351,9 @@ is_stopword(char *text) StopLow = &StopWords[0]; /* initialize stuff for binary search */ StopHigh = endof(StopWords); - if (lengthof(StopWords) == 0) - return false; + /* Loop invariant: *StopLow <= text < *StopHigh */ - while (StopLow <= StopHigh) + while (StopLow < StopHigh) { StopMiddle = StopLow + (StopHigh - StopLow) / 2; difference = strcmp(*StopMiddle, text); @@ -363,7 +362,7 @@ is_stopword(char *text) else if (difference < 0) StopLow = StopMiddle + 1; else - StopHigh = StopMiddle - 1; + StopHigh = StopMiddle; } return (false);