[Fontconfig] fontconfig: Branch 'master'

Akira TAGOH tagoh at kemper.freedesktop.org
Tue Nov 5 03:31:08 PST 2013


 fc-cache/fc-cache.c |   26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

New commits:
commit a4443e64c89256087d40462cfbb482950873e366
Author: Akira TAGOH <akira at tagoh.org>
Date:   Tue Nov 5 20:30:35 2013 +0900

    Re-scan font directories only when it contains subdirs
    
    Somewhat improves the performance but still need to think about for the situation
    where both directories and fonts are in.

diff --git a/fc-cache/fc-cache.c b/fc-cache/fc-cache.c
index af7ba6d..27c7513 100644
--- a/fc-cache/fc-cache.c
+++ b/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.


More information about the Fontconfig mailing list