summaryrefslogtreecommitdiff
path: root/src/fclist.c
diff options
context:
space:
mode:
authorAkira TAGOH <akira@tagoh.org>2017-11-15 23:24:24 +0900
committerAkira TAGOH <akira@tagoh.org>2017-11-20 17:37:23 +0530
commit2f486f6584f3c0d6d1c7eadfbc56cd13a8f3122f (patch)
tree78c42e6ee71b5863482e5c418de8021d64744e25 /src/fclist.c
parent665a5d30443cee9ef0eb977857ed2d19ed9f3cb6 (diff)
downloadfontconfig-2f486f6584f3c0d6d1c7eadfbc56cd13a8f3122f.tar.gz
Don't call FcStat when the alias has already been added
Similar changes to 3a3d6ea applies to fclist and fcmatch.
Diffstat (limited to 'src/fclist.c')
-rw-r--r--src/fclist.c49
1 files changed, 22 insertions, 27 deletions
diff --git a/src/fclist.c b/src/fclist.c
index c78f55b..5f92a72 100644
--- a/src/fclist.c
+++ b/src/fclist.c
@@ -450,43 +450,38 @@ FcListAppend (FcListHashTable *table,
{
if (FcRefIsConst (&font->ref) && !strcmp (os->objects[o], FC_FILE))
{
- struct stat statb;
+ FcChar8 *dir, *alias;
+ FcConfig *config = FcConfigGetCurrent (); /* FIXME: this may need to be exported as API? */
for (v = FcPatternEltValues (e); v->value.type != FcTypeString; v = FcValueListNext (v));
if (!v)
goto bail2;
- if (FcStat (FcValueString (&v->value), &statb) < 0)
+ dir = FcStrDirname (FcValueString (&v->value));
+ if (FcHashTableFind (config->alias_table, dir, (void **) &alias))
{
- FcChar8 *dir = FcStrDirname (FcValueString (&v->value));
- FcChar8 *alias;
- FcConfig *config = FcConfigGetCurrent (); /* FIXME: this may need to be exported as API? */
-
- if (FcHashTableFind (config->alias_table, dir, (void **) &alias))
+ FcChar8 *base = FcStrBasename (FcValueString (&v->value));
+ FcChar8 *s = FcStrBuildFilename (alias, base, NULL);
+ FcValue vv;
+
+ FcStrFree (alias);
+ FcStrFree (base);
+ vv.type = FcTypeString;
+ vv.u.s = s;
+ if (!FcPatternAdd (bucket->pattern,
+ os->objects[o],
+ FcValueCanonicalize (&vv),
+ FcTrue))
{
- FcChar8 *base = FcStrBasename (FcValueString (&v->value));
- FcChar8 *s = FcStrBuildFilename (alias, base, NULL);
- FcValue vv;
-
- FcStrFree (alias);
- FcStrFree (base);
- vv.type = FcTypeString;
- vv.u.s = s;
- if (!FcPatternAdd (bucket->pattern,
- os->objects[o],
- FcValueCanonicalize (&vv),
- FcTrue))
- {
- FcStrFree (s);
- FcStrFree (dir);
- goto bail2;
- }
FcStrFree (s);
FcStrFree (dir);
- goto bail3;
+ goto bail2;
}
- else
- FcStrFree (dir);
+ FcStrFree (s);
+ FcStrFree (dir);
+ goto bail3;
}
+ else
+ FcStrFree (dir);
}
for (v = FcPatternEltValues(e), idx = 0; v;
v = FcValueListNext(v), ++idx)