summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/fccache.c35
-rw-r--r--src/fccfg.c2
-rw-r--r--src/fcdir.c4
-rw-r--r--src/fcfreetype.c191
-rw-r--r--src/fcint.h10
-rw-r--r--src/fclist.c2
-rw-r--r--src/fcpat.c80
-rw-r--r--src/fcstr.c2
-rw-r--r--src/fcxml.c11
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))