summaryrefslogtreecommitdiff
path: root/src/fccfg.c
diff options
context:
space:
mode:
authorAkira TAGOH <akira@tagoh.org>2017-09-23 18:49:55 +0900
committerAkira TAGOH <akira@tagoh.org>2017-11-20 17:37:22 +0530
commitcf5acaed9621990d890a0dfd655494d7242aba26 (patch)
treeba79b32ef0cb03ee4a89fce85793b4c83234478f /src/fccfg.c
parent6d3b306cbecac22f4e0974c1a6e836289bd522f4 (diff)
Replace the path of subdirs in caches as well
Diffstat (limited to 'src/fccfg.c')
-rw-r--r--src/fccfg.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/fccfg.c b/src/fccfg.c
index e297a23e..e1aef863 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;