aboutsummaryrefslogtreecommitdiff
path: root/fontconfig
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2013-10-02 11:13:08 +0200
committermarha <marha@users.sourceforge.net>2013-10-02 11:13:08 +0200
commitc3594c6c050a987fb891a1c7cf0c83102fbbec46 (patch)
tree33b215c07359fff941f32fc89a8cf3e968d334a9 /fontconfig
parent1881d1a5c46cc9efb394f84b69f58c000ee1118b (diff)
parent8092f320c341a6b3a1b428fdd4473859d5db8b79 (diff)
downloadvcxsrv-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.c62
-rw-r--r--fontconfig/fontconfig/fontconfig.h3
-rw-r--r--fontconfig/src/fcstr.c6
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)
{