diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/fccache.c | 35 | ||||
-rw-r--r-- | src/fccfg.c | 2 | ||||
-rw-r--r-- | src/fcdir.c | 4 | ||||
-rw-r--r-- | src/fcfreetype.c | 191 | ||||
-rw-r--r-- | src/fcint.h | 10 | ||||
-rw-r--r-- | src/fclist.c | 2 | ||||
-rw-r--r-- | src/fcpat.c | 80 | ||||
-rw-r--r-- | src/fcstr.c | 2 | ||||
-rw-r--r-- | src/fcxml.c | 11 |
9 files changed, 180 insertions, 157 deletions
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-<version> 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)) |