From: Behdad Esfahbod Date: Wed, 26 Aug 2009 00:39:20 +0000 (-0400) Subject: Bug 23419 - "contains" expression seems not working on the fontconfig rule X-Git-Tag: 2.7.2~3 X-Git-Url: https://git.wh0rd.org/?p=fontconfig.git;a=commitdiff_plain;h=d354a321ee51f0bb70a39faeed541d1a90477d7d Bug 23419 - "contains" expression seems not working on the fontconfig rule Fix bug in FcLangSetContains(), similar to 5c6d1ff23bda4386984a1d6e4c024958f8f5547c --- diff --git a/fc-lang/fc-lang.c b/fc-lang/fc-lang.c index a00aabc..21d568d 100644 --- a/fc-lang/fc-lang.c +++ b/fc-lang/fc-lang.c @@ -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); diff --git a/src/fclang.c b/src/fclang.c index c5ad5ef..6a3b7b5 100644 --- a/src/fclang.c +++ b/src/fclang.c @@ -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; } }