X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=src%2Ffccfg.c;h=09c59919d8f37bd1998f7d530f7b96865512b8a2;hb=HEAD;hp=1139744c04ec5f7dc01c82e810076601c93277fd;hpb=9e612141df7e693ef98071f102cecb5d777ceecb;p=fontconfig.git diff --git a/src/fccfg.c b/src/fccfg.c index 1139744..09c5991 100644 --- a/src/fccfg.c +++ b/src/fccfg.c @@ -1,5 +1,5 @@ /* - * $RCSId: xc/lib/fontconfig/src/fccfg.c,v 1.23 2002/08/31 22:17:32 keithp Exp $ + * fontconfig/src/fccfg.c * * Copyright © 2000 Keith Packard * @@ -7,15 +7,15 @@ * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Keith Packard not be used in + * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard makes no + * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * - * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR @@ -48,19 +48,19 @@ FcConfigCreate (void) if (!config) goto bail0; FcMemAlloc (FC_MEM_CONFIG, sizeof (FcConfig)); - + config->configDirs = FcStrSetCreate (); if (!config->configDirs) goto bail1; - + config->configFiles = FcStrSetCreate (); if (!config->configFiles) goto bail2; - + config->fontDirs = FcStrSetCreate (); if (!config->fontDirs) goto bail3; - + config->acceptGlobs = FcStrSetCreate (); if (!config->acceptGlobs) goto bail4; @@ -72,7 +72,7 @@ FcConfigCreate (void) config->acceptPatterns = FcFontSetCreate (); if (!config->acceptPatterns) goto bail6; - + config->rejectPatterns = FcFontSetCreate (); if (!config->rejectPatterns) goto bail7; @@ -80,7 +80,7 @@ FcConfigCreate (void) config->cacheDirs = FcStrSetCreate (); if (!config->cacheDirs) goto bail8; - + config->blanks = 0; config->substPattern = 0; @@ -91,8 +91,12 @@ FcConfigCreate (void) config->fonts[set] = 0; config->rescanTime = time(0); - config->rescanInterval = 30; - + config->rescanInterval = 30; + + config->expr_pool = NULL; + + config->ref = 1; + return config; bail8: @@ -127,7 +131,7 @@ FcConfigNewestFile (FcStrSet *files) if (list) { while ((file = FcStrListNext (list))) - if (stat ((char *) file, &statb) == 0) + if (FcStat (file, &statb) == 0) if (!newest.set || statb.st_mtime - newest.time > 0) { newest.set = FcTrue; @@ -138,23 +142,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) { @@ -163,11 +154,24 @@ 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; + /* We need to check for potential clock problems here (OLPC ticket #6046) */ + if ((config_time.set && (config_time.time - now) > 0) || + (config_dir_time.set && (config_dir_time.time - now) > 0) || + (font_time.set && (font_time.time - now) > 0)) + { + fprintf (stderr, + "Fontconfig warning: Directory/file mtime in the future. New fonts may not be detected\n"); + config->rescanTime = now; + return FcTrue; + } + else + return FcFalse; } config->rescanTime = now; return FcTrue; @@ -177,7 +181,7 @@ static void FcSubstDestroy (FcSubst *s) { FcSubst *n; - + while (s) { n = s->next; @@ -191,10 +195,49 @@ FcSubstDestroy (FcSubst *s) } } +FcExpr * +FcConfigAllocExpr (FcConfig *config) +{ + if (!config->expr_pool || config->expr_pool->next == config->expr_pool->end) + { + FcExprPage *new_page; + + new_page = malloc (sizeof (FcExprPage)); + if (!new_page) + return 0; + FcMemAlloc (FC_MEM_EXPR, sizeof (FcExprPage)); + + new_page->next_page = config->expr_pool; + new_page->next = new_page->exprs; + config->expr_pool = new_page; + } + + return config->expr_pool->next++; +} + +FcConfig * +FcConfigReference (FcConfig *config) +{ + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + + config->ref++; + + return config; +} + void FcConfigDestroy (FcConfig *config) { FcSetName set; + FcExprPage *page; + + if (--config->ref > 0) + return; if (config == _fcConfig) _fcConfig = 0; @@ -218,6 +261,15 @@ FcConfigDestroy (FcConfig *config) if (config->fonts[set]) FcFontSetDestroy (config->fonts[set]); + page = config->expr_pool; + while (page) + { + FcExprPage *next = page->next_page; + FcMemFree (FC_MEM_EXPR, sizeof (FcExprPage)); + free (page); + page = next; + } + free (config); FcMemFree (FC_MEM_CONFIG, sizeof (FcConfig)); } @@ -227,7 +279,8 @@ FcConfigDestroy (FcConfig *config) */ FcBool -FcConfigAddCache (FcConfig *config, FcCache *cache) +FcConfigAddCache (FcConfig *config, FcCache *cache, + FcSetName set, FcStrSet *dirSet) { FcFontSet *fs; intptr_t *dirs; @@ -239,6 +292,8 @@ FcConfigAddCache (FcConfig *config, FcCache *cache) fs = FcCacheSet (cache); if (fs) { + int nref = 0; + for (i = 0; i < fs->nfont; i++) { FcPattern *font = FcFontSetFont (fs, i); @@ -260,9 +315,10 @@ FcConfigAddCache (FcConfig *config, FcCache *cache) if (!FcConfigAcceptFont (config, font)) continue; - FcPatternReference (font); - FcFontSetAdd (config->fonts[FcSetSystem], font); + nref++; + FcFontSetAdd (config->fonts[set], font); } + FcDirCacheReference (cache, nref); } /* @@ -275,12 +331,37 @@ FcConfigAddCache (FcConfig *config, FcCache *cache) { FcChar8 *dir = FcOffsetToPtr (dirs, dirs[i], FcChar8); if (FcConfigAcceptFilename (config, dir)) - FcConfigAddFontDir (config, dir); + FcStrSetAddFilename (dirSet, dir); } } return FcTrue; } +static FcBool +FcConfigAddDirList (FcConfig *config, FcSetName set, FcStrSet *dirSet) +{ + FcStrList *dirlist; + FcChar8 *dir; + FcCache *cache; + + 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; +} + /* * Scan the current list of directories in the configuration * and build the set of available fonts. @@ -290,9 +371,6 @@ FcBool FcConfigBuildFonts (FcConfig *config) { FcFontSet *fonts; - FcStrList *dirlist; - FcChar8 *dir; - FcCache *cache; if (!config) { @@ -303,38 +381,23 @@ FcConfigBuildFonts (FcConfig *config) fonts = FcFontSetCreate (); if (!fonts) - goto bail; - + return FcFalse; + FcConfigSetFonts (config, fonts, FcSetSystem); - - dirlist = FcStrListCreate (config->fontDirs); - if (!dirlist) - goto bail; - - 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); - FcDirCacheUnload (cache); - } - - FcStrListDone (dirlist); - + + if (!FcConfigAddDirList (config, FcSetSystem, config->fontDirs)) + return FcFalse; if (FcDebug () & FC_DBG_FONTSET) FcFontSetPrint (fonts); - return FcTrue; -bail: - return FcFalse; } FcBool FcConfigSetCurrent (FcConfig *config) { + if (config == _fcConfig) + return FcTrue; + if (!config->fonts) if (!FcConfigBuildFonts (config)) return FcFalse; @@ -384,7 +447,7 @@ FcBool FcConfigAddDir (FcConfig *config, const FcChar8 *d) { - return (FcConfigAddConfigDir (config, d) && + return (FcConfigAddConfigDir (config, d) && FcConfigAddFontDir (config, d)); } @@ -418,17 +481,17 @@ FcConfigGetCacheDirs (FcConfig *config) } return FcStrListCreate (config->cacheDirs); } - + FcBool FcConfigAddConfigFile (FcConfig *config, const FcChar8 *f) { FcBool ret; FcChar8 *file = FcConfigFilename (f); - + if (!file) return FcFalse; - + ret = FcStrSetAdd (config->configFiles, file); FcStrFree (file); return ret; @@ -492,7 +555,7 @@ FcConfigAddBlank (FcConfig *config, FcChar32 blank) { FcBlanks *b, *freeme = 0; - + b = config->blanks; if (!b) { @@ -511,7 +574,7 @@ FcConfigAddBlank (FcConfig *config, } int -FcConfigGetRescanInverval (FcConfig *config) +FcConfigGetRescanInterval (FcConfig *config) { if (!config) { @@ -523,7 +586,7 @@ FcConfigGetRescanInverval (FcConfig *config) } FcBool -FcConfigSetRescanInverval (FcConfig *config, int rescanInterval) +FcConfigSetRescanInterval (FcConfig *config, int rescanInterval) { if (!config) { @@ -535,6 +598,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, @@ -618,10 +697,10 @@ FcConfigCompareValue (const FcValue *left_o, FcValue left = FcValueCanonicalize(left_o); FcValue right = FcValueCanonicalize(right_o); FcBool ret = FcFalse; - + left = FcConfigPromote (left, right); right = FcConfigPromote (right, left); - if (left.type == right.type) + if (left.type == right.type) { switch (left.type) { case FcTypeInteger: @@ -637,16 +716,16 @@ FcConfigCompareValue (const FcValue *left_o, case FcOpNotContains: ret = left.u.d != right.u.d; break; - case FcOpLess: + case FcOpLess: ret = left.u.d < right.u.d; break; - case FcOpLessEqual: + case FcOpLessEqual: ret = left.u.d <= right.u.d; break; - case FcOpMore: + case FcOpMore: ret = left.u.d > right.u.d; break; - case FcOpMoreEqual: + case FcOpMoreEqual: ret = left.u.d >= right.u.d; break; default: @@ -655,7 +734,7 @@ FcConfigCompareValue (const FcValue *left_o, break; case FcTypeBool: switch (op) { - case FcOpEqual: + case FcOpEqual: case FcOpContains: case FcOpListing: ret = left.u.b == right.u.b; @@ -670,7 +749,7 @@ FcConfigCompareValue (const FcValue *left_o, break; case FcTypeString: switch (op) { - case FcOpEqual: + case FcOpEqual: case FcOpListing: ret = FcStrCmpIgnoreCase (left.u.s, right.u.s) == 0; break; @@ -681,7 +760,7 @@ FcConfigCompareValue (const FcValue *left_o, ret = FcStrCmpIgnoreCase (left.u.s, right.u.s) != 0; break; case FcOpNotContains: - ret = FcStrCmpIgnoreCase (left.u.s, right.u.s) == 0; + ret = FcStrStrIgnoreCase (left.u.s, right.u.s) == 0; break; default: break; @@ -793,7 +872,7 @@ FcConfigEvaluate (FcPattern *p, FcExpr *e) FcResult r; FcMatrix *m; FcChar8 *str; - + switch (e->op) { case FcOpInteger: v.type = FcTypeInteger; @@ -805,7 +884,8 @@ FcConfigEvaluate (FcPattern *p, FcExpr *e) break; case FcOpString: v.type = FcTypeString; - v.u.s = FcStrStaticName(e->u.sval); + v.u.s = e->u.sval; + v = FcValueSave (v); break; case FcOpMatrix: v.type = FcTypeMatrix; @@ -817,6 +897,11 @@ FcConfigEvaluate (FcPattern *p, FcExpr *e) v.u.c = e->u.cval; v = FcValueSave (v); break; + case FcOpLangSet: + v.type = FcTypeLangSet; + v.u.l = e->u.lval; + v = FcValueSave (v); + break; case FcOpBool: v.type = FcTypeBool; v.u.b = e->u.bval; @@ -877,24 +962,24 @@ FcConfigEvaluate (FcPattern *p, FcExpr *e) switch (vl.type) { case FcTypeDouble: switch (e->op) { - case FcOpPlus: + case FcOpPlus: v.type = FcTypeDouble; - v.u.d = vl.u.d + vr.u.d; + v.u.d = vl.u.d + vr.u.d; break; case FcOpMinus: v.type = FcTypeDouble; - v.u.d = vl.u.d - vr.u.d; + v.u.d = vl.u.d - vr.u.d; break; case FcOpTimes: v.type = FcTypeDouble; - v.u.d = vl.u.d * vr.u.d; + v.u.d = vl.u.d * vr.u.d; break; case FcOpDivide: v.type = FcTypeDouble; - v.u.d = vl.u.d / vr.u.d; + v.u.d = vl.u.d / vr.u.d; break; default: - v.type = FcTypeVoid; + v.type = FcTypeVoid; break; } if (v.type == FcTypeDouble && @@ -915,7 +1000,7 @@ FcConfigEvaluate (FcPattern *p, FcExpr *e) v.u.b = vl.u.b && vr.u.b; break; default: - v.type = FcTypeVoid; + v.type = FcTypeVoid; break; } break; @@ -926,7 +1011,7 @@ FcConfigEvaluate (FcPattern *p, FcExpr *e) str = FcStrPlus (vl.u.s, vr.u.s); v.u.s = FcStrStaticName (str); FcStrFree (str); - + if (!v.u.s) v.type = FcTypeVoid; break; @@ -956,6 +1041,44 @@ FcConfigEvaluate (FcPattern *p, FcExpr *e) break; } break; + case FcTypeCharSet: + switch (e->op) { + case FcOpPlus: + v.type = FcTypeCharSet; + v.u.c = FcCharSetUnion (vl.u.c, vr.u.c); + if (!v.u.c) + v.type = FcTypeVoid; + break; + case FcOpMinus: + v.type = FcTypeCharSet; + v.u.c = FcCharSetSubtract (vl.u.c, vr.u.c); + if (!v.u.c) + v.type = FcTypeVoid; + break; + default: + v.type = FcTypeVoid; + break; + } + break; + case FcTypeLangSet: + switch (e->op) { + case FcOpPlus: + v.type = FcTypeLangSet; + v.u.l = FcLangSetUnion (vl.u.l, vr.u.l); + if (!v.u.l) + v.type = FcTypeVoid; + break; + case FcOpMinus: + v.type = FcTypeLangSet; + v.u.l = FcLangSetSubtract (vl.u.l, vr.u.l); + if (!v.u.l) + v.type = FcTypeVoid; + break; + default: + v.type = FcTypeVoid; + break; + } + break; default: v.type = FcTypeVoid; break; @@ -1059,7 +1182,7 @@ FcConfigMatchValueList (FcPattern *p, FcExpr *e = t->expr; FcValue value; FcValueList *v; - + while (e) { /* Compute the value of the match expression */ @@ -1100,7 +1223,7 @@ static FcValueList * FcConfigValues (FcPattern *p, FcExpr *e, FcValueBinding binding) { FcValueList *l; - + if (!e) return 0; l = (FcValueList *) malloc (sizeof (FcValueList)); @@ -1138,7 +1261,7 @@ FcConfigAdd (FcValueListPtr *head, { FcValueListPtr *prev, last, v; FcValueBinding sameBinding; - + if (position) sameBinding = position->binding; else @@ -1151,7 +1274,7 @@ FcConfigAdd (FcValueListPtr *head, if (position) prev = &position->next; else - for (prev = head; *prev != NULL; + for (prev = head; *prev != NULL; prev = &(*prev)->next) ; } @@ -1159,7 +1282,7 @@ FcConfigAdd (FcValueListPtr *head, { if (position) { - for (prev = head; *prev != NULL; + for (prev = head; *prev != NULL; prev = &(*prev)->next) { if (*prev == position) @@ -1182,24 +1305,24 @@ FcConfigAdd (FcValueListPtr *head, FcValueListPrint (*head); printf ("\n"); } - + if (new) { last = new; while (last->next != NULL) last = last->next; - + last->next = *prev; *prev = new; } - + if (FcDebug () & FC_DBG_EDIT) { printf ("%s list after ", append ? "Append" : "Prepend"); FcValueListPrint (*head); printf ("\n"); } - + return FcTrue; } @@ -1230,7 +1353,7 @@ FcConfigPatternAdd (FcPattern *p, if (list) { FcPatternElt *e = FcPatternObjectInsertElt (p, object); - + if (!e) return; FcConfigAdd (&e->values, 0, append, list); @@ -1382,7 +1505,7 @@ FcConfigSubstituteWithPat (FcConfig *config, if ((t->kind == FcMatchFont || kind == FcMatchPattern) && t->object == e->object) { - /* + /* * KLUDGE - the pattern may have been reallocated or * things may have been inserted or deleted above * this element by other edits. Go back and find @@ -1405,7 +1528,7 @@ FcConfigSubstituteWithPat (FcConfig *config, { FcValueList *thisValue = st[i].value; FcValueList *nextValue = thisValue; - + /* * Append the new list of values after the current value */ @@ -1504,10 +1627,16 @@ FcConfigSubstitute (FcConfig *config, return FcConfigSubstituteWithPat (config, p, 0, kind); } -#if defined (_WIN32) && (defined (PIC) || defined (DLL_EXPORT)) +#if defined (_WIN32) + +# define WIN32_LEAN_AND_MEAN +# define WIN32_EXTRA_LEAN +# include static FcChar8 fontconfig_path[1000] = ""; +# if (defined (PIC) || defined (DLL_EXPORT)) + BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, @@ -1538,19 +1667,19 @@ DllMain (HINSTANCE hinstDLL, } else fontconfig_path[0] = '\0'; - + break; } return TRUE; } +# endif /* !PIC */ + #undef FONTCONFIG_PATH #define FONTCONFIG_PATH fontconfig_path -#else /* !(_WIN32 && PIC) */ - -#endif /* !(_WIN32 && PIC) */ +#endif /* !_WIN32 */ #ifndef FONTCONFIG_FILE #define FONTCONFIG_FILE "fonts.conf" @@ -1560,10 +1689,19 @@ static FcChar8 * FcConfigFileExists (const FcChar8 *dir, const FcChar8 *file) { FcChar8 *path; + int size; if (!dir) dir = (FcChar8 *) ""; - path = malloc (strlen ((char *) dir) + 1 + strlen ((char *) file) + 1); + + size = strlen ((char *) dir) + 1 + strlen ((char *) file) + 1; + /* + * workaround valgrind warning because glibc takes advantage of how it knows memory is + * allocated to implement strlen by reading in groups of 4 + */ + size = (size + 3) & ~3; + + path = malloc (size); if (!path) return 0; @@ -1582,10 +1720,10 @@ FcConfigFileExists (const FcChar8 *dir, const FcChar8 *file) #endif strcat ((char *) path, (char *) file); - FcMemAlloc (FC_MEM_STRING, strlen ((char *) path) + 1); + FcMemAlloc (FC_MEM_STRING, size); if (access ((char *) path, R_OK) == 0) return path; - + FcStrFree (path); return 0; } @@ -1617,7 +1755,7 @@ FcConfigGetPath (void) if (env) { e = env; - while (*e) + while (*e) { colon = (FcChar8 *) strchr ((char *) e, FC_SEARCH_PATH_SEPARATOR); if (!colon) @@ -1634,7 +1772,18 @@ FcConfigGetPath (void) i++; } } - + +#ifdef _WIN32 + if (fontconfig_path[0] == '\0') + { + char *p; + if(!GetModuleFileName(NULL, fontconfig_path, sizeof(fontconfig_path))) + goto bail1; + p = strrchr (fontconfig_path, '\\'); + if (p) *p = '\0'; + strcat (fontconfig_path, "\\fonts"); + } +#endif dir = (FcChar8 *) FONTCONFIG_PATH; path[i] = malloc (strlen ((char *) dir) + 1); if (!path[i]) @@ -1691,7 +1840,7 @@ FcChar8 * FcConfigFilename (const FcChar8 *url) { FcChar8 *file, *dir, **path, **p; - + if (!url || !*url) { url = (FcChar8 *) getenv ("FONTCONFIG_FILE"); @@ -1761,7 +1910,7 @@ FcConfigAppFontAddFile (FcConfig *config, subdirs = FcStrSetCreate (); if (!subdirs) return FcFalse; - + set = FcConfigGetFonts (config, FcSetApplication); if (!set) { @@ -1796,46 +1945,39 @@ FcConfigAppFontAddDir (FcConfig *config, const FcChar8 *dir) { FcFontSet *set; - FcStrSet *subdirs; - FcStrList *sublist; - FcChar8 *subdir; - + FcStrSet *dirs; + if (!config) { config = FcConfigGetCurrent (); if (!config) return FcFalse; } - subdirs = FcStrSetCreate (); - if (!subdirs) + + dirs = FcStrSetCreate (); + if (!dirs) return FcFalse; - + set = FcConfigGetFonts (config, FcSetApplication); if (!set) { set = FcFontSetCreate (); if (!set) { - FcStrSetDestroy (subdirs); + FcStrSetDestroy (dirs); return FcFalse; } FcConfigSetFonts (config, set, FcSetApplication); } - - if (!FcDirScanConfig (set, subdirs, 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 (subdirs); + FcStrSetDestroy (dirs); return FcTrue; } @@ -1872,7 +2014,7 @@ FcConfigGlobMatch (const FcChar8 *glob, { FcChar8 c; - while ((c = *glob++)) + while ((c = *glob++)) { switch (c) { case '*': @@ -1944,7 +2086,7 @@ FcConfigPatternsMatch (const FcFontSet *patterns, const FcPattern *font) { int i; - + for (i = 0; i < patterns->nfont; i++) if (FcListPatternMatchAny (patterns->fonts[i], font)) return FcTrue; @@ -1961,3 +2103,6 @@ FcConfigAcceptFont (FcConfig *config, return FcFalse; return FcTrue; } +#define __fccfg__ +#include "fcaliastail.h" +#undef __fccfg__