Add codepath for reading global cache files as well.

This commit is contained in:
Patrick Lam 2005-12-01 07:12:45 +00:00
parent 2c6fead73f
commit 6059daeddb
2 changed files with 66 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2005-12-01 Patrick Lam <plam@mit.edu>
* fc-cat/fc-cat.c (FcCacheGlobalFileReadAndPrint, main):
Add codepath for reading global cache files as well.
2005-12-01 Behdad Esfahbod <behdad@cs.toronto.edu>
reviewed by: plam

View File

@ -164,6 +164,59 @@ usage (char *program)
exit (1);
}
static FcBool
FcCacheGlobalFileReadAndPrint (FcFontSet * set, FcStrSet *dirs, char * dir, char *cache_file)
{
char name_buf[8192];
int fd;
FcGlobalCacheDir *d, *next;
char * current_arch_machine_name;
char candidate_arch_machine_name[9+MACHINE_SIGNATURE_SIZE];
off_t current_arch_start = 0;
char subdirName[FC_MAX_FILE_LEN + 1 + 12 + 1];
if (!cache_file)
goto bail;
current_arch_machine_name = FcCacheMachineSignature();
fd = open(cache_file, O_RDONLY);
if (fd == -1)
goto bail;
current_arch_start = FcCacheSkipToArch(fd, current_arch_machine_name);
if (current_arch_start < 0)
goto bail1;
lseek (fd, current_arch_start, SEEK_SET);
if (FcCacheReadString (fd, candidate_arch_machine_name,
sizeof (candidate_arch_machine_name)) == 0)
goto bail1;
while (1)
{
off_t targ;
FcCacheReadString (fd, name_buf, sizeof (name_buf));
if (!strlen(name_buf))
break;
printf ("fc-cat: printing global cache contents for dir %s\n",
name_buf);
if (!FcDirCacheConsume (fd, dir, set))
goto bail1;
FcCachePrintSet (set, dirs, name_buf);
FcFontSetDestroy (set);
set = FcFontSetCreate();
}
bail1:
close (fd);
bail:
return FcFalse;
}
/* read serialized state from the cache file */
static FcBool
FcCacheFileRead (FcFontSet * set, FcStrSet *dirs, char * dir, char *cache_file)
@ -329,6 +382,14 @@ main (int argc, char **argv)
if (FcCacheFileRead (fs, dirs, dirname (strdup(argv[i])), argv[i]))
FcCachePrintSet (fs, dirs, argv[i]);
else
{
FcStrSetDestroy (dirs);
dirs = FcStrSetCreate ();
if (FcCacheGlobalFileReadAndPrint (fs, dirs, dirname (strdup (argv[i])),
argv[i]))
;
}
FcStrSetDestroy (dirs);
FcFontSetDestroy (fs);