* PERFORMANCE OF THIS SOFTWARE.
*/
+#include "../fc-arch/fcarch.h"
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#else
#define HAVE_GETOPT 1
#endif
-#include "fcint.h"
+#include <fontconfig/fontconfig.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <dirent.h>
+#include <string.h>
#if defined (_WIN32)
#define STRICT
static FcStrSet *processed_dirs;
-static int
-nsubdirs (FcStrSet *set)
-{
- FcStrList *list;
- int n = 0;
-
- list = FcStrListCreate (set);
- if (!list)
- return 0;
- while (FcStrListNext (list))
- n++;
- FcStrListDone (list);
- return n;
-}
-
static int
scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, FcBool verbose)
{
- int ret = 0;
- const FcChar8 *dir;
- FcFontSet *set;
- FcStrSet *subdirs;
- FcStrList *sublist;
- FcCache *cache;
- struct stat statb;
- FcBool was_valid;
- int i;
+ int ret = 0;
+ const FcChar8 *dir;
+ FcStrSet *subdirs;
+ FcStrList *sublist;
+ FcCache *cache;
+ struct stat statb;
+ FcBool was_valid;
+ int i;
/*
* Now scan all of the directories into separate databases
}
}
- set = FcCacheSet (cache);
-
if (was_valid)
{
if (verbose)
printf ("skipping, %d fonts, %d dirs\n",
- set->nfont, cache->dirs_count);
+ FcCacheNumFont (cache), FcCacheNumSubdir (cache));
}
else
{
if (verbose)
printf ("caching, %d fonts, %d dirs\n",
- set->nfont, cache->dirs_count);
+ FcCacheNumFont (cache), FcCacheNumSubdir (cache));
if (!FcDirCacheValid (dir))
{
FcDirCacheUnload (cache);
continue;
}
- for (i = 0; i < cache->dirs_count; i++)
+ for (i = 0; i < FcCacheNumSubdir (cache); i++)
FcStrSetAdd (subdirs, FcCacheSubdir (cache, i));
FcDirCacheUnload (cache);
{
fprintf (stderr, "%s: Can't create subdir list\n", dir);
ret++;
- FcDirCacheUnload (cache);
continue;
}
FcStrSetAdd (processed_dirs, dir);
{
DIR *d;
struct dirent *ent;
- char *dir_base;
+ FcChar8 *dir_base;
FcBool ret = FcTrue;
FcBool remove;
FcCache *cache;
struct stat file_stat;
struct stat target_stat;
- dir_base = FcStrPlus (dir, "/");
+ dir_base = FcStrPlus (dir, (FcChar8 *) "/");
if (!dir_base)
{
fprintf (stderr, "%s: out of memory\n", dir);
}
if (verbose)
printf ("%s: cleaning cache directory\n", dir);
- d = opendir (dir);
+ d = opendir ((char *) dir);
if (!d)
{
- perror (dir);
+ perror ((char *) dir);
FcStrFree (dir_base);
return FcFalse;
}
while ((ent = readdir (d)))
{
FcChar8 *file_name;
- FcChar8 *target_dir;
+ const FcChar8 *target_dir;
if (ent->d_name[0] == '.')
continue;
- file_name = FcStrPlus (dir_base, ent->d_name);
+ /* 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);
}
target_dir = FcCacheDir (cache);
remove = FcFalse;
- if (stat (target_dir, &target_stat) < 0)
+ if (stat ((char *) target_dir, &target_stat) < 0)
{
if (verbose)
printf ("%s: %s: missing directory: %s \n",
}
if (remove)
{
- if (unlink (file_name) < 0)
+ if (unlink ((char *) file_name) < 0)
{
- perror (file_name);
+ perror ((char *) file_name);
ret = FcFalse;
}
}