X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=fc-cache%2Ffc-cache.c;h=6aa53a5a76bc5c2445909f572509f6ca157fffb3;hb=cd9bca69702900ca9b24319c76b2dc9432bb548f;hp=6fa0c5a9cfcf40d0bcb411d8113f21a709790f6e;hpb=716ac8b8033794e2557ad567005dfff4dd95f031;p=fontconfig.git diff --git a/fc-cache/fc-cache.c b/fc-cache/fc-cache.c index 6fa0c5a..6aa53a5 100644 --- a/fc-cache/fc-cache.c +++ b/fc-cache/fc-cache.c @@ -141,6 +141,7 @@ scanDirs (FcStrList *list, FcConfig *config, char *program, FcBool force, FcBool { fprintf (stderr, "Can't create directory set\n"); ret++; + FcFontSetDestroy (set); continue; } @@ -162,27 +163,35 @@ scanDirs (FcStrList *list, FcConfig *config, char *program, FcBool force, FcBool perror (""); ret++; } + FcFontSetDestroy (set); + FcStrSetDestroy (subdirs); continue; } if (stat ((char *) dir, &statb) == -1) { fprintf (stderr, "\"%s\": ", dir); perror (""); + FcFontSetDestroy (set); + FcStrSetDestroy (subdirs); ret++; continue; } if (!S_ISDIR (statb.st_mode)) { fprintf (stderr, "\"%s\": not a directory, skipping\n", dir); + FcFontSetDestroy (set); + FcStrSetDestroy (subdirs); continue; } - if (!FcDirScan (set, subdirs, 0, FcConfigGetBlanks (config), dir, force)) + if (!FcDirScanConfig (set, subdirs, 0, FcConfigGetBlanks (config), dir, force, config)) { fprintf (stderr, "\"%s\": error scanning\n", dir); + FcFontSetDestroy (set); + FcStrSetDestroy (subdirs); ret++; continue; } - if (!force && FcDirCacheValid (dir)) + if (!force && FcDirCacheValid (dir) && FcDirCacheHasCurrentArch (dir)) { if (verbose) printf ("skipping, %d fonts, %d dirs\n", @@ -193,14 +202,22 @@ scanDirs (FcStrList *list, FcConfig *config, char *program, FcBool force, FcBool if (verbose) printf ("caching, %d fonts, %d dirs\n", set->nfont, nsubdirs (subdirs)); + + if (!FcDirCacheValid (dir)) + if (!FcDirCacheUnlink (dir)) + ret++; + if (!FcDirSave (set, subdirs, dir)) { - fprintf (stderr, "Can't save cache in \"%s\"\n", dir); + if (!ret) + fprintf (stderr, "Caches are currently saved to \"%s\"\n", PKGCACHEDIR); + fprintf (stderr, "Can't save cache for \"%s\"\n", dir); ret++; } } FcFontSetDestroy (set); sublist = FcStrListCreate (subdirs); + FcStrSetDestroy (subdirs); if (!sublist) { fprintf (stderr, "Can't create subdir list in \"%s\"\n", dir); @@ -208,7 +225,6 @@ scanDirs (FcStrList *list, FcConfig *config, char *program, FcBool force, FcBool continue; } ret += scanDirs (sublist, config, program, force, verbose); - FcStrSetDestroy (subdirs); } FcStrListDone (list); return ret; @@ -265,6 +281,7 @@ main (int argc, char **argv) fprintf (stderr, "%s: Can't init font config library\n", argv[0]); return 1; } + if (argv[i]) { dirs = FcStrSetCreate ();