]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcdir.c
Add filename-based accept/reject to ammend available fonts.
[fontconfig.git] / src / fcdir.c
index 995a9086b4cdd789ff8f642acc99863df5fa3f6b..6ae7052e2b69eec4e798d2a15f6b57efa1bc3ef0 100644 (file)
@@ -36,12 +36,13 @@ FcFileIsDir (const FcChar8 *file)
 }
 
 FcBool
-FcFileScan (FcFontSet      *set,
-           FcStrSet        *dirs,
-           FcGlobalCache   *cache,
-           FcBlanks        *blanks,
-           const FcChar8   *file,
-           FcBool          force)
+FcFileScanConfig (FcFontSet    *set,
+                 FcStrSet      *dirs,
+                 FcGlobalCache *cache,
+                 FcBlanks      *blanks,
+                 const FcChar8 *file,
+                 FcBool        force,
+                 FcConfig      *config)
 {
     int                        id;
     FcChar8            *name;
@@ -53,6 +54,9 @@ FcFileScan (FcFontSet     *set,
     FcGlobalCacheDir   *cache_dir;
     FcBool             need_scan;
     
+    if (config && !FcConfigAcceptFilename (config, file))
+       return FcTrue;
+
     if (force)
        cache = 0;
     id = 0;
@@ -151,6 +155,17 @@ FcFileScan (FcFontSet          *set,
     return ret;
 }
 
+FcBool
+FcFileScan (FcFontSet      *set,
+           FcStrSet        *dirs,
+           FcGlobalCache   *cache,
+           FcBlanks        *blanks,
+           const FcChar8   *file,
+           FcBool          force)
+{
+    return FcFileScanConfig (set, dirs, cache, blanks, file, force, 0);
+}
+
 #define FC_MAX_FILE_LEN            4096
 
 /*
@@ -159,12 +174,13 @@ FcFileScan (FcFontSet         *set,
  */
 
 FcBool
-FcDirScan (FcFontSet       *set,
-          FcStrSet         *dirs,
-          FcGlobalCache    *cache,
-          FcBlanks         *blanks,
-          const FcChar8    *dir,
-          FcBool           force)
+FcDirScanConfig (FcFontSet     *set,
+                FcStrSet       *dirs,
+                FcGlobalCache  *cache,
+                FcBlanks       *blanks,
+                const FcChar8  *dir,
+                FcBool         force,
+                FcConfig       *config)
 {
     DIR                        *d;
     struct dirent      *e;
@@ -172,12 +188,15 @@ FcDirScan (FcFontSet          *set,
     FcChar8            *base;
     FcBool             ret = FcTrue;
 
+    if (config && !FcConfigAcceptFilename (config, dir))
+       return FcTrue;
+
     if (!force)
     {
        /*
         * Check fonts.cache-<version> file
         */
-       if (FcDirCacheReadDir (set, dirs, dir))
+       if (FcDirCacheReadDir (set, dirs, dir, config))
        {
            if (cache)
                FcGlobalCacheReferenceSubdir (cache, dir);
@@ -187,7 +206,7 @@ FcDirScan (FcFontSet            *set,
        /*
         * Check ~/.fonts.cache-<version> file
         */
-       if (cache && FcGlobalCacheScanDir (set, dirs, cache, dir))
+       if (cache && FcGlobalCacheScanDir (set, dirs, cache, dir, config))
            return FcTrue;
     }
     
@@ -218,7 +237,7 @@ FcDirScan (FcFontSet            *set,
        if (e->d_name[0] != '.' && strlen (e->d_name) < FC_MAX_FILE_LEN)
        {
            strcpy ((char *) base, (char *) e->d_name);
-           ret = FcFileScan (set, dirs, cache, blanks, file, force);
+           ret = FcFileScanConfig (set, dirs, cache, blanks, file, force, config);
        }
     }
     free (file);
@@ -233,6 +252,17 @@ FcDirScan (FcFontSet           *set,
     return ret;
 }
 
+FcBool
+FcDirScan (FcFontSet       *set,
+          FcStrSet         *dirs,
+          FcGlobalCache    *cache,
+          FcBlanks         *blanks,
+          const FcChar8    *dir,
+          FcBool           force)
+{
+    return FcDirScanConfig (set, dirs, cache, blanks, dir, force, 0);
+}
+
 FcBool
 FcDirSave (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir)
 {