]> git.wh0rd.org - fontconfig.git/blobdiff - src/fccfg.c
Really fix the global cache: make sure we're reading and writing the same
[fontconfig.git] / src / fccfg.c
index 0032a9bbf62d52aeca6aa86287dbad50eafd60f6..a14c6b5914e1e096e0fa7e320fab603497af2ebe 100644 (file)
@@ -250,6 +250,7 @@ FcConfigBuildFonts (FcConfig *config)
     FcFontSet      *fonts, *cached_fonts;
     FcGlobalCache   *cache;
     FcStrList      *list;
+    FcStrSet       *oldDirs;
     FcChar8        *dir;
 
     fonts = FcFontSetCreate ();
@@ -260,20 +261,24 @@ FcConfigBuildFonts (FcConfig *config)
     if (!cache)
        goto bail1;
 
+    oldDirs = FcStrSetCreate ();
+    if (!oldDirs)
+        goto bail2;
+
     if (config->cache)
-       FcGlobalCacheLoad (cache, config->cache);
+       FcGlobalCacheLoad (cache, oldDirs, config->cache);
 
     cached_fonts = FcCacheRead(config, cache);
     if (!cached_fonts)
     {
        list = FcConfigGetFontDirs (config);
        if (!list)
-           goto bail1;
+           goto bail2;
        
        while ((dir = FcStrListNext (list)))
        {
            if (FcDebug () & FC_DBG_FONTSET)
-               printf ("scan dir %s\n", dir);
+               printf ("build scan dir %s\n", dir);
            FcDirScanConfig (fonts, config->fontDirs, cache, 
                             config->blanks, dir, FcFalse, config);
        }
@@ -284,6 +289,15 @@ FcConfigBuildFonts (FcConfig *config)
     {
        int i;
 
+        for (i = 0; i < oldDirs->num; i++)
+        {
+           if (FcDebug () & FC_DBG_FONTSET)
+               printf ("scan dir %s\n", dir);
+           FcDirScanConfig (fonts, config->fontDirs, cache, 
+                            config->blanks, oldDirs->strs[i], 
+                             FcFalse, config);
+       }
+
        for (i = 0; i < cached_fonts->nfont; i++)
        {
            if (FcConfigAcceptFont (config, cached_fonts->fonts[i]))
@@ -301,10 +315,13 @@ FcConfigBuildFonts (FcConfig *config)
     if (config->cache)
        FcGlobalCacheSave (cache, config->cache);
     FcGlobalCacheDestroy (cache);
+    FcStrSetDestroy (oldDirs);
 
     FcConfigSetFonts (config, fonts, FcSetSystem);
     
     return FcTrue;
+bail2:
+    FcStrSetDestroy (oldDirs);
 bail1:
     FcFontSetDestroy (fonts);
 bail0: