diff options
author | marha <marha@users.sourceforge.net> | 2013-10-02 11:13:08 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2013-10-02 11:13:08 +0200 |
commit | c3594c6c050a987fb891a1c7cf0c83102fbbec46 (patch) | |
tree | 33b215c07359fff941f32fc89a8cf3e968d334a9 /fontconfig | |
parent | 1881d1a5c46cc9efb394f84b69f58c000ee1118b (diff) | |
parent | 8092f320c341a6b3a1b428fdd4473859d5db8b79 (diff) | |
download | vcxsrv-c3594c6c050a987fb891a1c7cf0c83102fbbec46.tar.gz vcxsrv-c3594c6c050a987fb891a1c7cf0c83102fbbec46.tar.bz2 vcxsrv-c3594c6c050a987fb891a1c7cf0c83102fbbec46.zip |
Merge remote-tracking branch 'origin/released'
* origin/released:
fontconfig mesa pixman xkeyboard-config git update 2 Okt 2013
Conflicts:
mesalib/src/glsl/ast.h
mesalib/src/glsl/glsl_parser_extras.h
Diffstat (limited to 'fontconfig')
-rw-r--r-- | fontconfig/fc-cache/fc-cache.c | 62 | ||||
-rw-r--r-- | fontconfig/fontconfig/fontconfig.h | 3 | ||||
-rw-r--r-- | fontconfig/src/fcstr.c | 6 |
3 files changed, 45 insertions, 26 deletions
diff --git a/fontconfig/fc-cache/fc-cache.c b/fontconfig/fc-cache/fc-cache.c index aeb0af29b..af7ba6dd6 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, int *changed) +scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, FcBool verbose, FcBool recursive, int *changed) { int ret = 0; const FcChar8 *dir; @@ -141,7 +141,7 @@ scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, fflush (stdout); } - if (FcStrSetMember (processed_dirs, dir)) + if (recursive && FcStrSetMember (processed_dirs, dir)) { if (verbose) printf ("skipping, looped directory detected\n"); @@ -213,32 +213,37 @@ scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, ret++; } } - - subdirs = FcStrSetCreate (); - if (!subdirs) + + if (recursive) { - fprintf (stderr, "%s: Can't create subdir set\n", dir); - ret++; - FcDirCacheUnload (cache); - continue; - } - for (i = 0; i < FcCacheNumSubdir (cache); i++) - FcStrSetAdd (subdirs, FcCacheSubdir (cache, i)); + subdirs = FcStrSetCreate (); + if (!subdirs) + { + fprintf (stderr, "%s: Can't create subdir set\n", dir); + ret++; + FcDirCacheUnload (cache); + continue; + } + for (i = 0; i < FcCacheNumSubdir (cache); i++) + FcStrSetAdd (subdirs, FcCacheSubdir (cache, i)); - FcDirCacheUnload (cache); + FcDirCacheUnload (cache); - sublist = FcStrListCreate (subdirs); - FcStrSetDestroy (subdirs); - if (!sublist) - { - fprintf (stderr, "%s: Can't create subdir list\n", dir); - ret++; - continue; + sublist = FcStrListCreate (subdirs); + FcStrSetDestroy (subdirs); + if (!sublist) + { + fprintf (stderr, "%s: Can't create subdir list\n", dir); + ret++; + continue; + } + FcStrSetAdd (processed_dirs, dir); + ret += scanDirs (sublist, config, force, really_force, verbose, recursive, changed); + FcStrListDone (sublist); } - FcStrSetAdd (processed_dirs, dir); - ret += scanDirs (sublist, config, force, really_force, verbose, changed); + else + FcDirCacheUnload (cache); } - FcStrListDone (list); return ret; } @@ -366,7 +371,11 @@ main (int argc, char **argv) } changed = 0; - ret = scanDirs (list, config, force, really_force, verbose, &changed); + ret = scanDirs (list, config, force, really_force, verbose, FcTrue, &changed); + /* 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); /* * Try to create CACHEDIR.TAG anyway. @@ -379,6 +388,8 @@ main (int argc, char **argv) cleanCacheDirectories (config, verbose); + FcConfigDestroy (config); + FcFini (); /* * Now we need to sleep a second (or two, to be extra sure), to make * sure that timestamps for changes after this run of fc-cache are later @@ -386,8 +397,7 @@ main (int argc, char **argv) * sleep(3) can't be interrupted by a signal here -- this isn't in the * library, and there aren't any signals flying around here. */ - FcConfigDestroy (config); - FcFini (); + /* the resolution of mtime on FAT is 2 seconds */ if (changed) sleep (2); if (verbose) diff --git a/fontconfig/fontconfig/fontconfig.h b/fontconfig/fontconfig/fontconfig.h index 58912f572..e58857972 100644 --- a/fontconfig/fontconfig/fontconfig.h +++ b/fontconfig/fontconfig/fontconfig.h @@ -974,6 +974,9 @@ FcStrSetDestroy (FcStrSet *set); FcPublic FcStrList * FcStrListCreate (FcStrSet *set); +FcPublic void +FcStrListFirst (FcStrList *list); + FcPublic FcChar8 * FcStrListNext (FcStrList *list); diff --git a/fontconfig/src/fcstr.c b/fontconfig/src/fcstr.c index 3a32031a2..570717243 100644 --- a/fontconfig/src/fcstr.c +++ b/fontconfig/src/fcstr.c @@ -1374,6 +1374,12 @@ FcStrListCreate (FcStrSet *set) return list; } +void +FcStrListFirst (FcStrList *list) +{ + list->n = 0; +} + FcChar8 * FcStrListNext (FcStrList *list) { |