]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcdir.c
fc-cache: add a --root option
[fontconfig.git] / src / fcdir.c
index 8a2b97625066eeb05eeffc014cebb8a749056441..0e885a2bac59eb7615d1ca4ea54160dfd5196be2 100644 (file)
@@ -142,6 +142,8 @@ FcDirScanConfig (FcFontSet  *set,
     FcStrSet           *files;
     FcChar8            *file;
     FcChar8            *base;
+    const FcChar8      *scanDir;
+    FcChar8            *fullDir;
     FcBool             ret = FcTrue;
     int                        i;
 
@@ -167,8 +169,15 @@ FcDirScanConfig (FcFontSet *set,
 
     if (FcDebug () & FC_DBG_SCAN)
        printf ("\tScanning dir %s\n", dir);
-       
-    d = opendir ((char *) dir);
+
+    fullDir = FcConfigGetRootPlus (dir);
+    if (fullDir)
+       scanDir = fullDir;
+    else
+       scanDir = dir;
+    d = opendir ((char *) scanDir);
+    if (fullDir)
+       FcStrFree (fullDir);
     if (!d)
     {
        /* Don't complain about missing directories */
@@ -235,7 +244,6 @@ FcCache *
 FcDirCacheScan (const FcChar8 *dir, FcConfig *config)
 {
     FcStrSet           *dirs;
-    FcBool             ret = FcTrue;
     FcFontSet          *set;
     FcCache            *cache = NULL;
     struct stat                dir_stat;
@@ -244,44 +252,28 @@ FcDirCacheScan (const FcChar8 *dir, FcConfig *config)
        printf ("cache scan dir %s\n", dir);
 
     if (FcStat (dir, &dir_stat) < 0)
-    {
-       if (errno != ENOENT)
-           ret = FcFalse;
        goto bail;
-    }
 
     set = FcFontSetCreate();
     if (!set)
-    {
-       ret = FcFalse;
        goto bail;
-    }
 
     dirs = FcStrSetCreate ();
     if (!dirs)
-    {
-       ret = FcFalse;
        goto bail1;
-    }
 
     /*
      * Scan the dir
      */
     if (!FcDirScanConfig (set, dirs, NULL, dir, FcTrue, config))
-    {
-       ret = FcFalse;
        goto bail2;
-    }
 
     /*
      * Build the cache object
      */
     cache = FcDirCacheBuild (set, dir, &dir_stat, dirs);
     if (!cache)
-    {
-       ret = FcFalse;
        goto bail2;
-    }
 
     /*
      * Write out the cache file, ignoring any troubles