From 6059daeddb7b44d9b2c0f4d94a08fb6ff79ff3ac Mon Sep 17 00:00:00 2001 From: Patrick Lam Date: Thu, 1 Dec 2005 07:12:45 +0000 Subject: [PATCH] Add codepath for reading global cache files as well. --- ChangeLog | 5 ++++ fc-cat/fc-cat.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/ChangeLog b/ChangeLog index 9028cb1..d86eda3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-12-01 Patrick Lam + * fc-cat/fc-cat.c (FcCacheGlobalFileReadAndPrint, main): + + Add codepath for reading global cache files as well. + 2005-12-01 Behdad Esfahbod reviewed by: plam diff --git a/fc-cat/fc-cat.c b/fc-cat/fc-cat.c index 7953a3c..9fb930b 100644 --- a/fc-cat/fc-cat.c +++ b/fc-cat/fc-cat.c @@ -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);