From 5c3deb2985586a06216afd0e6a0c136d4e67a58b Mon Sep 17 00:00:00 2001 From: Patrick Lam Date: Tue, 7 Feb 2006 22:09:01 +0000 Subject: [PATCH] Don't reject dirs that can't be normalized (fixes lilypond, and is correct in the context of application font directories.) Use normalized directory name exclusively in FcCacheReadDirs. reviewed by: plam --- ChangeLog | 13 +++++++++++++ src/fccache.c | 19 ++++++++++--------- src/fcdir.c | 9 ++++----- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index f61b056..4e5687b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2006-02-07 Patrick Lam + * src/fcdir.c (FcDirScanConfig): + + Don't reject dirs that can't be normalized (fixes lilypond, and + is correct in the context of application font directories.) + +2006-02-07 Takashi Iwai + reviewed by: plam + + * src/fccache.c (FcCacheReadDirs): + + Use normalized directory name exclusively in FcCacheReadDirs. + 2006-02-07 Dirk Mueller reviewed by: plam diff --git a/src/fccache.c b/src/fccache.c index aafc485..5a64203 100644 --- a/src/fccache.c +++ b/src/fccache.c @@ -842,7 +842,6 @@ FcCacheReadDirs (FcConfig * config, FcGlobalCache * cache, { int ret = 0; FcChar8 *dir; - const FcChar8 *name; FcStrSet *subdirs; FcStrList *sublist; struct stat statb; @@ -858,14 +857,16 @@ FcCacheReadDirs (FcConfig * config, FcGlobalCache * cache, /* Skip this directory if already updated * to avoid the looped directories via symlinks + * Clearly a dir not in fonts.conf shouldn't be globally cached. */ - name = FcConfigNormalizeFontDir (config, dir); - if (name) - { - if (FcStrSetMember (processed_dirs, dir)) - continue; - FcStrSetAdd (processed_dirs, dir); - } + dir = FcConfigNormalizeFontDir (config, dir); + if (!dir) + continue; + + if (FcStrSetMember (processed_dirs, dir)) + continue; + if (!FcStrSetAdd (processed_dirs, dir)) + continue; subdirs = FcStrSetCreate (); if (!subdirs) @@ -907,7 +908,7 @@ FcCacheReadDirs (FcConfig * config, FcGlobalCache * cache, if (FcDirCacheValid (dir) && FcDirCacheRead (set, subdirs, dir, config)) { /* if an old entry is found in the global cache, disable it */ - if ((d = FcGlobalCacheDirFind (cache, (const char *)name)) != NULL) + if ((d = FcGlobalCacheDirFind (cache, (const char *)dir)) != NULL) { d->state = FcGCDirDisabled; /* save the updated config later without this entry */ diff --git a/src/fcdir.c b/src/fcdir.c index 0e559e5..771c09b 100644 --- a/src/fcdir.c +++ b/src/fcdir.c @@ -120,6 +120,7 @@ FcDirScanConfig (FcFontSet *set, DIR *d; struct dirent *e; FcChar8 *file; + const FcChar8 *d_can = 0; FcChar8 *base; FcBool ret = FcTrue; FcFontSet *tmpSet; @@ -129,11 +130,9 @@ FcDirScanConfig (FcFontSet *set, return FcTrue; if (config) - dir = FcConfigNormalizeFontDir (config, dir); - - /* refuse to scan a directory that can't be normalized. */ - if (!dir) - return FcFalse; + d_can = FcConfigNormalizeFontDir (config, dir); + if (d_can) + dir = d_can; if (!force) {