/*
- * $XFree86: $
+ * $RCSId: xc/lib/fontconfig/src/fcinit.c,v 1.7 2002/08/22 07:36:44 keithp Exp $
*
- * Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
+ * Copyright © 2001 Keith Packard
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* PERFORMANCE OF THIS SOFTWARE.
*/
-#include <stdlib.h>
#include "fcint.h"
+#include <stdlib.h>
-FcBool
-FcInitFonts (void)
-{
- FcConfig *config;
-
- config = FcConfigGetCurrent ();
- if (!config)
- return FcFalse;
-
- if (FcConfigGetFonts (config, FcSetSystem))
- return FcTrue;
-
- return FcConfigBuildFonts (config);
-}
-
-static FcBool
+static FcConfig *
FcInitFallbackConfig (void)
{
FcConfig *config;
config = FcConfigCreate ();
if (!config)
goto bail0;
- if (!FcConfigAddDir (config, FC_FALLBACK_FONTS))
+ if (!FcConfigAddDir (config, (FcChar8 *) FC_DEFAULT_FONTS))
goto bail1;
- FcConfigSetCurrent (config);
- return FcTrue;
+ if (!FcConfigAddCacheDir (config, (FcChar8 *) FC_CACHEDIR))
+ goto bail1;
+ return config;
bail1:
FcConfigDestroy (config);
bail0:
- return FcFalse;
+ return 0;
+}
+
+int
+FcGetVersion (void)
+{
+ return FC_VERSION;
}
/*
- * Locate and parse the configuration file
+ * Load the configuration files
*/
-FcBool
-FcInitConfig (void)
+FcConfig *
+FcInitLoadConfig (void)
{
- FcConfig *config;
-
- if (FcConfigGetCurrent ())
- return FcTrue;
+ FcConfig *config;
+ FcInitDebug ();
config = FcConfigCreate ();
if (!config)
return FcFalse;
FcConfigDestroy (config);
return FcInitFallbackConfig ();
}
-
+
+ return config;
+}
+
+/*
+ * Load the configuration files and scan for available fonts
+ */
+FcConfig *
+FcInitLoadConfigAndFonts (void)
+{
+ FcConfig *config = FcInitLoadConfig ();
+
+ FcInitDebug ();
+ if (!config)
+ return 0;
+ if (!FcConfigBuildFonts (config))
+ {
+ FcConfigDestroy (config);
+ return 0;
+ }
+ return config;
+}
+
+/*
+ * Initialize the default library configuration
+ */
+FcBool
+FcInit (void)
+{
+ FcConfig *config;
+
+ if (_fcConfig)
+ return FcTrue;
+ config = FcInitLoadConfigAndFonts ();
+ if (!config)
+ return FcTrue;
+ FcConfigSetCurrent (config);
+ if (FcDebug() & FC_DBG_MEMORY)
+ FcMemReport ();
+ return FcTrue;
+}
+
+/*
+ * Free all library-allocated data structures.
+ */
+void
+FcFini (void)
+{
+ if (_fcConfig)
+ FcConfigDestroy (_fcConfig);
+
+ FcPatternFini ();
+ FcCharSetThawAll ();
+}
+
+/*
+ * Reread the configuration and available font lists
+ */
+FcBool
+FcInitReinitialize (void)
+{
+ FcConfig *config;
+
+ config = FcInitLoadConfigAndFonts ();
+ if (!config)
+ return FcFalse;
FcConfigSetCurrent (config);
return FcTrue;
}
FcBool
-FcInit (void)
+FcInitBringUptoDate (void)
{
- return FcInitConfig () && FcInitFonts ();
+ FcConfig *config = FcConfigGetCurrent ();
+ time_t now;
+
+ /*
+ * rescanInterval == 0 disables automatic up to date
+ */
+ if (config->rescanInterval == 0)
+ return FcTrue;
+ /*
+ * Check no more often than rescanInterval seconds
+ */
+ now = time (0);
+ if (config->rescanTime + config->rescanInterval - now > 0)
+ return FcTrue;
+ /*
+ * If up to date, don't reload configuration
+ */
+ if (FcConfigUptoDate (0))
+ return FcTrue;
+ return FcInitReinitialize ();
}
static struct {
- char *name;
+ char name[16];
int alloc_count;
int alloc_mem;
int free_count;
int free_mem;
} FcInUse[FC_MEM_NUM] = {
- { "charset", 0, 0 },
- { "charnode", 0 ,0 },
- { "fontset", 0, 0 },
- { "fontptr", 0, 0 },
- { "objectset", 0, 0 },
- { "objectptr", 0, 0 },
- { "matrix", 0, 0 },
- { "pattern", 0, 0 },
- { "patelt", 0, 0 },
- { "vallist", 0, 0 },
- { "substate", 0, 0 },
- { "string", 0, 0 },
- { "listbuck", 0, 0 },
+ { "charset" },
+ { "charleaf" },
+ { "fontset" },
+ { "fontptr" },
+ { "objectset" },
+ { "objectptr" },
+ { "matrix" },
+ { "pattern" },
+ { "patelt" },
+ { "vallist" },
+ { "substate" },
+ { "string" },
+ { "listbuck" },
+ { "strset" },
+ { "strlist" },
+ { "config" },
+ { "langset" },
+ { "atomic" },
+ { "blanks" },
+ { "cache" },
+ { "strbuf" },
+ { "subst" },
+ { "objecttype" },
+ { "constant" },
+ { "test" },
+ { "expr" },
+ { "vstack" },
+ { "attr" },
+ { "pstack" },
+ { "staticstr" },
};
static int FcAllocCount, FcAllocMem;
printf ("\t Which Alloc Free Active\n");
printf ("\t count bytes count bytes count bytes\n");
for (i = 0; i < FC_MEM_NUM; i++)
- printf ("\t%8.8s%8d%8d%8d%8d%8d%8d\n",
+ printf ("%16.16s%8d%8d%8d%8d%8d%8d\n",
FcInUse[i].name,
FcInUse[i].alloc_count, FcInUse[i].alloc_mem,
FcInUse[i].free_count, FcInUse[i].free_mem,
FcInUse[i].alloc_count - FcInUse[i].free_count,
FcInUse[i].alloc_mem - FcInUse[i].free_mem);
- printf ("\t%8.8s%8d%8d%8d%8d%8d%8d\n",
+ printf ("%16.16s%8d%8d%8d%8d%8d%8d\n",
"Total",
FcAllocCount, FcAllocMem,
FcFreeCount, FcFreeMem,