]> git.wh0rd.org - fontconfig.git/commitdiff
Bug 23419 - "contains" expression seems not working on the fontconfig rule
authorBehdad Esfahbod <behdad@behdad.org>
Wed, 26 Aug 2009 00:39:20 +0000 (20:39 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Wed, 26 Aug 2009 00:39:20 +0000 (20:39 -0400)
Fix bug in FcLangSetContains(), similar to
5c6d1ff23bda4386984a1d6e4c024958f8f5547c

fc-lang/fc-lang.c
src/fclang.c

index a00aabc57687a6ba2238f6e44c9f231574a8dcb7..21d568d7e8d8e7bdcef48f6ba4fd4e4e77b5b86b 100644 (file)
@@ -370,6 +370,7 @@ main (int argc, char **argv)
     printf ("#define LEAF(o,l)   (LEAF0 + l * sizeof (FcCharLeaf) - (OFF0 + o * sizeof (intptr_t)))\n");
     printf ("#define fcLangCharSets (fcLangData.langCharSets)\n");
     printf ("#define fcLangCharSetIndices (fcLangData.langIndices)\n");
+    printf ("#define fcLangCharSetIndicesInv (fcLangData.langIndicesInv)\n");
     printf ("\n");
     
     printf ("static const struct {\n"
@@ -378,9 +379,10 @@ main (int argc, char **argv)
            "    intptr_t       leaf_offsets[%d];\n"
            "    FcChar16       numbers[%d];\n"
            "    FcChar%s       langIndices[%d];\n"
+           "    FcChar%s       langIndicesInv[%d];\n"
            "} fcLangData = {\n",
            nsets, tl, tn, tn,
-           nsets < 256 ? "8 " : "16", nsets);
+           nsets < 256 ? "8 " : "16", nsets, nsets < 256 ? "8 " : "16", nsets);
        
     /*
      * Dump sets
@@ -469,15 +471,27 @@ main (int argc, char **argv)
     }
     printf ("},\n");
 
+    /* langIndices */
     printf ("{\n");
     for (i = 0; sets[i]; i++)
     {
        printf ("    %d, /* %s */\n", entries[i].id, names[i]);
     }
+    printf ("},\n");
+
+    /* langIndicesInv */
+    printf ("{\n");
+    {
+       static int              entries_inv[MAX_LANG];
+       for (i = 0; sets[i]; i++)
+         entries_inv[entries[i].id] = i;
+       for (i = 0; sets[i]; i++)
+           printf ("    %d, /* %s */\n", entries_inv[i], names[entries_inv[i]]);
+    }
     printf ("}\n");
-    
+
     printf ("};\n\n");
-    
+
     printf ("#define NUM_LANG_CHAR_SET %d\n", i);
     num_lang_set_map = (i + 31) / 32;
     printf ("#define NUM_LANG_SET_MAP  %d\n", num_lang_set_map);
index c5ad5ef9b02aa0eeb755167368efef961796a9d2..6a3b7b5e3dbd44a71d9b54ae44a51561ea5556a0 100644 (file)
@@ -686,10 +686,10 @@ FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb)
                if (missing & (1 << j)) 
                {
                    if (!FcLangSetContainsLang (lsa,
-                                               fcLangCharSets[i*32 + j].lang))
+                                               fcLangCharSets[fcLangCharSetIndicesInv[i*32 + j]].lang))
                    {
                        if (FcDebug() & FC_DBG_MATCHV)
-                           printf ("\tMissing bitmap %s\n", fcLangCharSets[i*32+j].lang);
+                           printf ("\tMissing bitmap %s\n", fcLangCharSets[fcLangCharSetIndicesInv[i*32+j]].lang);
                        return FcFalse;
                    }
                }