]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcinit.c
Warn (and recover) from config file without <cachedir> elements.
[fontconfig.git] / src / fcinit.c
index 8a9bdbda8c6e1634bdbb39deb60ae221838b1d99..693e0b7b3362eadb712c64a1fe6a065ec6576d55 100644 (file)
@@ -22,8 +22,8 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-#include <stdlib.h>
 #include "fcint.h"
+#include <stdlib.h>
 
 static FcConfig *
 FcInitFallbackConfig (void)
@@ -35,6 +35,8 @@ FcInitFallbackConfig (void)
        goto bail0;
     if (!FcConfigAddDir (config, (FcChar8 *) FC_DEFAULT_FONTS))
        goto bail1;
+    if (!FcConfigAddCacheDir (config, (FcChar8 *) FC_CACHEDIR))
+       goto bail1;
     return config;
 
 bail1:
@@ -57,6 +59,7 @@ FcInitLoadConfig (void)
 {
     FcConfig   *config;
     
+    FcInitDebug ();
     config = FcConfigCreate ();
     if (!config)
        return FcFalse;
@@ -66,6 +69,25 @@ FcInitLoadConfig (void)
        FcConfigDestroy (config);
        return FcInitFallbackConfig ();
     }
+    
+    if (config->cacheDirs && config->cacheDirs->num == 0)
+    {
+       fprintf (stderr,
+                "Fontconfig warning: no <cachedir> elements found. Check configuration.\n");
+       fprintf (stderr,
+                "Fontconfig warning: adding <cachedir>%s</cachedir>\n",
+                FC_CACHEDIR);
+       fprintf (stderr,
+                "Fontconfig warning: adding <cachedir>~/.fontconfig</cachedir>\n");
+       if (!FcConfigAddCacheDir (config, (FcChar8 *) FC_CACHEDIR) ||
+           !FcConfigAddCacheDir (config, (FcChar8 *) "~/.fontconfig"))
+       {
+           fprintf (stderr,
+                    "Fontconfig error: out of memory");
+           FcConfigDestroy (config);
+           return FcInitFallbackConfig ();
+       }
+    }
 
     return config;
 }
@@ -78,6 +100,7 @@ FcInitLoadConfigAndFonts (void)
 {
     FcConfig   *config = FcInitLoadConfig ();
 
+    FcInitDebug ();
     if (!config)
        return 0;
     if (!FcConfigBuildFonts (config))
@@ -117,7 +140,7 @@ FcFini (void)
        FcConfigDestroy (_fcConfig);
 
     FcPatternFini ();
-    FcCharSetThawAll ();
+    FcCacheFini ();
 }
 
 /*
@@ -161,7 +184,7 @@ FcInitBringUptoDate (void)
 }
 
 static struct {
-    char    *name;
+    char    name[16];
     int            alloc_count;
     int            alloc_mem;
     int            free_count;
@@ -206,9 +229,6 @@ static int  FcMemNotice = 1*1024*1024;
 
 static int  FcAllocNotify, FcFreeNotify;
 
-void
-FcValueListReport (void);
-
 void
 FcMemReport (void)
 {
@@ -231,7 +251,6 @@ FcMemReport (void)
            FcAllocMem - FcFreeMem);
     FcAllocNotify = 0;
     FcFreeNotify = 0;
-    FcValueListReport ();
 }
 
 void
@@ -263,3 +282,6 @@ FcMemFree (int kind, int size)
            FcMemReport ();
     }
 }
+#define __fcinit__
+#include "fcaliastail.h"
+#undef __fcinit__