]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcdir.c
fc-cache: add a --root option
[fontconfig.git] / src / fcdir.c
index d8b094fbc7eec96a9705117993922002b20883c9..282dedd200b262b81b3c15e864fb1280b380fb4d 100644 (file)
 
 FcBool
 FcFileIsDir (const FcChar8 *file)
+{
+    return FcFileIsDir2 (FcConfigGetCurrent (), file);
+}
+
+FcBool
+FcFileIsDir2 (FcConfig *config, const FcChar8 *file)
 {
     struct stat            statb;
 
-    if (FcStat (file, &statb) != 0)
+    if (FcStat (config, file, &statb) != 0)
        return FcFalse;
     return S_ISDIR(statb.st_mode);
 }
@@ -58,7 +64,7 @@ FcFileScanFontConfig (FcFontSet               *set,
            printf ("\tScanning file %s...", file);
            fflush (stdout);
        }
-       font = FcFreeTypeQuery (file, id, blanks, &count);
+       font = FcFreeTypeQuery2 (config, file, id, blanks, &count);
        if (FcDebug () & FC_DBG_SCAN)
            printf ("done\n");
 
@@ -103,7 +109,7 @@ FcFileScanConfig (FcFontSet *set,
                  const FcChar8 *file,
                  FcConfig      *config)
 {
-    if (FcFileIsDir (file))
+    if (FcFileIsDir2 (config, file))
        return FcStrSetAdd (dirs, file);
     else
        return FcFileScanFontConfig (set, blanks, file, config);
@@ -142,6 +148,8 @@ FcDirScanConfig (FcFontSet  *set,
     FcStrSet           *files;
     FcChar8            *file;
     FcChar8            *base;
+    const FcChar8      *scanDir;
+    FcChar8            *fullDir;
     FcBool             ret = FcTrue;
     int                        i;
 
@@ -167,8 +175,15 @@ FcDirScanConfig (FcFontSet *set,
 
     if (FcDebug () & FC_DBG_SCAN)
        printf ("\tScanning dir %s\n", dir);
-       
-    d = opendir ((char *) dir);
+
+    fullDir = FcConfigGetRootPlus (config, dir);
+    if (fullDir)
+       scanDir = fullDir;
+    else
+       scanDir = dir;
+    d = opendir ((char *) scanDir);
+    if (fullDir)
+       FcStrFree (fullDir);
     if (!d)
     {
        /* Don't complain about missing directories */
@@ -242,7 +257,7 @@ FcDirCacheScan (const FcChar8 *dir, FcConfig *config)
     if (FcDebug () & FC_DBG_FONTSET)
        printf ("cache scan dir %s\n", dir);
 
-    if (FcStat (dir, &dir_stat) < 0)
+    if (FcStat (config, dir, &dir_stat) < 0)
        goto bail;
 
     set = FcFontSetCreate();