[Commit] fontconfig/src fclang.c,1.11,1.12

Keith Packard commit at keithp.com
Mon Jun 9 11:31:05 PDT 2003


Committed by: keithp

Update of /local/src/CVS/fontconfig/src
In directory home.keithp.com:/tmp/cvs-serv5292

Modified Files:
	fclang.c 
Log Message:
Optimization in FcLangSetIndex was broken, occasionally returning a pointer to the wrong location on miss

Index: fclang.c
===================================================================
RCS file: /local/src/CVS/fontconfig/src/fclang.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- fclang.c	17 Apr 2003 17:43:04 -0000	1.11
+++ fclang.c	9 Jun 2003 17:31:03 -0000	1.12
@@ -262,6 +262,7 @@
     int	    low, high, mid = 0;
     int	    cmp = 0;
     FcChar8 firstChar = FcToLower(lang[0]); 
+    FcChar8 secondChar = firstChar ? FcToLower(lang[1]) : '\0';
     
     if (firstChar < 'a')
     {
@@ -290,22 +291,14 @@
 	else
 	{   /* fast path for resolving 2-letter languages (by far the most common) after
 	     * finding the first char (probably already true because of the hash table) */
-	    FcChar8 secondChar = FcToLower(lang[1]);
-	    if (fcLangCharSets[mid].lang[1] > secondChar) /* check second chars */
-	    {
-		high = mid - 1;
-		continue;
-	    }
-	    else if (fcLangCharSets[mid].lang[1] < secondChar)
+	    cmp = fcLangCharSets[mid].lang[1] - secondChar;
+	    if (cmp == 0 && 
+		(fcLangCharSets[mid].lang[2] != '\0' || 
+		 lang[2] != '\0'))
 	    {
-		low = mid + 1;
-		continue;
+		cmp = FcStrCmpIgnoreCase(fcLangCharSets[mid].lang+2, 
+					 lang+2);
 	    }
-	    else if (fcLangCharSets[mid].lang[2] == '\0' && lang[2] == '\0')
-		return mid;
-
-	    else /* identical through the first two charcters, but at least one string didn't end there */
-		cmp = FcStrCmpIgnoreCase(fcLangCharSets[mid].lang+2, lang+2);
 	}
 	if (cmp == 0)
 	    return mid;




More information about the Commit mailing list