]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcdir.c
Make cache reference counting more efficient.
[fontconfig.git] / src / fcdir.c
index 0b7c8d8c9290401dd4149fe05e9abc6ac897c8f0..a55c5fd3a47f5d301f58887c6d141b26d663683a 100644 (file)
@@ -61,15 +61,31 @@ FcFileScanFontConfig (FcFontSet             *set,
        font = FcFreeTypeQuery (file, id, blanks, &count);
        if (FcDebug () & FC_DBG_SCAN)
            printf ("done\n");
+
+       /*
+        * Edit pattern with user-defined rules
+        */
+       if (config && !FcConfigSubstituteWithPat (config, font, NULL, FcMatchScan))
+       {
+           FcPatternDestroy (font);
+           font = NULL;
+           ret = FcFalse;
+       }
+
        /*
         * Add the font
         */
        if (font && (!config || FcConfigAcceptFont (config, font)))
        {
+           if (FcDebug() & FC_DBG_SCANV)
+           {
+               printf ("Final font pattern:\n");
+               FcPatternPrint (font);
+           }
            if (!FcFontSetAdd (set, font))
            {
                FcPatternDestroy (font);
-               font = 0;
+               font = NULL;
                ret = FcFalse;
            }
        }
@@ -234,26 +250,17 @@ FcCache *
 FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config)
 {
     FcCache            *cache = NULL;
-    FcChar8            *canon_dir;
 
-    canon_dir = FcStrCanonFilename (dir);
-    if (!canon_dir) canon_dir = (FcChar8 *) dir;
-    
-    if (config && !FcConfigAcceptFilename (config, canon_dir)) {
-       goto bail;
-    }
+    if (config && !FcConfigAcceptFilename (config, dir))
+       return NULL;
 
     /* Try to use existing cache file */
     if (!force)
-       cache = FcDirCacheLoad (canon_dir, config, NULL);
+       cache = FcDirCacheLoad (dir, config, NULL);
     
     /* Not using existing cache file, construct new cache */
     if (!cache)
-       cache = FcDirCacheScan (canon_dir, config);
-    
-bail:
-    if (canon_dir != dir) 
-       free (canon_dir);
+       cache = FcDirCacheScan (dir, config);
     
     return cache;
 }