diff options
author | Akira TAGOH <akira@tagoh.org> | 2017-09-23 18:49:55 +0900 |
---|---|---|
committer | Akira TAGOH <akira@tagoh.org> | 2017-11-20 17:37:22 +0530 |
commit | cf5acaed9621990d890a0dfd655494d7242aba26 (patch) | |
tree | ba79b32ef0cb03ee4a89fce85793b4c83234478f /src/fccfg.c | |
parent | 6d3b306cbecac22f4e0974c1a6e836289bd522f4 (diff) |
Replace the path of subdirs in caches as well
Diffstat (limited to 'src/fccfg.c')
-rw-r--r-- | src/fccfg.c | 22 |
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; |