From 68355f38774fe55d8010268291a170492b241a71 Mon Sep 17 00:00:00 2001 From: Patrick Lam Date: Sun, 5 Feb 2006 02:57:21 +0000 Subject: [PATCH] src/fccache.c (FcGlobalCacheLoad, FcGlobalCacheSave, FcDirCacheConsume, FcDirCacheWrite) Check I/O call return values and eliminate unused variable warnings. reviewed by: plam --- ChangeLog | 13 ++++++++++ fc-cat/fc-cat.c | 5 ++-- src/fccache.c | 66 +++++++++++++++++++++++++++++++++++++------------ src/fcxml.c | 4 +-- 4 files changed, 67 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index de2c143..76aeb62 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2006-02-03 Takashi IWAI + reviewed by: plam + + * fc-cat/fc-cat.c (FcCacheGlobalFileReadAndPrint, main, + FcCacheFileRead): + + * src/fccache.c (FcGlobalCacheLoad, FcGlobalCacheSave, + FcDirCacheConsume, FcDirCacheWrite) + * src/fcxml.c (FcConfigMessage): + + Check I/O call return values and eliminate unused variable + warnings. + 2006-02-03 Takashi Iwai reviewed by: plam diff --git a/fc-cat/fc-cat.c b/fc-cat/fc-cat.c index a203d74..d624711 100644 --- a/fc-cat/fc-cat.c +++ b/fc-cat/fc-cat.c @@ -196,7 +196,7 @@ FcCacheGlobalFileReadAndPrint (FcFontSet * set, FcStrSet *dirs, char *cache_file while (1) { - char * dir, * ls; + char * dir; FcCacheReadString (fd, name_buf, sizeof (name_buf)); if (!strlen(name_buf)) break; @@ -241,7 +241,6 @@ FcCacheFileRead (FcFontSet * set, FcStrSet *dirs, char *cache_file) { int fd; 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]; static char name_buf[8192], *dir; @@ -411,7 +410,7 @@ main (int argc, char **argv) if (i >= argc) usage (argv[0]); - if (name_buf = FcCacheFileRead (fs, dirs, argv[i])) + if ((name_buf = FcCacheFileRead (fs, dirs, argv[i])) != 0) FcCachePrintSet (fs, dirs, name_buf); else { diff --git a/src/fccache.c b/src/fccache.c index 0de020c..8813bd5 100644 --- a/src/fccache.c +++ b/src/fccache.c @@ -251,11 +251,20 @@ FcGlobalCacheLoad (FcGlobalCache *cache, (config_time.set && cache_stat.st_mtime < config_time.time)) { FcCache md; + off_t off; - FcStrSetAdd (staleDirs, FcStrCopy ((FcChar8 *)name_buf)); - read (cache->fd, &md, sizeof (FcCache)); - lseek (cache->fd, FcCacheNextOffset (lseek(cache->fd, 0, SEEK_CUR)) + md.count, SEEK_SET); - continue; + FcStrSetAdd (staleDirs, FcStrCopy ((FcChar8 *)name_buf)); + if (read (cache->fd, &md, sizeof (FcCache)) != sizeof(FcCache)) + { + perror ("read metadata"); + goto bail1; + } + off = FcCacheNextOffset (lseek(cache->fd, 0, SEEK_CUR)) + md.count; + if (lseek (cache->fd, off, SEEK_SET) != off) { + perror ("lseek"); + goto bail1; + } + continue; } d = malloc (sizeof (FcGlobalCacheDir)); @@ -465,21 +474,38 @@ FcGlobalCacheSave (FcGlobalCache *cache, for (dir = cache->dirs; dir; dir = dir->next) { - if (dir->name) - { + if (dir->name) + { const char * d = (const char *)FcConfigNormalizeFontDir (config, (const FcChar8 *)dir->name); + off_t off; - FcCacheWriteString (fd, d); + FcCacheWriteString (fd, d); for (i = 0; i < dir->subdirs->size; i++) FcCacheWriteString (fd, (char *)dir->subdirs->strs[i]); FcCacheWriteString (fd, ""); - write (fd, &dir->metadata, sizeof(FcCache)); - lseek (fd, FcCacheNextOffset (lseek(fd, 0, SEEK_CUR)), SEEK_SET); - write (fd, dir->ent, dir->metadata.count); - free (dir->ent); - } + if (write (fd, &dir->metadata, sizeof(FcCache)) != sizeof(FcCache)) + { + perror ("write metadata"); + free (dir->ent); + continue; + } + off = FcCacheNextOffset (lseek(fd, 0, SEEK_CUR)); + if (lseek (fd, off, SEEK_SET) != off) + { + perror ("lseek"); + free (dir->ent); + continue; + } + if (write (fd, dir->ent, dir->metadata.count) != dir->metadata.count) + { + perror ("write dirent"); + free (dir->ent); + continue; + } + free (dir->ent); + } } FcCacheWriteString (fd, ""); @@ -1025,7 +1051,8 @@ FcDirCacheConsume (int fd, const char * dir, FcFontSet *set, FcConfig *config) void * current_dir_block; off_t pos; - read(fd, &metadata, sizeof(FcCache)); + if (read(fd, &metadata, sizeof(FcCache)) != sizeof(FcCache)) + return FcFalse; if (metadata.magic != FC_CACHE_MAGIC) return FcFalse; @@ -1238,11 +1265,18 @@ FcDirCacheWrite (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir) FcCacheWriteString (fd, (char *)dirs->strs[i]); FcCacheWriteString (fd, ""); - write (fd, &metadata, sizeof(FcCache)); + if (write (fd, &metadata, sizeof(FcCache)) != sizeof(FcCache)) { + perror("write metadata"); + goto bail5; + } if (metadata.count) { - lseek (fd, FcCacheNextOffset (lseek(fd, 0, SEEK_END)), SEEK_SET); - write (fd, current_dir_block, metadata.count); + off_t off = FcCacheNextOffset (lseek(fd, 0, SEEK_END)); + if (lseek (fd, off, SEEK_SET) != off) + perror("lseek"); + else if (write (fd, current_dir_block, metadata.count) != + metadata.count) + perror("write current_dir_block"); free (current_dir_block); } diff --git a/src/fcxml.c b/src/fcxml.c index e65ccbf..c9e44e3 100644 --- a/src/fcxml.c +++ b/src/fcxml.c @@ -493,10 +493,10 @@ FcConfigMessage (FcConfigParse *parse, FcConfigSeverity severe, const char *fmt, { if (parse->name) fprintf (stderr, "Fontconfig %s: \"%s\", line %d: ", s, - parse->name, XML_GetCurrentLineNumber (parse->parser)); + parse->name, (int)XML_GetCurrentLineNumber (parse->parser)); else fprintf (stderr, "Fontconfig %s: line %d: ", s, - XML_GetCurrentLineNumber (parse->parser)); + (int)XML_GetCurrentLineNumber (parse->parser)); if (severe >= FcSevereError) parse->error = FcTrue; }