From 8245771d5a42dac36024411a0da047b9a7dc42c6 Mon Sep 17 00:00:00 2001 From: Patrick Lam Date: Sun, 11 Sep 2005 02:16:09 +0000 Subject: [PATCH] Merge with HEAD and finish the GCC 4 cleanups (no more warnings!) --- ChangeLog | 19 ++++ doc/fontconfig-user.sgml | 4 +- fc-glyphname/fc-glyphname.c | 4 +- fc-lang/fc-lang.c | 2 +- fc-match/fc-match.c | 8 +- fontconfig/fcprivate.h | 2 +- src/fccache.c | 35 +++---- src/fccfg.c | 2 +- src/fcdir.c | 4 +- src/fcfreetype.c | 191 ++++++++++++++++++++---------------- src/fcint.h | 10 +- src/fclist.c | 2 +- src/fcpat.c | 80 ++++++++------- src/fcstr.c | 2 +- src/fcxml.c | 11 ++- 15 files changed, 209 insertions(+), 167 deletions(-) diff --git a/ChangeLog b/ChangeLog index d3d9a81..64ea29c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ +2005-07-25 Keith Packard + + * doc/fontconfig-user.sgml: + * fc-glyphname/fc-glyphname.c: (scan), (main): + * fc-lang/fc-lang.c: (FcConfigHome): + * fc-match/fc-match.c: (main): + * src/fccfg.c: (FcConfigHome): + * src/fcfreetype.c: (FcSfntNameTranscode), (FcSfntNameLanguage), + (FcVendorMatch), (FcFreeTypeQuery), (FcFreeTypeCharSetAndSpacing), + (addtag), (FcFontCapabilities): + * src/fcpat.c: (FcValueListEntCreate): + * src/fcstr.c: (FcStrCaseWalkerInit): + * src/fcxml.c: (FcParsePatelt), (FcConfigParseAndLoadDir): + + Various GCC 4 cleanups for signed vs unsigned char + + Match only [0-9]*.conf files in {directory} + elements to avoid loading *.rpmsave or .dpkg-old files. (otaylor) + 2005-07-15 Carl Worth * src/fcint.h: diff --git a/doc/fontconfig-user.sgml b/doc/fontconfig-user.sgml index 11a13e2..5e240dd 100644 --- a/doc/fontconfig-user.sgml +++ b/doc/fontconfig-user.sgml @@ -276,8 +276,8 @@ file version number (currently 1). <sgmltag>include ignore_missing="no"</> This element contains the name of an additional configuration file or -directory. If a directory, every file within that directory starting with a -number will be processed in sorted order. When +directory. If a directory, every file within that directory starting with an +ASCII digit (U+0030 - U+0039) and ending with the string ``.conf'' will be processed in sorted order. When the XML datatype is traversed by FcConfigParse, the contents of the file(s) will also be incorporated into the configuration by passing the filename(s) to FcConfigLoadAndParse. If 'ignore_missing' is set to "yes" instead of the diff --git a/fc-glyphname/fc-glyphname.c b/fc-glyphname/fc-glyphname.c index 5b38c72..2c69c2b 100644 --- a/fc-glyphname/fc-glyphname.c +++ b/fc-glyphname/fc-glyphname.c @@ -105,7 +105,7 @@ scan (FILE *f, char *filename) gn = FcAllocGlyphName ((FcChar32) ucs, (FcChar8 *) name); if (!gn) fatal (filename, lineno, "out of memory"); - len = strlen ((FcChar8 *) name); + len = strlen (name); if (len > max_name_len) max_name_len = len; raw[nraw++] = gn; @@ -286,7 +286,7 @@ main (int argc, char **argv) for (i = 0; i < nraw; i++) printf ("static struct { FcChar32 ucs; FcChar8 name[%d]; }" " glyph%d = { 0x%lx, \"%s\" };\n", - (int) strlen (raw[i]->name) + 1, + (int) strlen ((char *) raw[i]->name) + 1, i, (unsigned long) raw[i]->ucs, raw[i]->name); /* diff --git a/fc-lang/fc-lang.c b/fc-lang/fc-lang.c index 9ec8418..5b6c63e 100644 --- a/fc-lang/fc-lang.c +++ b/fc-lang/fc-lang.c @@ -56,7 +56,7 @@ FcCacheBankToIndex (int bank) FcChar8 * FcConfigHome (void) { - return getenv ("HOME"); + return (FcChar8 *) getenv ("HOME"); } static void diff --git a/fc-match/fc-match.c b/fc-match/fc-match.c index 961a7a9..2a79722 100644 --- a/fc-match/fc-match.c +++ b/fc-match/fc-match.c @@ -167,17 +167,17 @@ main (int argc, char **argv) FcChar8 *file; if (FcPatternGetString (fs->fonts[j], FC_FILE, 0, &file) != FcResultMatch) - file = ""; + file = (FcChar8 *) ""; else { - FcChar8 *slash = strrchr (file, '/'); + FcChar8 *slash = (FcChar8 *) strrchr ((char *) file, '/'); if (slash) file = slash+1; } if (FcPatternGetString (fs->fonts[j], FC_FAMILY, 0, &family) != FcResultMatch) - family = ""; + family = (FcChar8 *) ""; if (FcPatternGetString (fs->fonts[j], FC_STYLE, 0, &style) != FcResultMatch) - file = ""; + file = (FcChar8 *) ""; printf ("%s: \"%s\" \"%s\"\n", file, family, style); } diff --git a/fontconfig/fcprivate.h b/fontconfig/fcprivate.h index 8f8d367..9be4c01 100644 --- a/fontconfig/fcprivate.h +++ b/fontconfig/fcprivate.h @@ -59,7 +59,7 @@ __v__.u.d = va_arg (va, double); \ break; \ case FcTypeString: \ - __v__.u.s = va_arg (va, const char *); \ + __v__.u.s = va_arg (va, const FcChar8 *); \ break; \ case FcTypeBool: \ __v__.u.b = va_arg (va, FcBool); \ diff --git a/src/fccache.c b/src/fccache.c index 95e1942..1f53065 100644 --- a/src/fccache.c +++ b/src/fccache.c @@ -60,8 +60,8 @@ FcCacheHaveBank (int bank); #define FC_DBG_CACHE_REF 1024 -static FcChar8 * -FcCacheReadString (int fd, FcChar8 *dest, int len) +static char * +FcCacheReadString (int fd, char *dest, int len) { FcChar8 c; FcBool escape; @@ -101,7 +101,7 @@ FcCacheReadString (int fd, FcChar8 *dest, int len) } static FcBool -FcCacheWriteString (int fd, const FcChar8 *chars) +FcCacheWriteString (int fd, const char *chars) { if (write (fd, chars, strlen(chars)+1) != strlen(chars)+1) return FcFalse; @@ -151,7 +151,7 @@ FcGlobalCacheLoad (FcGlobalCache *cache, FcStrSet *staleDirs, const FcChar8 *cache_file) { - FcChar8 name_buf[8192]; + char name_buf[8192]; FcGlobalCacheDir *d, *next; char * current_arch_machine_name; char candidate_arch_machine_name[MACHINE_SIGNATURE_SIZE + 9]; @@ -193,7 +193,7 @@ FcGlobalCacheLoad (FcGlobalCache *cache, { FcCache md; - FcStrSetAdd (staleDirs, FcStrCopy (name_buf)); + FcStrSetAdd (staleDirs, FcStrCopy ((FcChar8 *)name_buf)); read (cache->fd, &md, sizeof (FcCache)); lseek (cache->fd, FcCacheNextOffset (lseek(cache->fd, 0, SEEK_CUR)) + md.count, SEEK_SET); continue; @@ -206,7 +206,7 @@ FcGlobalCacheLoad (FcGlobalCache *cache, d->next = cache->dirs; cache->dirs = d; - d->name = FcStrCopy (name_buf); + d->name = (char *)FcStrCopy ((FcChar8 *)name_buf); d->ent = 0; d->offset = lseek (cache->fd, 0, SEEK_CUR); if (read (cache->fd, &d->metadata, sizeof (FcCache)) != sizeof (FcCache)) @@ -231,7 +231,7 @@ FcGlobalCacheLoad (FcGlobalCache *cache, } FcBool -FcGlobalCacheReadDir (FcFontSet *set, FcStrSet *dirs, FcGlobalCache * cache, const FcChar8 *dir, FcConfig *config) +FcGlobalCacheReadDir (FcFontSet *set, FcStrSet *dirs, FcGlobalCache * cache, const char *dir, FcConfig *config) { FcGlobalCacheDir *d; FcBool ret = FcFalse; @@ -256,7 +256,7 @@ FcGlobalCacheReadDir (FcFontSet *set, FcStrSet *dirs, FcGlobalCache * cache, con FcBool FcGlobalCacheUpdate (FcGlobalCache *cache, - const FcChar8 *name, + const char *name, FcFontSet *set) { FcGlobalCacheDir * d; @@ -281,7 +281,7 @@ FcGlobalCacheUpdate (FcGlobalCache *cache, cache->updated = FcTrue; - d->name = FcStrCopy (name); + d->name = (char *)FcStrCopy ((FcChar8 *)name); d->ent = FcDirCacheProduce (set, &d->metadata); d->offset = 0; return FcTrue; @@ -618,12 +618,12 @@ FcCacheRead (FcConfig *config, FcGlobalCache * cache) static FcBool FcDirCacheRead (FcFontSet * set, FcStrSet * dirs, const FcChar8 *dir) { - FcChar8 *cache_file = FcStrPlus (dir, (FcChar8 *) "/" FC_DIR_CACHE_FILE); + char *cache_file = (char *)FcStrPlus (dir, (FcChar8 *) "/" FC_DIR_CACHE_FILE); int fd; char * current_arch_machine_name; char candidate_arch_machine_name[9+MACHINE_SIGNATURE_SIZE]; off_t current_arch_start = 0; - FcChar8 subdirName[FC_MAX_FILE_LEN + 1 + 12 + 1]; + char subdirName[FC_MAX_FILE_LEN + 1 + 12 + 1]; if (!cache_file) goto bail; @@ -643,7 +643,7 @@ FcDirCacheRead (FcFontSet * set, FcStrSet * dirs, const FcChar8 *dir) goto bail1; while (strlen(FcCacheReadString (fd, subdirName, sizeof (subdirName))) > 0) - FcStrSetAdd (dirs, subdirName); + FcStrSetAdd (dirs, (FcChar8 *)subdirName); if (!FcDirCacheConsume (fd, set)) goto bail1; @@ -689,7 +689,7 @@ static void * FcDirCacheProduce (FcFontSet *set, FcCache *metadata) { void * current_dir_block, * final_dir_block; - static int rand_state = 0; + static unsigned int rand_state = 0; int bank; if (!rand_state) @@ -734,6 +734,7 @@ FcDirCacheWrite (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir) int fd, i; FcCache metadata; off_t current_arch_start = 0, truncate_to; + char * current_arch_machine_name, * header; void * current_dir_block; @@ -744,7 +745,7 @@ FcDirCacheWrite (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir) if (!metadata.count) { - unlink (cache_file); + unlink ((char *)cache_file); free (cache_file); return FcTrue; } @@ -755,7 +756,7 @@ FcDirCacheWrite (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir) if (FcDebug () & FC_DBG_CACHE) printf ("FcDirCacheWriteDir cache_file \"%s\"\n", cache_file); - fd = open(cache_file, O_RDWR | O_CREAT, 0666); + fd = open((char *)cache_file, O_RDWR | O_CREAT, 0666); if (fd == -1) goto bail0; @@ -782,7 +783,7 @@ FcDirCacheWrite (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir) goto bail1; for (i = 0; i < dirs->size; i++) - FcCacheWriteString (fd, dirs->strs[i]); + FcCacheWriteString (fd, (char *)dirs->strs[i]); FcCacheWriteString (fd, ""); write (fd, &metadata, sizeof(FcCache)); @@ -802,7 +803,7 @@ FcDirCacheWrite (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir) bail0: free (current_dir_block); bail: - unlink (cache_file); + unlink ((char *)cache_file); free (cache_file); return FcFalse; } diff --git a/src/fccfg.c b/src/fccfg.c index a14c6b5..aaca6ef 100644 --- a/src/fccfg.c +++ b/src/fccfg.c @@ -1652,7 +1652,7 @@ FcConfigHome (void) home = getenv ("USERPROFILE"); #endif - return home; + return (FcChar8 *) home; } return 0; } diff --git a/src/fcdir.c b/src/fcdir.c index 6b7d638..c494913 100644 --- a/src/fcdir.c +++ b/src/fcdir.c @@ -136,7 +136,7 @@ FcDirScanConfig (FcFontSet *set, /* * Check ~/.fonts.cache- file */ - if (cache && FcGlobalCacheReadDir (set, dirs, cache, dir, config)) + if (cache && FcGlobalCacheReadDir (set, dirs, cache, (char *)dir, config)) return FcTrue; } @@ -184,7 +184,7 @@ FcDirScanConfig (FcFontSet *set, * add the cache entry */ if (ret && cache) - FcGlobalCacheUpdate (cache, dir, tmpSet); + FcGlobalCacheUpdate (cache, (char *)dir, tmpSet); for (i = 0; i < tmpSet->nfont; i++) FcFontSetAdd (set, tmpSet->fonts[i]); diff --git a/src/fcfreetype.c b/src/fcfreetype.c index ee4af40..979a173 100644 --- a/src/fcfreetype.c +++ b/src/fcfreetype.c @@ -733,7 +733,7 @@ FcSfntNameTranscode (FT_SfntName *sname) #endif return 0; done: - if (FcStrCmpIgnoreBlanksAndCase (utf8, "") == 0) + if (FcStrCmpIgnoreBlanksAndCase (utf8, (FcChar8 *) "") == 0) { free (utf8); return 0; @@ -749,7 +749,7 @@ FcSfntNameLanguage (FT_SfntName *sname) if (fcFtLanguage[i].platform_id == sname->platform_id && (fcFtLanguage[i].language_id == TT_LANGUAGE_DONT_CARE || fcFtLanguage[i].language_id == sname->language_id)) - return fcFtLanguage[i].lang; + return (FcChar8 *) fcFtLanguage[i].lang; return 0; } @@ -801,7 +801,7 @@ FcVendorMatch(const FT_Char vendor[4], const FT_Char *vendor_string) /* vendor is not necessarily NUL-terminated. */ int i, len; - len = strlen(vendor_string); + len = strlen((char *) vendor_string); if (memcmp(vendor, vendor_string, len) != 0) return FcFalse; for (i = len; i < 4; i++) @@ -895,23 +895,25 @@ FcStringContainsConst (const FcChar8 *string, return -1; } +typedef FcChar8 *FC8; + static const FcStringConst weightConsts[] = { - { "thin", FC_WEIGHT_THIN }, - { "extralight", FC_WEIGHT_EXTRALIGHT }, - { "ultralight", FC_WEIGHT_ULTRALIGHT }, - { "light", FC_WEIGHT_LIGHT }, - { "book", FC_WEIGHT_BOOK }, - { "regular", FC_WEIGHT_REGULAR }, - { "normal", FC_WEIGHT_NORMAL }, - { "medium", FC_WEIGHT_MEDIUM }, - { "demibold", FC_WEIGHT_DEMIBOLD }, - { "demi", FC_WEIGHT_DEMIBOLD }, - { "semibold", FC_WEIGHT_SEMIBOLD }, - { "bold", FC_WEIGHT_BOLD }, - { "extrabold", FC_WEIGHT_EXTRABOLD }, - { "ultrabold", FC_WEIGHT_ULTRABOLD }, - { "black", FC_WEIGHT_BLACK }, - { "heavy", FC_WEIGHT_HEAVY }, + { (FC8) "thin", FC_WEIGHT_THIN }, + { (FC8) "extralight", FC_WEIGHT_EXTRALIGHT }, + { (FC8) "ultralight", FC_WEIGHT_ULTRALIGHT }, + { (FC8) "light", FC_WEIGHT_LIGHT }, + { (FC8) "book", FC_WEIGHT_BOOK }, + { (FC8) "regular", FC_WEIGHT_REGULAR }, + { (FC8) "normal", FC_WEIGHT_NORMAL }, + { (FC8) "medium", FC_WEIGHT_MEDIUM }, + { (FC8) "demibold", FC_WEIGHT_DEMIBOLD }, + { (FC8) "demi", FC_WEIGHT_DEMIBOLD }, + { (FC8) "semibold", FC_WEIGHT_SEMIBOLD }, + { (FC8) "bold", FC_WEIGHT_BOLD }, + { (FC8) "extrabold", FC_WEIGHT_EXTRABOLD }, + { (FC8) "ultrabold", FC_WEIGHT_ULTRABOLD }, + { (FC8) "black", FC_WEIGHT_BLACK }, + { (FC8) "heavy", FC_WEIGHT_HEAVY }, }; #define NUM_WEIGHT_CONSTS (sizeof (weightConsts) / sizeof (weightConsts[0])) @@ -920,15 +922,15 @@ static const FcStringConst weightConsts[] = { #define FcContainsWeight(s) FcStringContainsConst (s,weightConsts,NUM_WEIGHT_CONSTS) static const FcStringConst widthConsts[] = { - { "ultracondensed", FC_WIDTH_ULTRACONDENSED }, - { "extracondensed", FC_WIDTH_EXTRACONDENSED }, - { "semicondensed", FC_WIDTH_SEMICONDENSED }, - { "condensed", FC_WIDTH_CONDENSED }, /* must be after *condensed */ - { "normal", FC_WIDTH_NORMAL }, - { "semiexpanded", FC_WIDTH_SEMIEXPANDED }, - { "extraexpanded", FC_WIDTH_EXTRAEXPANDED }, - { "ultraexpanded", FC_WIDTH_ULTRAEXPANDED }, - { "expanded", FC_WIDTH_EXPANDED }, /* must be after *expanded */ + { (FC8) "ultracondensed", FC_WIDTH_ULTRACONDENSED }, + { (FC8) "extracondensed", FC_WIDTH_EXTRACONDENSED }, + { (FC8) "semicondensed", FC_WIDTH_SEMICONDENSED }, + { (FC8) "condensed", FC_WIDTH_CONDENSED }, /* must be after *condensed */ + { (FC8) "normal", FC_WIDTH_NORMAL }, + { (FC8) "semiexpanded", FC_WIDTH_SEMIEXPANDED }, + { (FC8) "extraexpanded", FC_WIDTH_EXTRAEXPANDED }, + { (FC8) "ultraexpanded", FC_WIDTH_ULTRAEXPANDED }, + { (FC8) "expanded", FC_WIDTH_EXPANDED }, /* must be after *expanded */ }; #define NUM_WIDTH_CONSTS (sizeof (widthConsts) / sizeof (widthConsts[0])) @@ -937,8 +939,8 @@ static const FcStringConst widthConsts[] = { #define FcContainsWidth(s) FcStringContainsConst (s,widthConsts,NUM_WIDTH_CONSTS) static const FcStringConst slantConsts[] = { - { "italic", FC_SLANT_ITALIC }, - { "oblique", FC_SLANT_OBLIQUE }, + { (FC8) "italic", FC_SLANT_ITALIC }, + { (FC8) "oblique", FC_SLANT_OBLIQUE }, }; #define NUM_SLANT_CONSTS (sizeof (slantConsts) / sizeof (slantConsts[0])) @@ -1154,7 +1156,7 @@ FcFreeTypeQuery (const FcChar8 *file, /* pad lang list with 'xx' to line up with elt */ while (*nlangp < *np) { - if (!FcPatternAddString (pat, eltlang, "xx")) + if (!FcPatternAddString (pat, eltlang, (FcChar8 *) "xx")) goto bail1; ++*nlangp; } @@ -1169,21 +1171,21 @@ FcFreeTypeQuery (const FcChar8 *file, } if (!nfamily && face->family_name && - FcStrCmpIgnoreBlanksAndCase (face->family_name, "") != 0) + FcStrCmpIgnoreBlanksAndCase ((FcChar8 *) face->family_name, (FcChar8 *) "") != 0) { if (FcDebug () & FC_DBG_SCANV) printf ("using FreeType family \"%s\"\n", face->family_name); - if (!FcPatternAddString (pat, FC_FAMILY, face->family_name)) + if (!FcPatternAddString (pat, FC_FAMILY, (FcChar8 *) face->family_name)) goto bail1; ++nfamily; } if (!nstyle && face->style_name && - FcStrCmpIgnoreBlanksAndCase (face->style_name, "") != 0) + FcStrCmpIgnoreBlanksAndCase ((FcChar8 *) face->style_name, (FcChar8 *) "") != 0) { if (FcDebug () & FC_DBG_SCANV) printf ("using FreeType style \"%s\"\n", face->style_name); - if (!FcPatternAddString (pat, FC_STYLE, face->style_name)) + if (!FcPatternAddString (pat, FC_STYLE, (FcChar8 *) face->style_name)) goto bail1; ++nstyle; } @@ -1400,7 +1402,7 @@ FcFreeTypeQuery (const FcChar8 *file, { if (weight == -1 && psfontinfo.weight) { - weight = FcIsWeight (psfontinfo.weight); + weight = FcIsWeight ((FcChar8 *) psfontinfo.weight); if (FcDebug() & FC_DBG_SCANV) printf ("\tType1 weight %s maps to %d\n", psfontinfo.weight, weight); @@ -1434,7 +1436,7 @@ FcFreeTypeQuery (const FcChar8 *file, BDF_PropertyRec prop; rc = MY_Get_BDF_Property(face, "FOUNDRY", &prop); if(rc == 0 && prop.type == BDF_PROPERTY_TYPE_ATOM) - foundry = prop.u.atom; + foundry = (FcChar8 *) prop.u.atom; } if (width == -1) @@ -1465,7 +1467,7 @@ FcFreeTypeQuery (const FcChar8 *file, MY_Get_BDF_Property (face, "SETWIDTH_NAME", &prop) == 0 && prop.type == BDF_PROPERTY_TYPE_ATOM) { - width = FcIsWidth (prop.u.atom); + width = FcIsWidth ((FcChar8 *) prop.u.atom); if (FcDebug () & FC_DBG_SCANV) printf ("\tsetwidth %s maps to %d\n", prop.u.atom, width); } @@ -1518,7 +1520,7 @@ FcFreeTypeQuery (const FcChar8 *file, width = FC_WIDTH_NORMAL; if (foundry == 0) - foundry = "unknown"; + foundry = (FcChar8 *) "unknown"; if (!FcPatternAddInteger (pat, FC_SLANT, slant)) goto bail1; @@ -1629,7 +1631,7 @@ FcFreeTypeQuery (const FcChar8 *file, { const char *font_format = FT_Get_X11_Font_Format (face); if (font_format) - FcPatternAddString (pat, FC_FONTFORMAT, font_format); + FcPatternAddString (pat, FC_FONTFORMAT, (FcChar8 *) font_format); } #endif @@ -2453,22 +2455,33 @@ FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing) if (glyph && FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance)) { - if (!has_advance) + /* + * ignore glyphs with zero advance. They’re + * combining characters, and while their behaviour + * isn’t well defined for monospaced applications in + * Unicode, there are many fonts which include + * zero-width combining characters in otherwise + * monospaced fonts. + */ + if (advance) { - has_advance = FcTrue; - advance_one = advance; + if (!has_advance) + { + has_advance = FcTrue; + advance_one = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_one)) + { + if (fixed_advance) + { + dual_advance = FcTrue; + fixed_advance = FcFalse; + advance_two = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_two)) + dual_advance = FcFalse; + } } - else if (!APPROXIMATELY_EQUAL (advance, advance_one)) - { - if (fixed_advance) - { - dual_advance = FcTrue; - fixed_advance = FcFalse; - advance_two = advance; - } - else if (!APPROXIMATELY_EQUAL (advance, advance_two)) - dual_advance = FcFalse; - } leaf = FcCharSetFindLeafCreate (fcs, ucs4); if (!leaf) @@ -2511,22 +2524,25 @@ FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing) if (glyph && FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance)) { - if (!has_advance) + if (advance) { - has_advance = FcTrue; - advance_one = advance; + if (!has_advance) + { + has_advance = FcTrue; + advance_one = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_one)) + { + if (fixed_advance) + { + dual_advance = FcTrue; + fixed_advance = FcFalse; + advance_two = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_two)) + dual_advance = FcFalse; + } } - else if (!APPROXIMATELY_EQUAL (advance, advance_one)) - { - if (fixed_advance) - { - dual_advance = FcTrue; - fixed_advance = FcFalse; - advance_two = advance; - } - else if (!APPROXIMATELY_EQUAL (advance, advance_two)) - dual_advance = FcFalse; - } if (!leaf) { @@ -2578,22 +2594,25 @@ FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing) if (ucs4 != 0xffff && FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance)) { - if (!has_advance) + if (advance) { - has_advance = FcTrue; - advance_one = advance; + if (!has_advance) + { + has_advance = FcTrue; + advance_one = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_one)) + { + if (fixed_advance) + { + dual_advance = FcTrue; + fixed_advance = FcFalse; + advance_two = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_two)) + dual_advance = FcFalse; + } } - else if (!APPROXIMATELY_EQUAL (advance, advance_one)) - { - if (fixed_advance) - { - dual_advance = FcTrue; - fixed_advance = FcFalse; - advance_two = advance; - } - else if (!APPROXIMATELY_EQUAL (advance, advance_two)) - dual_advance = FcFalse; - } leaf = FcCharSetFindLeafCreate (fcs, ucs4); if (!leaf) goto bail1; @@ -2689,9 +2708,9 @@ addtag(FcChar8 *complex, FT_ULong tag) return; if (*complex != '\0') - strcat (complex, " "); - strcat (complex, "otlayout:"); - strcat (complex, tagstring); + strcat ((char *) complex, " "); + strcat ((char *) complex, "otlayout:"); + strcat ((char *) complex, (char *) tagstring); } static int @@ -2820,7 +2839,7 @@ FcFontCapabilities(FT_Face face) complex[0] = '\0'; if (issilgraphitefont) - strcpy(complex, "ttable:Silf "); + strcpy((char *) complex, "ttable:Silf "); while ((indx1 < gsub_count) || (indx2 < gpos_count)) { if (indx1 == gsub_count) { diff --git a/src/fcint.h b/src/fcint.h index e29b447..b34d1ea 100644 --- a/src/fcint.h +++ b/src/fcint.h @@ -323,7 +323,7 @@ typedef struct _FcGlobalCacheDir FcGlobalCacheDir; struct _FcGlobalCacheDir { struct _FcGlobalCacheDir *next; - FcChar8 *name; + char *name; FcCache metadata; off_t offset; void *ent; @@ -422,7 +422,7 @@ FcBool FcGlobalCacheReadDir (FcFontSet *set, FcStrSet *dirs, FcGlobalCache *cache, - const FcChar8 *dir, + const char *dir, FcConfig *config); void @@ -432,7 +432,7 @@ FcGlobalCacheLoad (FcGlobalCache *cache, FcBool FcGlobalCacheUpdate (FcGlobalCache *cache, - const FcChar8 *file, + const char *file, FcFontSet *set); FcBool @@ -795,8 +795,8 @@ FcPatternFini (void); FcBool FcPatternAppend (FcPattern *p, FcPattern *s); -const char * -FcStrStaticName (const char *name); +const FcChar8 * +FcStrStaticName (const FcChar8 *name); FcChar32 FcStringHash (const FcChar8 *s); diff --git a/src/fclist.c b/src/fclist.c index 02ef877..357932b 100644 --- a/src/fclist.c +++ b/src/fclist.c @@ -67,7 +67,7 @@ FcObjectSetAdd (FcObjectSet *os, const char *object) low = 0; mid = 0; c = 1; - object = FcStrStaticName (object); + object = (char *)FcStrStaticName ((FcChar8 *)object); while (low <= high) { mid = (low + high) >> 1; diff --git a/src/fcpat.c b/src/fcpat.c index bffaca3..9600d33 100644 --- a/src/fcpat.c +++ b/src/fcpat.c @@ -792,7 +792,7 @@ FcPatternHash (const FcPattern *p) for (i = 0; i < p->num; i++) { h = (((h << 1) | (h >> 31)) ^ - FcStringHash (FcObjectPtrU ((FcPatternEltU(p->elts)+i)->object)) ^ + FcStringHash ((FcChar8 *)FcObjectPtrU ((FcPatternEltU(p->elts)+i)->object)) ^ FcValueListHash ((FcPatternEltU(p->elts)+i)->values)); } return h; @@ -1280,34 +1280,32 @@ FcPatternAppend (FcPattern *p, FcPattern *s) } #define OBJECT_HASH_SIZE 31 -struct objectBucket { +static struct objectBucket { struct objectBucket *next; FcChar32 hash; -}; -static struct objectBucket *FcObjectBuckets[OBJECT_HASH_SIZE]; +} *FcObjectBuckets[OBJECT_HASH_SIZE]; -const char * -FcStrStaticName (const char *name) +const FcChar8 * +FcStrStaticName (const FcChar8 *name) { - FcChar32 hash = FcStringHash ((const FcChar8 *) name); - struct objectBucket **p; - struct objectBucket *b; - int size; + FcChar32 hash = FcStringHash (name); + struct objectBucket **p; + struct objectBucket *b; + int size; - for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next) -) - if (b->hash == hash && !strcmp (name, (char *) (b + 1))) - return (char *) (b + 1); - size = sizeof (struct objectBucket) + strlen (name) + 1; + for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) + if (b->hash == hash && !strcmp ((char *)name, (char *) (b + 1))) + return (FcChar8 *) (b + 1); + size = sizeof (struct objectBucket) + strlen ((char *)name) + 1; b = malloc (size); FcMemAlloc (FC_MEM_STATICSTR, size); if (!b) return NULL; b->next = 0; b->hash = hash; - strcpy ((char *) (b + 1), name); + strcpy ((char *) (b + 1), (char *)name); *p = b; - return (char *) (b + 1); + return (FcChar8 *) (b + 1); } static void @@ -1370,11 +1368,11 @@ FcPatternEltPtrCreateStatic (int bank, int i) static void FcStrNewBank (void); static int -FcStrNeededBytes (const char * s); +FcStrNeededBytes (const FcChar8 * s); static void * FcStrDistributeBytes (FcCache * metadata, void * block_ptr); -static const char * -FcStrSerialize (int bank, const char * s); +static const FcChar8 * +FcStrSerialize (int bank, const FcChar8 * s); static void * FcStrUnserialize (FcCache metadata, void *block_ptr); @@ -1669,10 +1667,10 @@ FcValueListSerialize(int bank, FcValueList *pi) case FcTypeString: if (v->u.s) { - const char * s = FcStrSerialize(bank, v->u.s); + const FcChar8 * s = FcStrSerialize(bank, v->u.s); if (!s) return FcValueListPtrCreateDynamic(pi); - v->u.s_off = s - (const char *)v; + v->u.s_off = s - (const FcChar8 *)v; v->type |= FC_STORAGE_STATIC; } break; @@ -1743,7 +1741,7 @@ FcValueListPtrCreateDynamic(FcValueList * p) return r; } -static char ** static_strs; +static FcChar8 ** static_strs; static int static_str_bank_count = 0, fcstr_ptr, fcstr_count; static struct objectBucket *FcStrBuckets[OBJECT_HASH_SIZE]; @@ -1772,7 +1770,7 @@ FcStrNewBank (void) } static int -FcStrNeededBytes (const char * s) +FcStrNeededBytes (const FcChar8 * s) { FcChar32 hash = FcStringHash ((const FcChar8 *) s); struct objectBucket **p; @@ -1780,27 +1778,27 @@ FcStrNeededBytes (const char * s) int size; for (p = &FcStrBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) - if (b->hash == hash && !strcmp (s, (char *) (b + 1))) + if (b->hash == hash && !strcmp ((char *)s, (char *) (b + 1))) return 0; - size = sizeof (struct objectBucket) + strlen (s) + 1 + sizeof(char *); + size = sizeof (struct objectBucket) + strlen ((char *)s) + 1 + sizeof(char *); b = malloc (size); FcMemAlloc (FC_MEM_STATICSTR, size); if (!b) return -1; b->next = 0; b->hash = hash; - strcpy ((char *) (b + 1), s); - *(char **)((char *) (b + 1) + strlen(s) + 1) = 0; + strcpy ((char *) (b + 1), (char *)s); + *(char **)((char *) (b + 1) + strlen((char *)s) + 1) = 0; *p = b; - fcstr_count += strlen(s) + 1; - return strlen(s) + 1; + fcstr_count += strlen((char *)s) + 1; + return strlen((char *)s) + 1; } static FcBool FcStrEnsureBank (int bi) { - char ** ss; + FcChar8 ** ss; if (!static_strs || static_str_bank_count <= bi) { @@ -1827,7 +1825,7 @@ FcStrDistributeBytes (FcCache * metadata, void * block_ptr) return 0; FcMemAlloc (FC_MEM_STRING, sizeof (char) * fcstr_count); - static_strs[bi] = (char *)block_ptr; + static_strs[bi] = (FcChar8 *)block_ptr; block_ptr = (void *)((char *)block_ptr + (sizeof (char) * fcstr_count)); metadata->str_count = fcstr_count; fcstr_ptr = 0; @@ -1835,8 +1833,8 @@ FcStrDistributeBytes (FcCache * metadata, void * block_ptr) return block_ptr; } -static const char * -FcStrSerialize (int bank, const char * s) +static const FcChar8 * +FcStrSerialize (int bank, const FcChar8 * s) { FcChar32 hash = FcStringHash ((const FcChar8 *) s); struct objectBucket **p; @@ -1844,15 +1842,15 @@ FcStrSerialize (int bank, const char * s) int bi = FcCacheBankToIndex(bank); for (p = &FcStrBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) - if (b->hash == hash && !strcmp (s, (char *) (b + 1))) + if (b->hash == hash && !strcmp ((char *)s, (char *) (b + 1))) { - char * t = *(char **)(((char *)(b + 1)) + strlen (s) + 1); + FcChar8 * t = *(FcChar8 **)(((FcChar8 *)(b + 1)) + strlen ((char *)s) + 1); if (!t) { - strcpy(static_strs[bi] + fcstr_ptr, s); - *(char **)((char *) (b + 1) + strlen(s) + 1) = (static_strs[bi] + fcstr_ptr); - fcstr_ptr += strlen(s) + 1; - t = *(char **)(((char *)(b + 1)) + strlen (s) + 1); + strcpy((char *)(static_strs[bi] + fcstr_ptr), (char *)s); + *(FcChar8 **)((FcChar8 *) (b + 1) + strlen((char *)s) + 1) = (static_strs[bi] + fcstr_ptr); + fcstr_ptr += strlen((char *)s) + 1; + t = *(FcChar8 **)(((FcChar8 *)(b + 1)) + strlen ((char *)s) + 1); } return t; } @@ -1867,7 +1865,7 @@ FcStrUnserialize (FcCache metadata, void *block_ptr) return 0; FcMemAlloc (FC_MEM_STRING, sizeof (char) * metadata.str_count); - static_strs[bi] = (char *)block_ptr; + static_strs[bi] = (FcChar8 *)block_ptr; block_ptr = (void *)((char *)block_ptr + (sizeof (char) * metadata.str_count)); diff --git a/src/fcstr.c b/src/fcstr.c index 730e440..fb715a4 100644 --- a/src/fcstr.c +++ b/src/fcstr.c @@ -83,7 +83,7 @@ FcStrCaseWalkerInit (const FcChar8 *src, FcCaseWalker *w) { w->src = src; w->read = 0; - w->len = strlen (src); + w->len = strlen ((char *) src); } static FcChar8 diff --git a/src/fcxml.c b/src/fcxml.c index 4176c73..7a48628 100644 --- a/src/fcxml.c +++ b/src/fcxml.c @@ -1926,7 +1926,7 @@ FcParsePatelt (FcConfigParse *parse) return; } - name = FcConfigGetAttribute (parse, "name"); + name = (char *) FcConfigGetAttribute (parse, "name"); if (!name) { FcConfigMessage (parse, FcSevereWarning, "missing pattern element name"); @@ -2264,11 +2264,16 @@ FcConfigParseAndLoadDir (FcConfig *config, while (ret && (e = readdir (d))) { + int d_len; +#define TAIL ".conf" +#define TAIL_LEN 5 /* - * Add all files of the form [0-9]* + * Add all files of the form [0-9]*.conf */ if ('0' <= e->d_name[0] && e->d_name[0] <= '9' && - strlen (e->d_name) < FC_MAX_FILE_LEN) + (d_len = strlen (e->d_name)) < FC_MAX_FILE_LEN && + d_len > TAIL_LEN && + strcmp (e->d_name + d_len - TAIL_LEN, TAIL) == 0) { strcpy ((char *) base, (char *) e->d_name); if (!FcStrSetAdd (files, file)) -- 2.39.2