Commit 2f486f65 authored by Akira TAGOH's avatar Akira TAGOH

Don't call FcStat when the alias has already been added

Similar changes to 3a3d6ea applies to fclist and fcmatch.
parent 665a5d30
......@@ -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)
......
......@@ -646,36 +646,33 @@ FcFontRenderPrepare (FcConfig *config,
if (FcRefIsConst (&font->ref) && fe->object == FC_FILE_OBJECT)
{
FcValueListPtr l = FcPatternEltValues (fe);
struct stat statb;
FcChar8 *dir, *alias;
while (l->value.type != FcTypeString)
l = FcValueListNext (l);
if (FcStat (FcValueString (&l->value), &statb) < 0)
if (!l)
goto bail0;
dir = FcStrDirname (FcValueString (&l->value));
if (FcHashTableFind (config->alias_table, dir, (void **) &alias))
{
FcChar8 *dir = FcStrDirname (FcValueString (&l->value));
FcChar8 *alias;
if (FcHashTableFind (config->alias_table, dir, (void **) &alias))
{
FcChar8 *base = FcStrBasename (FcValueString (&l->value));
FcChar8 *s = FcStrBuildFilename (alias, base, NULL);
FcValue v;
FcStrFree (alias);
FcStrFree (base);
v.type = FcTypeString;
v.u.s = s;
FcPatternObjectAddWithBinding (new, fe->object,
FcValueCanonicalize (&v),
l->binding,
FcTrue);
FcStrFree (s);
FcStrFree (dir);
goto bail0;
}
else
FcStrFree (dir);
FcChar8 *base = FcStrBasename (FcValueString (&l->value));
FcChar8 *s = FcStrBuildFilename (alias, base, NULL);
FcValue v;
FcStrFree (alias);
FcStrFree (base);
v.type = FcTypeString;
v.u.s = s;
FcPatternObjectAddWithBinding (new, fe->object,
FcValueCanonicalize (&v),
l->binding,
FcTrue);
FcStrFree (s);
FcStrFree (dir);
goto bail0;
}
else
FcStrFree (dir);
}
FcPatternObjectListAdd (new, fe->object,
FcValueListDuplicate (FcPatternEltValues (fe)),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment