diff options
Diffstat (limited to 'fontconfig')
-rw-r--r-- | fontconfig/fc-cache/fc-cache.c | 26 | ||||
-rw-r--r-- | fontconfig/fc-glyphname/fc-glyphname.c | 2 | ||||
-rw-r--r-- | fontconfig/fc-lang/fc-lang.c | 2 | ||||
-rw-r--r-- | fontconfig/src/fcname.c | 2 | ||||
-rw-r--r-- | fontconfig/src/fcstr.c | 8 |
5 files changed, 28 insertions, 12 deletions
diff --git a/fontconfig/fc-cache/fc-cache.c b/fontconfig/fc-cache/fc-cache.c index af7ba6dd6..27c751304 100644 --- a/fontconfig/fc-cache/fc-cache.c +++ b/fontconfig/fc-cache/fc-cache.c @@ -118,7 +118,7 @@ usage (char *program, int error) static FcStrSet *processed_dirs; static int -scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, FcBool verbose, FcBool recursive, int *changed) +scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, FcBool verbose, FcBool recursive, int *changed, FcStrSet *updateDirs) { int ret = 0; const FcChar8 *dir; @@ -137,7 +137,10 @@ scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, { if (verbose) { - printf ("%s: ", dir); + if (!recursive) + printf ("Re-scanning %s: ", dir); + else + printf ("%s: ", dir); fflush (stdout); } @@ -226,6 +229,8 @@ scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, } for (i = 0; i < FcCacheNumSubdir (cache); i++) FcStrSetAdd (subdirs, FcCacheSubdir (cache, i)); + if (updateDirs && FcCacheNumSubdir (cache) > 0) + FcStrSetAdd (updateDirs, dir); FcDirCacheUnload (cache); @@ -238,7 +243,7 @@ scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, continue; } FcStrSetAdd (processed_dirs, dir); - ret += scanDirs (sublist, config, force, really_force, verbose, recursive, changed); + ret += scanDirs (sublist, config, force, really_force, verbose, recursive, changed, updateDirs); FcStrListDone (sublist); } else @@ -271,7 +276,7 @@ cleanCacheDirectories (FcConfig *config, FcBool verbose) int main (int argc, char **argv) { - FcStrSet *dirs; + FcStrSet *dirs, *updateDirs; FcStrList *list; FcBool verbose = FcFalse; FcBool force = FcFalse; @@ -369,13 +374,18 @@ main (int argc, char **argv) fprintf(stderr, "Cannot malloc\n"); return 1; } - + + updateDirs = FcStrSetCreate (); changed = 0; - ret = scanDirs (list, config, force, really_force, verbose, FcTrue, &changed); + ret = scanDirs (list, config, force, really_force, verbose, FcTrue, &changed, updateDirs); /* Update the directory cache again to avoid the race condition as much as possible */ - FcStrListFirst (list); - ret += scanDirs (list, config, FcTrue, really_force, verbose, FcFalse, &changed); FcStrListDone (list); + list = FcStrListCreate (updateDirs); + if (list) + { + ret += scanDirs (list, config, FcTrue, really_force, verbose, FcFalse, &changed, NULL); + FcStrListDone (list); + } /* * Try to create CACHEDIR.TAG anyway. diff --git a/fontconfig/fc-glyphname/fc-glyphname.c b/fontconfig/fc-glyphname/fc-glyphname.c index 840278164..078490ae4 100644 --- a/fontconfig/fc-glyphname/fc-glyphname.c +++ b/fontconfig/fc-glyphname/fc-glyphname.c @@ -233,7 +233,7 @@ dump (FcGlyphName * const *table, const char *name) int main (int argc FC_UNUSED, char **argv) { - char *files[MAX_GLYPHFILE]; + char *files[MAX_GLYPHFILE + 1]; char line[1024]; FILE *f; int i; diff --git a/fontconfig/fc-lang/fc-lang.c b/fontconfig/fc-lang/fc-lang.c index 0f4217f78..38fc69735 100644 --- a/fontconfig/fc-lang/fc-lang.c +++ b/fontconfig/fc-lang/fc-lang.c @@ -254,7 +254,7 @@ static int compare (const void *a, const void *b) int main (int argc FC_UNUSED, char **argv) { - static Entry entries[MAX_LANG]; + static Entry entries[MAX_LANG + 1]; static FcCharSet *sets[MAX_LANG]; static int duplicate[MAX_LANG]; static int country[MAX_LANG]; diff --git a/fontconfig/src/fcname.c b/fontconfig/src/fcname.c index 712b2fad3..f302948dd 100644 --- a/fontconfig/src/fcname.c +++ b/fontconfig/src/fcname.c @@ -420,6 +420,8 @@ FcNameParse (const FcChar8 *name) if ((c = FcNameGetConstant (save))) { t = FcNameGetObjectType ((char *) c->object); + if (t == NULL) + goto bail2; switch ((int) t->type) { case FcTypeInteger: case FcTypeDouble: diff --git a/fontconfig/src/fcstr.c b/fontconfig/src/fcstr.c index 570717243..024dae325 100644 --- a/fontconfig/src/fcstr.c +++ b/fontconfig/src/fcstr.c @@ -924,12 +924,16 @@ FcStrBuildFilename (const FcChar8 *path, ...) { va_list ap; - FcStrSet *sset = FcStrSetCreate (); + FcStrSet *sset; FcStrList *list; FcChar8 *s, *ret = NULL, *p; size_t len = 0; - if (!sset || !path) + if (!path) + return NULL; + + sset = FcStrSetCreate (); + if (!sset) return NULL; if (!FcStrSetAdd (sset, path)) |