]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcxml.c
fc-cache: add a --root option
[fontconfig.git] / src / fcxml.c
index ff30b7bbdaff398971803913619b757ae24a83df..bf6dbfbd14d410eb037a69ef57b14a0c34307947 100644 (file)
@@ -2603,11 +2603,20 @@ FcConfigParseAndLoadDir (FcConfig       *config,
     DIR                    *d;
     struct dirent   *e;
     FcBool         ret = FcTrue;
+    FcChar8        *fullDir;
+    const FcChar8   *scanDir;
     FcChar8        *file;
     FcChar8        *base;
     FcStrSet       *files;
 
-    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)
     {
        if (complain)
@@ -2685,6 +2694,8 @@ FcConfigParseAndLoad (FcConfig        *config,
 
     XML_Parser     p;
     FcChar8        *filename;
+    const FcChar8   *readFile;
+    FcChar8        *fullFile;
     int                    fd;
     int                    len;
     FcConfigParse   parse;
@@ -2697,7 +2708,7 @@ FcConfigParseAndLoad (FcConfig        *config,
     void           *buf;
 #endif
 
-    filename = FcConfigFilename (name);
+    filename = FcConfigFilename2 (config, name);
     if (!filename)
        goto bail0;
 
@@ -2713,7 +2724,7 @@ FcConfigParseAndLoad (FcConfig        *config,
        goto bail0;
     }
 
-    if (FcFileIsDir (filename))
+    if (FcFileIsDir2 (config, filename))
     {
        FcBool ret = FcConfigParseAndLoadDir (config, name, filename, complain);
        FcStrFree (filename);
@@ -2723,7 +2734,14 @@ FcConfigParseAndLoad (FcConfig       *config,
     if (FcDebug () & FC_DBG_CONFIG)
        printf ("\tLoading config file %s\n", filename);
 
-    fd = open ((char *) filename, O_RDONLY);
+    fullFile = FcConfigGetRootPlus (config, filename);
+    if (fullFile)
+       readFile = fullFile;
+    else
+       readFile = filename;
+    fd = open ((char *) readFile, O_RDONLY);
+    if (fullFile)
+       FcStrFree (fullFile);
     if (fd == -1) {
        FcStrFree (filename);
        goto bail0;