+2005-07-25 Keith Packard <keithp@keithp.com>
+
+ * 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 <include>{directory}</include>
+ elements to avoid loading *.rpmsave or .dpkg-old files. (otaylor)
+
2005-07-15 Carl Worth <cworth@cworth.org>
* src/fcint.h:
</para></refsect2>
<refsect2><title><sgmltag>include ignore_missing="no"</></title><para>
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
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;
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);
/*
FcChar8 *
FcConfigHome (void)
{
- return getenv ("HOME");
+ return (FcChar8 *) getenv ("HOME");
}
static void
FcChar8 *file;
if (FcPatternGetString (fs->fonts[j], FC_FILE, 0, &file) != FcResultMatch)
- file = "<unknown filename>";
+ file = (FcChar8 *) "<unknown filename>";
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 = "<unknown family>";
+ family = (FcChar8 *) "<unknown family>";
if (FcPatternGetString (fs->fonts[j], FC_STYLE, 0, &style) != FcResultMatch)
- file = "<unknown style>";
+ file = (FcChar8 *) "<unknown style>";
printf ("%s: \"%s\" \"%s\"\n", file, family, style);
}
__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); \
#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;
}
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;
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];
{
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;
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))
}
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;
FcBool
FcGlobalCacheUpdate (FcGlobalCache *cache,
- const FcChar8 *name,
+ const char *name,
FcFontSet *set)
{
FcGlobalCacheDir * d;
cache->updated = FcTrue;
- d->name = FcStrCopy (name);
+ d->name = (char *)FcStrCopy ((FcChar8 *)name);
d->ent = FcDirCacheProduce (set, &d->metadata);
d->offset = 0;
return FcTrue;
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;
goto bail1;
while (strlen(FcCacheReadString (fd, subdirName, sizeof (subdirName))) > 0)
- FcStrSetAdd (dirs, subdirName);
+ FcStrSetAdd (dirs, (FcChar8 *)subdirName);
if (!FcDirCacheConsume (fd, set))
goto bail1;
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)
int fd, i;
FcCache metadata;
off_t current_arch_start = 0, truncate_to;
+
char * current_arch_machine_name, * header;
void * current_dir_block;
if (!metadata.count)
{
- unlink (cache_file);
+ unlink ((char *)cache_file);
free (cache_file);
return FcTrue;
}
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;
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));
bail0:
free (current_dir_block);
bail:
- unlink (cache_file);
+ unlink ((char *)cache_file);
free (cache_file);
return FcFalse;
}
home = getenv ("USERPROFILE");
#endif
- return home;
+ return (FcChar8 *) home;
}
return 0;
}
/*
* Check ~/.fonts.cache-<version> file
*/
- if (cache && FcGlobalCacheReadDir (set, dirs, cache, dir, config))
+ if (cache && FcGlobalCacheReadDir (set, dirs, cache, (char *)dir, config))
return FcTrue;
}
* 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]);
#endif
return 0;
done:
- if (FcStrCmpIgnoreBlanksAndCase (utf8, "") == 0)
+ if (FcStrCmpIgnoreBlanksAndCase (utf8, (FcChar8 *) "") == 0)
{
free (utf8);
return 0;
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;
}
/* 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++)
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]))
#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]))
#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]))
/* 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;
}
}
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;
}
{
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);
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)
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);
}
width = FC_WIDTH_NORMAL;
if (foundry == 0)
- foundry = "unknown";
+ foundry = (FcChar8 *) "unknown";
if (!FcPatternAddInteger (pat, FC_SLANT, slant))
goto bail1;
{
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
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)
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)
{
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;
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
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) {
struct _FcGlobalCacheDir {
struct _FcGlobalCacheDir *next;
- FcChar8 *name;
+ char *name;
FcCache metadata;
off_t offset;
void *ent;
FcGlobalCacheReadDir (FcFontSet *set,
FcStrSet *dirs,
FcGlobalCache *cache,
- const FcChar8 *dir,
+ const char *dir,
FcConfig *config);
void
FcBool
FcGlobalCacheUpdate (FcGlobalCache *cache,
- const FcChar8 *file,
+ const char *file,
FcFontSet *set);
FcBool
FcBool
FcPatternAppend (FcPattern *p, FcPattern *s);
-const char *
-FcStrStaticName (const char *name);
+const FcChar8 *
+FcStrStaticName (const FcChar8 *name);
FcChar32
FcStringHash (const FcChar8 *s);
low = 0;
mid = 0;
c = 1;
- object = FcStrStaticName (object);
+ object = (char *)FcStrStaticName ((FcChar8 *)object);
while (low <= high)
{
mid = (low + high) >> 1;
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;
}
#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
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);
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;
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];
}
static int
-FcStrNeededBytes (const char * s)
+FcStrNeededBytes (const FcChar8 * s)
{
FcChar32 hash = FcStringHash ((const FcChar8 *) s);
struct objectBucket **p;
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)
{
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;
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;
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;
}
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));
{
w->src = src;
w->read = 0;
- w->len = strlen (src);
+ w->len = strlen ((char *) src);
}
static FcChar8
return;
}
- name = FcConfigGetAttribute (parse, "name");
+ name = (char *) FcConfigGetAttribute (parse, "name");
if (!name)
{
FcConfigMessage (parse, FcSevereWarning, "missing pattern element name");
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))