X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=src%2Ffccfg.c;h=c73dc2aa8b6dfd0056bb4ab8949493addbcc104b;hb=de1faa42d1425f80366707a730ea919c57e57b2f;hp=00510e5a66d0de5cba6c6cbd18ffdbc74d234a91;hpb=51af0509925e780eb3eb9014aac5e50b6bbbe0d1;p=fontconfig.git diff --git a/src/fccfg.c b/src/fccfg.c index 00510e5..c73dc2a 100644 --- a/src/fccfg.c +++ b/src/fccfg.c @@ -23,6 +23,8 @@ */ #include "fcint.h" +#include +#include #if defined (_WIN32) && (defined (PIC) || defined (DLL_EXPORT)) #define STRICT @@ -75,40 +77,15 @@ FcConfigCreate (void) if (!config->rejectPatterns) goto bail7; - config->cache = 0; - if (FcConfigHome()) - if (!FcConfigSetCache (config, (FcChar8 *) ("~/" FC_USER_CACHE_FILE))) - goto bail8; - -#ifdef _WIN32 - if (config->cache == 0) - { - /* If no home, use the temp folder. */ - FcChar8 dummy[1]; - int templen = GetTempPath (1, dummy); - FcChar8 *temp = malloc (templen + 1); - - if (temp) - { - FcChar8 *cache_dir; - - GetTempPath (templen + 1, temp); - cache_dir = FcStrPlus (temp, FC_USER_CACHE_FILE); - free (temp); - if (!FcConfigSetCache (config, cache_dir)) - { - FcStrFree (cache_dir); - goto bail6; - } - FcStrFree (cache_dir); - } - } -#endif - + config->cacheDirs = FcStrSetCreate (); + if (!config->cacheDirs) + goto bail8; + config->blanks = 0; config->substPattern = 0; config->substFont = 0; + config->substScan = 0; config->maxObjects = 0; for (set = FcSetSystem; set <= FcSetApplication; set++) config->fonts[set] = 0; @@ -161,23 +138,10 @@ FcConfigNewestFile (FcStrSet *files) return newest; } -FcFileTime -FcConfigModifiedTime (FcConfig *config) -{ - if (!config) - { - FcFileTime v = { 0, FcFalse }; - config = FcConfigGetCurrent (); - if (!config) - return v; - } - return FcConfigNewestFile (config->configFiles); -} - FcBool FcConfigUptoDate (FcConfig *config) { - FcFileTime config_time, font_time; + FcFileTime config_time, config_dir_time, font_time; time_t now = time(0); if (!config) { @@ -186,8 +150,10 @@ FcConfigUptoDate (FcConfig *config) return FcFalse; } config_time = FcConfigNewestFile (config->configFiles); + config_dir_time = FcConfigNewestFile (config->configDirs); font_time = FcConfigNewestFile (config->fontDirs); if ((config_time.set && config_time.time - config->rescanTime > 0) || + (config_dir_time.set && (config_dir_time.time - config->rescanTime) > 0) || (font_time.set && (font_time.time - config->rescanTime) > 0)) { return FcFalse; @@ -224,6 +190,7 @@ FcConfigDestroy (FcConfig *config) FcStrSetDestroy (config->configDirs); FcStrSetDestroy (config->fontDirs); + FcStrSetDestroy (config->cacheDirs); FcStrSetDestroy (config->configFiles); FcStrSetDestroy (config->acceptGlobs); FcStrSetDestroy (config->rejectGlobs); @@ -233,11 +200,9 @@ FcConfigDestroy (FcConfig *config) if (config->blanks) FcBlanksDestroy (config->blanks); - if (config->cache) - FcStrFree (config->cache); - FcSubstDestroy (config->substPattern); FcSubstDestroy (config->substFont); + FcSubstDestroy (config->substScan); for (set = FcSetSystem; set <= FcSetApplication; set++) if (config->fonts[set]) FcFontSetDestroy (config->fonts[set]); @@ -247,104 +212,129 @@ FcConfigDestroy (FcConfig *config) } /* - * Scan the current list of directories in the configuration - * and build the set of available fonts. Update the - * per-user cache file to reflect the new configuration + * Add cache to configuration, adding fonts and directories */ FcBool -FcConfigBuildFonts (FcConfig *config) +FcConfigAddCache (FcConfig *config, FcCache *cache, + FcSetName set, FcStrSet *dirSet) { - FcFontSet *fonts, *cached_fonts; - FcGlobalCache *cache; - FcStrList *list; - FcStrSet *oldDirs; - FcChar8 *dir; - - fonts = FcFontSetCreate (); - if (!fonts) - goto bail0; - - cache = FcGlobalCacheCreate (); - if (!cache) - goto bail1; - - oldDirs = FcStrSetCreate (); - if (!oldDirs) - goto bail2; - - if (config->cache) - FcGlobalCacheLoad (cache, oldDirs, config->cache, config); - - cached_fonts = FcCacheRead(config, cache); - if (!cached_fonts) + FcFontSet *fs; + intptr_t *dirs; + int i; + + /* + * Add fonts + */ + fs = FcCacheSet (cache); + if (fs) { - list = FcConfigGetFontDirs (config); - if (!list) - goto bail2; + int nref = 0; - while ((dir = FcStrListNext (list))) + for (i = 0; i < fs->nfont; i++) { - if (FcDebug () & FC_DBG_FONTSET) - printf ("build scan dir %s\n", dir); - FcDirScanConfig (fonts, config->fontDirs, cache, - config->blanks, dir, FcFalse, config); + FcPattern *font = FcFontSetFont (fs, i); + FcChar8 *font_file; + + /* + * Check to see if font is banned by filename + */ + if (FcPatternObjectGetString (font, FC_FILE_OBJECT, + 0, &font_file) == FcResultMatch && + !FcConfigAcceptFilename (config, font_file)) + { + continue; + } + + /* + * Check to see if font is banned by pattern + */ + if (!FcConfigAcceptFont (config, font)) + continue; + + nref++; + FcFontSetAdd (config->fonts[set], font); } - - FcStrListDone (list); + FcDirCacheReference (cache, nref); } - else - { - int i; - - for (i = 0; i < oldDirs->num; i++) - { - if (FcDebug () & FC_DBG_FONTSET) - printf ("scan dir %s\n", oldDirs->strs[i]); - FcDirScanConfig (fonts, config->fontDirs, cache, - config->blanks, oldDirs->strs[i], - FcFalse, config); - } - for (i = 0; i < cached_fonts->nfont; i++) + /* + * Add directories + */ + dirs = FcCacheDirs (cache); + if (dirs) + { + for (i = 0; i < cache->dirs_count; i++) { - FcChar8 *cfn, *cfd; - FcPatternGetString (cached_fonts->fonts[i], FC_FILE, 0, &cfn); - cfd = (FcChar8 *)FcCacheFindBankDir (cached_fonts->fonts[i]->bank); - - if (FcConfigAcceptFont (config, cached_fonts->fonts[i]) && - (cfn && FcConfigAcceptFilename (config, cfn)) && - (cfd && FcConfigAcceptFilename (config, cfd))) - FcFontSetAdd (fonts, cached_fonts->fonts[i]); - - cached_fonts->fonts[i] = 0; /* prevent free in FcFontSetDestroy */ + FcChar8 *dir = FcOffsetToPtr (dirs, dirs[i], FcChar8); + if (FcConfigAcceptFilename (config, dir)) + FcStrSetAddFilename (dirSet, dir); } - cached_fonts->nfont = 0; - FcFontSetDestroy (cached_fonts); } + return FcTrue; +} + +static FcBool +FcConfigAddDirList (FcConfig *config, FcSetName set, FcStrSet *dirSet) +{ + FcStrList *dirlist; + FcChar8 *dir; + FcCache *cache; - if (FcDebug () & FC_DBG_FONTSET) - FcFontSetPrint (fonts); + dirlist = FcStrListCreate (dirSet); + if (!dirlist) + return FcFalse; + + while ((dir = FcStrListNext (dirlist))) + { + if (FcDebug () & FC_DBG_FONTSET) + printf ("adding fonts from%s\n", dir); + cache = FcDirCacheRead (dir, FcFalse, config); + if (!cache) + continue; + FcConfigAddCache (config, cache, set, dirSet); + FcDirCacheUnload (cache); + } + FcStrListDone (dirlist); + return FcTrue; +} - if (config->cache) - FcGlobalCacheSave (cache, config->cache); - FcGlobalCacheDestroy (cache); - FcStrSetDestroy (oldDirs); +/* + * Scan the current list of directories in the configuration + * and build the set of available fonts. + */ +FcBool +FcConfigBuildFonts (FcConfig *config) +{ + FcFontSet *fonts; + + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return FcFalse; + } + + fonts = FcFontSetCreate (); + if (!fonts) + return FcFalse; + FcConfigSetFonts (config, fonts, FcSetSystem); + if (!FcConfigAddDirList (config, FcSetSystem, config->fontDirs)) + return FcFalse; + if (FcDebug () & FC_DBG_FONTSET) + FcFontSetPrint (fonts); return FcTrue; -bail2: - FcStrSetDestroy (oldDirs); -bail1: - FcFontSetDestroy (fonts); -bail0: - return FcFalse; } FcBool FcConfigSetCurrent (FcConfig *config) { + if (config == _fcConfig) + return FcTrue; + if (!config->fonts) if (!FcConfigBuildFonts (config)) return FcFalse; @@ -410,6 +400,25 @@ FcConfigGetFontDirs (FcConfig *config) return FcStrListCreate (config->fontDirs); } +FcBool +FcConfigAddCacheDir (FcConfig *config, + const FcChar8 *d) +{ + return FcStrSetAddFilename (config->cacheDirs, d); +} + +FcStrList * +FcConfigGetCacheDirs (FcConfig *config) +{ + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + return FcStrListCreate (config->cacheDirs); +} + FcBool FcConfigAddConfigFile (FcConfig *config, const FcChar8 *f) @@ -437,30 +446,10 @@ FcConfigGetConfigFiles (FcConfig *config) return FcStrListCreate (config->configFiles); } -FcBool -FcConfigSetCache (FcConfig *config, - const FcChar8 *c) -{ - FcChar8 *new = FcStrCopyFilename (c); - - if (!new) - return FcFalse; - if (config->cache) - FcStrFree (config->cache); - config->cache = new; - return FcTrue; -} - FcChar8 * FcConfigGetCache (FcConfig *config) { - if (!config) - { - config = FcConfigGetCurrent (); - if (!config) - return 0; - } - return config->cache; + return NULL; } FcFontSet * @@ -486,8 +475,6 @@ FcConfigSetFonts (FcConfig *config, config->fonts[set] = fonts; } - - FcBlanks * FcConfigGetBlanks (FcConfig *config) { @@ -504,23 +491,27 @@ FcBool FcConfigAddBlank (FcConfig *config, FcChar32 blank) { - FcBlanks *b; + FcBlanks *b, *freeme = 0; b = config->blanks; if (!b) { - b = FcBlanksCreate (); + freeme = b = FcBlanksCreate (); if (!b) return FcFalse; } if (!FcBlanksAdd (b, blank)) + { + if (freeme) + FcBlanksDestroy (freeme); return FcFalse; + } config->blanks = b; return FcTrue; } int -FcConfigGetRescanInverval (FcConfig *config) +FcConfigGetRescanInterval (FcConfig *config) { if (!config) { @@ -532,7 +523,7 @@ FcConfigGetRescanInverval (FcConfig *config) } FcBool -FcConfigSetRescanInverval (FcConfig *config, int rescanInterval) +FcConfigSetRescanInterval (FcConfig *config, int rescanInterval) { if (!config) { @@ -544,6 +535,22 @@ FcConfigSetRescanInverval (FcConfig *config, int rescanInterval) return FcTrue; } +/* + * A couple of typos escaped into the library + */ +int +FcConfigGetRescanInverval (FcConfig *config) +{ + return FcConfigGetRescanInterval (config); +} + +FcBool +FcConfigSetRescanInverval (FcConfig *config, int rescanInterval) +{ + return FcConfigSetRescanInterval (config, rescanInterval); +} + + FcBool FcConfigAddEdit (FcConfig *config, FcTest *test, @@ -554,14 +561,23 @@ FcConfigAddEdit (FcConfig *config, FcTest *t; int num; + switch (kind) { + case FcMatchPattern: + prev = &config->substPattern; + break; + case FcMatchFont: + prev = &config->substFont; + break; + case FcMatchScan: + prev = &config->substScan; + break; + default: + return FcFalse; + } subst = (FcSubst *) malloc (sizeof (FcSubst)); if (!subst) return FcFalse; FcMemAlloc (FC_MEM_SUBST, sizeof (FcSubst)); - if (kind == FcMatchPattern) - prev = &config->substPattern; - else - prev = &config->substFont; for (; *prev; prev = &(*prev)->next); *prev = subst; subst->next = 0; @@ -792,6 +808,7 @@ FcConfigEvaluate (FcPattern *p, FcExpr *e) FcValue v, vl, vr; FcResult r; FcMatrix *m; + FcChar8 *str; switch (e->op) { case FcOpInteger: @@ -805,7 +822,6 @@ FcConfigEvaluate (FcPattern *p, FcExpr *e) case FcOpString: v.type = FcTypeString; v.u.s = FcStrStaticName(e->u.sval); - v = FcValueSave (v); break; case FcOpMatrix: v.type = FcTypeMatrix; @@ -822,9 +838,10 @@ FcConfigEvaluate (FcPattern *p, FcExpr *e) v.u.b = e->u.bval; break; case FcOpField: - r = FcPatternGet (p, e->u.field, 0, &v); + r = FcPatternObjectGet (p, e->u.object, 0, &v); if (r != FcResultMatch) v.type = FcTypeVoid; + v = FcValueSave (v); break; case FcOpConst: if (FcNameConstant (e->u.constant, &v.u.i)) @@ -922,7 +939,9 @@ FcConfigEvaluate (FcPattern *p, FcExpr *e) switch (e->op) { case FcOpPlus: v.type = FcTypeString; - v.u.s = FcStrStaticName (FcStrPlus (vl.u.s, vr.u.s)); + str = FcStrPlus (vl.u.s, vr.u.s); + v.u.s = FcStrStaticName (str); + FcStrFree (str); if (!v.u.s) v.type = FcTypeVoid; @@ -1071,7 +1090,7 @@ FcConfigMatchValueList (FcPattern *p, e = 0; } - for (v = values; v; v = FcValueListPtrU(v->next)) + for (v = values; v; v = FcValueListNext(v)) { /* Compare the pattern value to the match expression value */ if (FcConfigCompareValue (&v->value, t->op, &value)) @@ -1107,17 +1126,17 @@ FcConfigValues (FcPattern *p, FcExpr *e, FcValueBinding binding) if (e->op == FcOpComma) { l->value = FcConfigEvaluate (p, e->u.tree.left); - l->next = FcValueListPtrCreateDynamic(FcConfigValues (p, e->u.tree.right, binding)); + l->next = FcConfigValues (p, e->u.tree.right, binding); } else { l->value = FcConfigEvaluate (p, e); - l->next = FcValueListPtrCreateDynamic(0); + l->next = NULL; } l->binding = binding; if (l->value.type == FcTypeVoid) { - FcValueList *next = FcValueListPtrU(l->next); + FcValueList *next = FcValueListNext(l); FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList)); free (l); @@ -1140,27 +1159,26 @@ FcConfigAdd (FcValueListPtr *head, sameBinding = position->binding; else sameBinding = FcValueBindingWeak; - for (v = FcValueListPtrCreateDynamic(new); FcValueListPtrU(v); - v = FcValueListPtrU(v)->next) - if (FcValueListPtrU(v)->binding == FcValueBindingSame) - FcValueListPtrU(v)->binding = sameBinding; + for (v = new; v != NULL; v = FcValueListNext(v)) + if (v->binding == FcValueBindingSame) + v->binding = sameBinding; if (append) { if (position) prev = &position->next; else - for (prev = head; FcValueListPtrU(*prev); - prev = &(FcValueListPtrU(*prev)->next)) + for (prev = head; *prev != NULL; + prev = &(*prev)->next) ; } else { if (position) { - for (prev = head; FcValueListPtrU(*prev); - prev = &(FcValueListPtrU(*prev)->next)) + for (prev = head; *prev != NULL; + prev = &(*prev)->next) { - if (FcValueListPtrU(*prev) == position) + if (*prev == position) break; } } @@ -1169,7 +1187,7 @@ FcConfigAdd (FcValueListPtr *head, if (FcDebug () & FC_DBG_EDIT) { - if (!FcValueListPtrU(*prev)) + if (*prev == NULL) printf ("position not on list\n"); } } @@ -1183,12 +1201,12 @@ FcConfigAdd (FcValueListPtr *head, if (new) { - last = FcValueListPtrCreateDynamic(new); - while (FcValueListPtrU(FcValueListPtrU(last)->next)) - last = FcValueListPtrU(last)->next; + last = new; + while (last->next != NULL) + last = last->next; - FcValueListPtrU(last)->next = *prev; - *prev = FcValueListPtrCreateDynamic(new); + last->next = *prev; + *prev = new; } if (FcDebug () & FC_DBG_EDIT) @@ -1207,14 +1225,13 @@ FcConfigDel (FcValueListPtr *head, { FcValueListPtr *prev; - for (prev = head; FcValueListPtrU(*prev); - prev = &(FcValueListPtrU(*prev)->next)) + for (prev = head; *prev != NULL; prev = &(*prev)->next) { - if (FcValueListPtrU(*prev) == position) + if (*prev == position) { *prev = position->next; - position->next = FcValueListPtrCreateDynamic(0); - FcValueListDestroy (FcValueListPtrCreateDynamic(position)); + position->next = NULL; + FcValueListDestroy (position); break; } } @@ -1222,13 +1239,13 @@ FcConfigDel (FcValueListPtr *head, static void FcConfigPatternAdd (FcPattern *p, - const char *object, + FcObject object, FcValueList *list, FcBool append) { if (list) { - FcPatternElt *e = FcPatternInsertElt (p, object); + FcPatternElt *e = FcPatternObjectInsertElt (p, object); if (!e) return; @@ -1241,24 +1258,24 @@ FcConfigPatternAdd (FcPattern *p, */ static void FcConfigPatternDel (FcPattern *p, - const char *object) + FcObject object) { - FcPatternElt *e = FcPatternFindElt (p, object); + FcPatternElt *e = FcPatternObjectFindElt (p, object); if (!e) return; - while (FcValueListPtrU(e->values)) - FcConfigDel (&e->values, FcValueListPtrU(e->values)); + while (e->values != NULL) + FcConfigDel (&e->values, e->values); } static void FcConfigPatternCanon (FcPattern *p, - const char *object) + FcObject object) { - FcPatternElt *e = FcPatternFindElt (p, object); + FcPatternElt *e = FcPatternObjectFindElt (p, object); if (!e) return; - if (!FcValueListPtrU(e->values)) - FcPatternDel (p, object); + if (e->values == NULL) + FcPatternObjectDel (p, object); } FcBool @@ -1282,6 +1299,20 @@ FcConfigSubstituteWithPat (FcConfig *config, return FcFalse; } + switch (kind) { + case FcMatchPattern: + s = config->substPattern; + break; + case FcMatchFont: + s = config->substFont; + break; + case FcMatchScan: + s = config->substScan; + break; + default: + return FcFalse; + } + st = (FcSubState *) malloc (config->maxObjects * sizeof (FcSubState)); if (!st && config->maxObjects) return FcFalse; @@ -1292,10 +1323,6 @@ FcConfigSubstituteWithPat (FcConfig *config, printf ("FcConfigSubstitute "); FcPatternPrint (p); } - if (kind == FcMatchPattern) - s = config->substPattern; - else - s = config->substFont; for (; s; s = s->next) { /* @@ -1315,7 +1342,7 @@ FcConfigSubstituteWithPat (FcConfig *config, else m = p; if (m) - st[i].elt = FcPatternFindElt (m, t->field); + st[i].elt = FcPatternObjectFindElt (m, t->object); else st[i].elt = 0; /* @@ -1336,12 +1363,12 @@ FcConfigSubstituteWithPat (FcConfig *config, * Check to see if there is a match, mark the location * to apply match-relative edits */ - st[i].value = FcConfigMatchValueList (m, t, FcValueListPtrU(st[i].elt->values)); + st[i].value = FcConfigMatchValueList (m, t, st[i].elt->values); if (!st[i].value) break; - if (t->qual == FcQualFirst && st[i].value != FcValueListPtrU(st[i].elt->values)) + if (t->qual == FcQualFirst && st[i].value != st[i].elt->values) break; - if (t->qual == FcQualNotFirst && st[i].value == FcValueListPtrU(st[i].elt->values)) + if (t->qual == FcQualNotFirst && st[i].value == st[i].elt->values) break; } if (t) @@ -1369,8 +1396,7 @@ FcConfigSubstituteWithPat (FcConfig *config, for (t = s->test, i = 0; t; t = t->next, i++) { if ((t->kind == FcMatchFont || kind == FcMatchPattern) && - !FcStrCmpIgnoreCase ((FcChar8 *) t->field, - (FcChar8 *) e->field)) + t->object == e->object) { /* * KLUDGE - the pattern may have been reallocated or @@ -1379,7 +1405,7 @@ FcConfigSubstituteWithPat (FcConfig *config, * the element again */ if (e != s->edit && st[i].elt) - st[i].elt = FcPatternFindElt (p, t->field); + st[i].elt = FcPatternObjectFindElt (p, t->object); if (!st[i].elt) t = 0; break; @@ -1394,7 +1420,7 @@ FcConfigSubstituteWithPat (FcConfig *config, if (t) { FcValueList *thisValue = st[i].value; - FcValueList *nextValue = thisValue ? FcValueListPtrU(thisValue->next) : 0; + FcValueList *nextValue = thisValue; /* * Append the new list of values after the current value @@ -1403,7 +1429,8 @@ FcConfigSubstituteWithPat (FcConfig *config, /* * Delete the marked value */ - FcConfigDel (&st[i].elt->values, thisValue); + if (thisValue) + FcConfigDel (&st[i].elt->values, thisValue); /* * Adjust any pointers into the value list to ensure * future edits occur at the same place @@ -1421,8 +1448,8 @@ FcConfigSubstituteWithPat (FcConfig *config, * Delete all of the values and insert * the new set */ - FcConfigPatternDel (p, e->field); - FcConfigPatternAdd (p, e->field, l, FcTrue); + FcConfigPatternDel (p, e->object); + FcConfigPatternAdd (p, e->object, l, FcTrue); /* * Adjust any pointers into the value list as they no * longer point to anything valid @@ -1445,7 +1472,7 @@ FcConfigSubstituteWithPat (FcConfig *config, } /* fall through ... */ case FcOpPrependFirst: - FcConfigPatternAdd (p, e->field, l, FcFalse); + FcConfigPatternAdd (p, e->object, l, FcFalse); break; case FcOpAppend: if (t) @@ -1455,9 +1482,10 @@ FcConfigSubstituteWithPat (FcConfig *config, } /* fall through ... */ case FcOpAppendLast: - FcConfigPatternAdd (p, e->field, l, FcTrue); + FcConfigPatternAdd (p, e->object, l, FcTrue); break; default: + FcValueListDestroy (l); break; } } @@ -1466,7 +1494,7 @@ FcConfigSubstituteWithPat (FcConfig *config, * any properties without data */ for (e = s->edit; e; e = e->next) - FcConfigPatternCanon (p, e->field); + FcConfigPatternCanon (p, e->object); if (FcDebug () & FC_DBG_EDIT) { @@ -1762,7 +1790,7 @@ FcConfigAppFontAddFile (FcConfig *config, FcConfigSetFonts (config, set, FcSetApplication); } - if (!FcFileScanConfig (set, subdirs, 0, config->blanks, file, FcFalse, config)) + if (!FcFileScanConfig (set, subdirs, config->blanks, file, config)) { FcStrSetDestroy (subdirs); return FcFalse; @@ -1775,6 +1803,7 @@ FcConfigAppFontAddFile (FcConfig *config, } FcStrListDone (sublist); } + FcStrSetDestroy (subdirs); return FcTrue; } @@ -1783,9 +1812,7 @@ FcConfigAppFontAddDir (FcConfig *config, const FcChar8 *dir) { FcFontSet *set; - FcStrSet *subdirs; - FcStrList *sublist; - FcChar8 *subdir; + FcStrSet *dirs; if (!config) { @@ -1793,8 +1820,9 @@ FcConfigAppFontAddDir (FcConfig *config, if (!config) return FcFalse; } - subdirs = FcStrSetCreate (); - if (!subdirs) + + dirs = FcStrSetCreate (); + if (!dirs) return FcFalse; set = FcConfigGetFonts (config, FcSetApplication); @@ -1803,25 +1831,20 @@ FcConfigAppFontAddDir (FcConfig *config, set = FcFontSetCreate (); if (!set) { - FcStrSetDestroy (subdirs); + FcStrSetDestroy (dirs); return FcFalse; } FcConfigSetFonts (config, set, FcSetApplication); } - if (!FcDirScanConfig (set, subdirs, 0, config->blanks, dir, FcFalse, config)) + FcStrSetAddFilename (dirs, dir); + + if (!FcConfigAddDirList (config, FcSetApplication, dirs)) { - FcStrSetDestroy (subdirs); + FcStrSetDestroy (dirs); return FcFalse; } - if ((sublist = FcStrListCreate (subdirs))) - { - while ((subdir = FcStrListNext (sublist))) - { - FcConfigAppFontAddDir (config, subdir); - } - FcStrListDone (sublist); - } + FcStrSetDestroy (dirs); return FcTrue; } @@ -1947,3 +1970,6 @@ FcConfigAcceptFont (FcConfig *config, return FcFalse; return FcTrue; } +#define __fccfg__ +#include "fcaliastail.h" +#undef __fccfg__