From 107b44f50b6818288ad70608fbe4ec3fd1a7119f Mon Sep 17 00:00:00 2001 From: Akira TAGOH Date: Wed, 23 Jul 2014 19:17:26 +0900 Subject: [PATCH] Don't add duplicate lang Don't add duplicate lang from FC_LANG if the pattern already has. https://bugs.freedesktop.org/show_bug.cgi?id=81186 --- src/fccfg.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/fccfg.c b/src/fccfg.c index 6d32595..f8ee8d2 100644 --- a/src/fccfg.c +++ b/src/fccfg.c @@ -1546,10 +1546,38 @@ FcConfigSubstituteWithPat (FcConfig *config, FcStrSetDestroy (strs); while (l && (lang = FcStrListNext (l))) { + FcPatternElt *e = FcPatternObjectFindElt (p, FC_LANG_OBJECT); + + if (e) + { + FcValueListPtr ll; + + for (ll = FcPatternEltValues (e); ll; ll = FcValueListNext (ll)) + { + FcValue vv = FcValueCanonicalize (&ll->value); + + if (vv.type == FcTypeLangSet) + { + FcLangSet *ls = FcLangSetCreate (); + FcBool b; + + FcLangSetAdd (ls, lang); + b = FcLangSetContains (vv.u.l, ls); + FcLangSetDestroy (ls); + if (b) + goto bail_lang; + } + else + if (FcStrCmpIgnoreCase (vv.u.s, lang) == 0) + goto bail_lang; + } + } v.type = FcTypeString; v.u.s = lang; + FcPatternObjectAddWithBinding (p, FC_LANG_OBJECT, v, FcValueBindingWeak, FcTrue); } + bail_lang: FcStrListDone (l); } if (FcPatternObjectGet (p, FC_PRGNAME_OBJECT, 0, &v) == FcResultNoMatch)