Bug 72380 - Never drop first font when trimming
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 10 Dec 2013 02:21:57 +0000 (21:21 -0500)
committerBehdad Esfahbod <behdad@behdad.org>
Tue, 10 Dec 2013 02:22:49 +0000 (21:22 -0500)
Let me show it with an example.

Currently:

$ fc-match symbol
symbol.ttf: "Symbol" "Regular"

$ fc-match symbol --sort | head -n 1
Symbol.pfb: "Symbol" "Regular"

$ fc-match symbol --sort --all | head -n 1
symbol.ttf: "Symbol" "Regular"

I want to make sure the above three commands all return the same font.
Ie.  I want to make sure FcFontMatch() always returns the first font
from FcFontSort().  As such, never trim first font.

src/fcmatch.c

index 627aa1a..93e013f 100644 (file)
@@ -743,6 +743,7 @@ FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **csp, FcBool tr
 {
     FcBool ret = FcFalse;
     FcCharSet *cs;
+    int i;
 
     cs = 0;
     if (trim || csp)
@@ -752,7 +753,7 @@ FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **csp, FcBool tr
            goto bail;
     }
 
-    while (nnode--)
+    for (i = 0; i < nnode; i++)
     {
        FcSortNode      *node = *n++;
        FcBool          adds_chars = FcFalse;
@@ -776,7 +777,7 @@ FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **csp, FcBool tr
         * If this font isn't a subset of the previous fonts,
         * add it to the list
         */
-       if (!trim || adds_chars)
+       if (!i || !trim || adds_chars)
        {
            FcPatternReference (node->pattern);
            if (FcDebug () & FC_DBG_MATCHV)