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

Similar changes to 3a3d6ea applies to fclist and fcmatch.
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 @@
 	{
 	    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? */
+		    FcChar8 *base = FcStrBasename (FcValueString (&v->value));
+		    FcChar8 *s = FcStrBuildFilename (alias, base, NULL);
+		    FcValue vv;
 
-		    if (FcHashTableFind (config->alias_table, dir, (void **) &alias))
+		    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)
diff --git a/src/fcmatch.c b/src/fcmatch.c
index 01e5fae..5d30cc7 100644
--- a/src/fcmatch.c
+++ b/src/fcmatch.c
@@ -646,36 +646,33 @@
 	    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;
+		    FcChar8 *base = FcStrBasename (FcValueString (&l->value));
+		    FcChar8 *s = FcStrBuildFilename (alias, base, NULL);
+		    FcValue v;
 
-		    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);
+		    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)),