diff --git a/src/fccache.c b/src/fccache.c index 3bf0de9..538fefe 100644 --- a/src/fccache.c +++ b/src/fccache.c @@ -448,14 +448,11 @@ FcGlobalCacheDirAdd (FcGlobalCache *cache, parent = FcGlobalCacheDirGet (cache, i.dir, i.dir_len, FcTrue); if (!parent) return 0; - subdir = malloc (sizeof (FcGlobalCacheSubdir) + - strlen ((const char *) i.base) + 1); + subdir = malloc (sizeof (FcGlobalCacheSubdir)); if (!subdir) return 0; - FcMemAlloc (FC_MEM_CACHE, sizeof (FcGlobalCacheSubdir) + - strlen ((const char *) i.base) + 1); - subdir->file = (FcChar8 *) (subdir + 1); - strcpy ((char *) subdir->file, (const char *) i.base); + FcMemAlloc (FC_MEM_CACHE, sizeof (FcGlobalCacheSubdir)); + subdir->ent = d; subdir->next = parent->subdirs; parent->subdirs = subdir; return &d->info; @@ -480,8 +477,7 @@ FcGlobalCacheDirDestroy (FcGlobalCacheDir *d) for (s = d->subdirs; s; s = nexts) { nexts = s->next; - FcMemFree (FC_MEM_CACHE, sizeof (FcGlobalCacheSubdir) + - strlen ((char *) s->file) + 1); + FcMemFree (FC_MEM_CACHE, sizeof (FcGlobalCacheSubdir)); free (s); } FcMemFree (FC_MEM_CACHE, sizeof (FcGlobalCacheDir) + d->len + 1); @@ -535,12 +531,15 @@ FcGlobalCacheScanDir (FcFontSet *set, } for (subdir = d->subdirs; subdir; subdir = subdir->next) { + FcFilePathInfo info = FcFilePathInfoGet (subdir->ent->info.file); + if (!FcCacheFontSetAdd (set, dirs, dir, dir_len, - subdir->file, FC_FONT_FILE_DIR)) + info.base, FC_FONT_FILE_DIR)) { cache->broken = FcTrue; return FcFalse; } + FcGlobalCacheReferenced (cache, &subdir->ent->info); } FcGlobalCacheReferenced (cache, &d->info); diff --git a/src/fcdir.c b/src/fcdir.c index 3feb5ee..42aaf74 100644 --- a/src/fcdir.c +++ b/src/fcdir.c @@ -1,5 +1,5 @@ /* - * $XFree86: xc/lib/fontconfig/src/fcdir.c,v 1.7 2002/07/28 10:50:59 keithp Exp $ + * $XFree86: xc/lib/fontconfig/src/fcdir.c,v 1.9 2002/08/31 22:17:32 keithp Exp $ * * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc. * @@ -117,6 +117,8 @@ FcFileScan (FcFontSet *set, { isDir = FcTrue; ret = FcStrSetAdd (dirs, file); + if (cache && ret) + FcGlobalCacheUpdate (cache, file, 0, FC_FONT_FILE_DIR); } /* * Update the cache diff --git a/src/fcint.h b/src/fcint.h index 105a551..63e335f 100644 --- a/src/fcint.h +++ b/src/fcint.h @@ -1,5 +1,5 @@ /* - * $XFree86: xc/lib/fontconfig/src/fcint.h,v 1.24 2002/08/22 07:36:44 keithp Exp $ + * $XFree86: xc/lib/fontconfig/src/fcint.h,v 1.27 2002/08/31 22:17:32 keithp Exp $ * * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc. * @@ -238,18 +238,20 @@ typedef struct _FcGlobalCacheFile { FcChar8 *name; } FcGlobalCacheFile; +typedef struct _FcGlobalCacheDir FcGlobalCacheDir; + typedef struct _FcGlobalCacheSubdir { struct _FcGlobalCacheSubdir *next; - FcChar8 *file; + FcGlobalCacheDir *ent; } FcGlobalCacheSubdir; -typedef struct _FcGlobalCacheDir { +struct _FcGlobalCacheDir { struct _FcGlobalCacheDir *next; FcGlobalCacheInfo info; int len; FcGlobalCacheFile *ents[FC_GLOBAL_CACHE_FILE_HASH_SIZE]; FcGlobalCacheSubdir *subdirs; -} FcGlobalCacheDir; +}; typedef struct _FcGlobalCache { FcGlobalCacheDir *ents[FC_GLOBAL_CACHE_DIR_HASH_SIZE];