]> git.wh0rd.org - fontconfig.git/commitdiff
Try to open /var/cache/fontconfig/[hashed name] before fonts.cache-2 in a
authorPatrick Lam <plam@MIT.EDU>
Sat, 11 Feb 2006 05:01:32 +0000 (05:01 +0000)
committerPatrick Lam <plam@MIT.EDU>
Sat, 11 Feb 2006 05:01:32 +0000 (05:01 +0000)
    directory, because /var/cache/fontconfig failures ought to be fixable,
    unlike fonts.cache-2 failures, which may leave you screwed.
reviewed by: plam

ChangeLog
src/fccache.c

index fb6a699b333013d58db7f8b7e472e524133b8683..7e338d0b8379549de3f1eca01048c8d9b858dced 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-02-10  Takashi Iwai  <tiwai@suse.de>
+       reviewed by: plam
+       * src/fccache.c (FcDirCacheOpen):
+
+       Try to open /var/cache/fontconfig/[hashed name] before
+       fonts.cache-2 in a directory, because /var/cache/fontconfig
+       failures ought to be fixable, unlike fonts.cache-2 failures,
+       which may leave you screwed.
+
 2006-02-10  Takashi Iwai  <tiwai@suse.de>
        reviewed by: plam
        * src/fcmatch.c (FcFontSetMatch):
index 0ec4117359ee05ad9dc7b6ee82179a2c2d7d9383..7001ced5c2d85acc1249b4dd59295bed88ccb8ca 100644 (file)
@@ -1019,22 +1019,21 @@ FcDirCacheOpen (const FcChar8 *dir)
     char       name_buf[FC_MAX_FILE_LEN];
     struct stat dir_stat;
 
-    cache_file = (char *)FcStrPlus (dir, (FcChar8 *) "/" FC_DIR_CACHE_FILE);
-    if (!cache_file)
+    if (stat ((char *)dir, &dir_stat) == -1)
        return -1;
 
-    fd = open(cache_file, O_RDONLY | O_BINARY);
-    if (fd != -1)
-       return fd;
-
-    if (stat ((char *)dir, &dir_stat) == -1)
+    cache_file = (char *)FcStrPlus (dir, (FcChar8 *) "/" FC_DIR_CACHE_FILE);
+    if (!cache_file)
        return -1;
 
     found = FcFalse;
     do
     {
-       struct stat c;
-       FcChar8 * name_buf_dir;
+       struct stat     c;
+       FcChar8         *name_buf_dir;
+
+       if (fd >= 0)
+           close (fd);
 
        cache_hashed = FcDirCacheHashName (cache_file, collisions++);
        if (!cache_hashed)
@@ -1043,18 +1042,14 @@ FcDirCacheOpen (const FcChar8 *dir)
            return -1;
        }
 
-       if (fd > 0)
-           close (fd);
        fd = open(cache_hashed, O_RDONLY | O_BINARY);
        FcStrFree ((FcChar8 *)cache_hashed);
 
        if (fd == -1)
-       {
-           FcStrFree ((FcChar8 *)cache_file);
-           return -1;
-       }
-       if (!FcCacheReadString (fd, name_buf, sizeof (name_buf)) || !strlen(name_buf))
-           goto bail;
+           break;
+       if (!FcCacheReadString (fd, name_buf, sizeof (name_buf)) || 
+           !strlen(name_buf))
+           break;
 
        name_buf_dir = FcStrDirname ((FcChar8 *)name_buf);
        if (stat ((char *)name_buf_dir, &c) == -1)
@@ -1065,13 +1060,16 @@ FcDirCacheOpen (const FcChar8 *dir)
        FcStrFree (name_buf_dir);
        found = (c.st_ino == dir_stat.st_ino) && (c.st_dev == dir_stat.st_dev);
     } while (!found);
-    FcStrFree ((FcChar8 *)cache_file);
-    return fd;
 
- bail:
+    if (!found || fd < 0) 
+    {
+       if (fd >= 0)
+           close (fd);
+       fd = open(cache_file, O_RDONLY | O_BINARY);
+    }
+
     FcStrFree ((FcChar8 *)cache_file);
-    close (fd);
-    return -1;
+    return fd;
 }
 
 /* read serialized state from the cache file */