From 355ed50b185b7879a5c95e1f8697824c6dec6f9f Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 22 Sep 2008 18:51:11 -0400 Subject: [PATCH] Don't call FcPatternGetCharSet in FcSortWalk unless we need to (#17361) --- src/fcmatch.c | 55 +++++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/src/fcmatch.c b/src/fcmatch.c index 77b49cf..a181496 100644 --- a/src/fcmatch.c +++ b/src/fcmatch.c @@ -590,33 +590,40 @@ FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **cs, FcBool tri while (nnode--) { node = *n++; - if (FcPatternGetCharSet (node->pattern, FC_CHARSET, 0, &ncs) == - FcResultMatch) + + /* + * Only fetch node charset if we'd need it + */ + if (trim || build_cs) + { + if (FcPatternGetCharSet (node->pattern, FC_CHARSET, 0, &ncs) != + FcResultMatch) + continue; + } + + /* + * If this font isn't a subset of the previous fonts, + * add it to the list + */ + if (!trim || !*cs || !FcCharSetIsSubset (ncs, *cs)) { - /* - * If this font isn't a subset of the previous fonts, - * add it to the list - */ - if (!trim || !*cs || !FcCharSetIsSubset (ncs, *cs)) + if (trim || build_cs) { - if (trim || build_cs) - { - *cs = FcCharSetMerge (*cs, ncs); - if (*cs == NULL) - return FcFalse; - } - - FcPatternReference (node->pattern); - if (FcDebug () & FC_DBG_MATCHV) - { - printf ("Add "); - FcPatternPrint (node->pattern); - } - if (!FcFontSetAdd (fs, node->pattern)) - { - FcPatternDestroy (node->pattern); + *cs = FcCharSetMerge (*cs, ncs); + if (*cs == NULL) return FcFalse; - } + } + + FcPatternReference (node->pattern); + if (FcDebug () & FC_DBG_MATCHV) + { + printf ("Add "); + FcPatternPrint (node->pattern); + } + if (!FcFontSetAdd (fs, node->pattern)) + { + FcPatternDestroy (node->pattern); + return FcFalse; } } } -- 2.39.2