diff options
author | Akira TAGOH <akira@tagoh.org> | 2012-04-18 12:55:23 +0900 |
---|---|---|
committer | Akira TAGOH <akira@tagoh.org> | 2012-04-18 12:55:23 +0900 |
commit | dd2a3d3520b6fea20a58b2888fef0458c01b287f (patch) | |
tree | 934518717f9913887b99768c5629e54bf56095e6 /fc-cache | |
parent | 9e62fcedfe774a13843cc0982bc3e535369b99eb (diff) |
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.c | 93 |
1 files changed, 1 insertions, 92 deletions
diff --git a/fc-cache/fc-cache.c b/fc-cache/fc-cache.c index 24bb2ec9..b42fd354 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; |