diff options
author | Akira TAGOH <akira@tagoh.org> | 2014-07-23 19:17:26 +0900 |
---|---|---|
committer | Akira TAGOH <akira@tagoh.org> | 2014-07-23 19:17:26 +0900 |
commit | 107b44f50b6818288ad70608fbe4ec3fd1a7119f (patch) | |
tree | 25765fc3d896f02cdc7f7f3f79925e5a61fe139e /src/fccfg.c | |
parent | 342b908b9696a3f1cf1a45ddd779f3a17d6f9142 (diff) |
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
Diffstat (limited to 'src/fccfg.c')
-rw-r--r-- | src/fccfg.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/fccfg.c b/src/fccfg.c index 6d325951..f8ee8d20 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) |