diff --git a/src/fccfg.c b/src/fccfg.c index e297a23..e1aef86 100644 --- a/src/fccfg.c +++ b/src/fccfg.c @@ -370,9 +370,29 @@ FcConfigAddCache (FcConfig *config, FcCache *cache, { for (i = 0; i < cache->dirs_count; i++) { - FcChar8 *dir = FcOffsetToPtr (dirs, dirs[i], FcChar8); + const FcChar8 *dir = FcCacheSubdir (cache, i); + FcChar8 *s = NULL; + struct stat statb; + + if (FcStat (dir, &statb) < 0) + { + const FcChar8 *alias; + FcChar8 *d = FcStrDirname (dir); + + if ((alias = FcDirCacheFindAliasPath (dir))) + dir = alias; + else if ((alias = FcDirCacheFindAliasPath (d))) + { + FcChar8 *base = FcStrBasename (dir); + dir = s = FcStrBuildFilename (alias, base, NULL); + FcStrFree (base); + } + FcStrFree (d); + } if (FcConfigAcceptFilename (config, dir)) FcStrSetAddFilename (dirSet, dir); + if (s) + FcStrFree (s); } } return FcTrue;