fontconfig/fc-validatecache-option.diff

142 lines
4.0 KiB
Diff

--- src/fcint.h-dist 2006-02-08 20:57:29.000000000 +0100
+++ src/fcint.h 2006-02-08 20:58:06.000000000 +0100
@@ -414,6 +414,10 @@ struct _FcConfig {
*/
time_t rescanTime; /* last time information was scanned */
int rescanInterval; /* interval between scans */
+ /*
+ * Validate cache files at each open?
+ */
+ FcBool validateCache;
};
extern FcConfig *_fcConfig;
--- src/fccfg.c-dist 2006-02-08 21:07:16.000000000 +0100
+++ src/fccfg.c 2006-02-08 21:07:38.000000000 +0100
@@ -117,6 +117,7 @@ FcConfigCreate (void)
config->rescanTime = time(0);
config->rescanInterval = 30;
+ config->validateCache = 1;
return config;
--- src/fcxml.c-dist 2006-02-08 20:55:00.000000000 +0100
+++ src/fcxml.c 2006-02-08 20:57:18.000000000 +0100
@@ -293,6 +293,7 @@ typedef enum _FcElement {
FcElementBlank,
FcElementRescan,
+ FcElementValidatecache,
FcElementPrefer,
FcElementAccept,
@@ -353,6 +354,7 @@ static struct {
{ "blank", FcElementBlank },
{ "rescan", FcElementRescan },
+ { "validatecache", FcElementValidatecache },
{ "prefer", FcElementPrefer },
{ "accept", FcElementAccept },
@@ -1099,6 +1101,20 @@ FcParseRescan (FcConfigParse *parse)
}
static void
+FcParseValidatecache (FcConfigParse *parse)
+{
+ int n = FcVStackElements (parse);
+ while (n-- > 0)
+ {
+ FcVStack *v = FcVStackFetch (parse, n);
+ if (v->tag != FcVStackBool)
+ FcConfigMessage (parse, FcSevereWarning, "non-boolean validatecache");
+ else
+ parse->config->validateCache = v->u.bool;
+ }
+}
+
+static void
FcParseInt (FcConfigParse *parse)
{
FcChar8 *s, *end;
@@ -2086,6 +2102,9 @@ FcEndElement(void *userData, const XML_C
case FcElementRescan:
FcParseRescan (parse);
break;
+ case FcElementValidatecache:
+ FcParseValidatecache (parse);
+ break;
case FcElementPrefer:
FcParseFamilies (parse, FcVStackPrefer);
--- src/fccache.c-dist 2006-02-08 20:58:21.000000000 +0100
+++ src/fccache.c 2006-02-08 21:38:23.000000000 +0100
@@ -221,9 +221,10 @@ FcGlobalCacheLoad (FcGlobalCache *cac
/* Directory must be older than the global cache file; also
cache must be newer than the config file. */
- if (stat ((char *) name_buf, &dir_stat) < 0 ||
- dir_stat.st_mtime > cache_stat.st_mtime ||
- (config_time.set && cache_stat.st_mtime < config_time.time))
+ if (config->validateCache &&
+ (stat ((char *) name_buf, &dir_stat) < 0 ||
+ dir_stat.st_mtime > cache_stat.st_mtime ||
+ (config_time.set && cache_stat.st_mtime < config_time.time)))
{
FcCache md;
off_t off;
@@ -876,6 +877,27 @@ FcCacheReadDirs (FcConfig * config, FcGl
continue;
}
+ if (! config->validateCache)
+ {
+ /* We trust cache files -- if not found, just ignore that directory
+ */
+ if ((cache && FcGlobalCacheReadDir (set, subdirs, cache, (char *)dir,
+ config)) ||
+ FcDirCacheRead (set, subdirs, dir, config))
+ {
+ sublist = FcStrListCreate (subdirs);
+ FcStrSetDestroy (subdirs);
+ if (!sublist)
+ {
+ fprintf (stderr, "Can't create subdir list in \"%s\"\n", dir);
+ ret++;
+ continue;
+ }
+ ret += FcCacheReadDirs (config, cache, sublist, set, processed_dirs);
+ }
+ continue;
+ }
+
if (access ((char *) dir, X_OK) < 0)
{
switch (errno) {
--- fonts.dtd-dist 2006-02-08 21:12:11.000000000 +0100
+++ fonts.dtd 2006-02-08 21:14:00.000000000 +0100
@@ -40,7 +40,7 @@
<!--
Global library configuration data
-->
-<!ELEMENT config (blank|rescan)*>
+<!ELEMENT config (blank|rescan|validatecache)*>
<!--
Specify the set of Unicode encoding values which
@@ -82,6 +82,13 @@
<!ELEMENT rescan (int)>
<!--
+ Validate cache files dynamically
+ If this is set to false, fontconfig trusts cache files and never
+ checks the timestamp or changes of contents.
+ -->
+<!ELEMENT validatecache (bool)>
+
+<!--
Edit list of available fonts at startup/reload time
-->
<!ELEMENT selectfont (rejectfont | acceptfont)* >