summaryrefslogtreecommitdiff
path: root/fc-cache
diff options
context:
space:
mode:
authorAkira TAGOH <akira@tagoh.org>2012-04-18 12:55:23 +0900
committerAkira TAGOH <akira@tagoh.org>2012-04-18 12:55:23 +0900
commitdd2a3d3520b6fea20a58b2888fef0458c01b287f (patch)
tree934518717f9913887b99768c5629e54bf56095e6 /fc-cache
parent9e62fcedfe774a13843cc0982bc3e535369b99eb (diff)
downloadfontconfig-dd2a3d3520b6fea20a58b2888fef0458c01b287f.tar.gz
Bug 25151 - Move cleanCacheDirectory() from fc-cache.c into
the library Add FcDirCacheScan() API to clean up the cache files in the directory.
Diffstat (limited to 'fc-cache')
-rw-r--r--fc-cache/fc-cache.c93
1 files changed, 1 insertions, 92 deletions
diff --git a/fc-cache/fc-cache.c b/fc-cache/fc-cache.c
index 24bb2ec..b42fd35 100644
--- a/fc-cache/fc-cache.c
+++ b/fc-cache/fc-cache.c
@@ -32,7 +32,6 @@
#endif
#include <fontconfig/fontconfig.h>
-#include "../src/fcarch.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -319,96 +318,6 @@ scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force,
}
static FcBool
-cleanCacheDirectory (FcConfig *config, FcChar8 *dir, FcBool verbose)
-{
- DIR *d;
- struct dirent *ent;
- FcChar8 *dir_base;
- FcBool ret = FcTrue;
- FcBool remove;
- FcCache *cache;
- struct stat target_stat;
-
- dir_base = FcStrPlus (dir, (FcChar8 *) "/");
- if (!dir_base)
- {
- fprintf (stderr, "%s: out of memory\n", dir);
- return FcFalse;
- }
- if (access ((char *) dir, W_OK) != 0)
- {
- if (verbose)
- printf ("%s: not cleaning %s cache directory\n", dir,
- access ((char *) dir, F_OK) == 0 ? "unwritable" : "non-existent");
- FcStrFree (dir_base);
- return FcTrue;
- }
- if (verbose)
- printf ("%s: cleaning cache directory\n", dir);
- d = opendir ((char *) dir);
- if (!d)
- {
- perror ((char *) dir);
- FcStrFree (dir_base);
- return FcFalse;
- }
- while ((ent = readdir (d)))
- {
- FcChar8 *file_name;
- const FcChar8 *target_dir;
-
- if (ent->d_name[0] == '.')
- continue;
- /* skip cache files for different architectures and */
- /* files which are not cache files at all */
- if (strlen(ent->d_name) != 32 + strlen ("-" FC_ARCHITECTURE FC_CACHE_SUFFIX) ||
- strcmp(ent->d_name + 32, "-" FC_ARCHITECTURE FC_CACHE_SUFFIX))
- continue;
-
- file_name = FcStrPlus (dir_base, (FcChar8 *) ent->d_name);
- if (!file_name)
- {
- fprintf (stderr, "%s: allocation failure\n", dir);
- ret = FcFalse;
- break;
- }
- remove = FcFalse;
- cache = FcDirCacheLoadFile (file_name, NULL);
- if (!cache)
- {
- if (verbose)
- printf ("%s: invalid cache file: %s\n", dir, ent->d_name);
- remove = FcTrue;
- }
- else
- {
- target_dir = FcCacheDir (cache);
- if (stat ((char *) target_dir, &target_stat) < 0)
- {
- if (verbose)
- printf ("%s: %s: missing directory: %s \n",
- dir, ent->d_name, target_dir);
- remove = FcTrue;
- }
- }
- if (remove)
- {
- if (unlink ((char *) file_name) < 0)
- {
- perror ((char *) file_name);
- ret = FcFalse;
- }
- }
- FcDirCacheUnload (cache);
- FcStrFree (file_name);
- }
-
- closedir (d);
- FcStrFree (dir_base);
- return ret;
-}
-
-static FcBool
cleanCacheDirectories (FcConfig *config, FcBool verbose)
{
FcStrList *cache_dirs = FcConfigGetCacheDirs (config);
@@ -419,7 +328,7 @@ cleanCacheDirectories (FcConfig *config, FcBool verbose)
return FcFalse;
while ((cache_dir = FcStrListNext (cache_dirs)))
{
- if (!cleanCacheDirectory (config, cache_dir, verbose))
+ if (!FcDirCacheClean (cache_dir, verbose))
{
ret = FcFalse;
break;