Copy the full pathname whenever duplicating an FcPattern; otherwise,
applications continue breaking.
This commit is contained in:
parent
d6946c1a11
commit
793154ed8d
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2005-10-31 Patrick Lam <plam@mit.edu>
|
||||
* src/fcint.h:
|
||||
* src/fclist.c (FcListAppend):
|
||||
* src/fcmatch.c (FcFontRenderPrepare):
|
||||
* src/fcpat.c (FcPatternTransferFullFname, FcPatternDuplicate,
|
||||
FcPatternFreeze, FcPatternBaseFreeze):
|
||||
|
||||
Copy the full pathname whenever duplicating an FcPattern; otherwise,
|
||||
applications continue breaking.
|
||||
|
||||
2005-10-31 Patrick Lam <plam@mit.edu>
|
||||
* fc-cat/fc-cat.c (FcCacheFileRead, main):
|
||||
* src/fcfreetype.c (FcFreeTypeQuery):
|
||||
|
|
|
@ -808,8 +808,8 @@ FcPatternAppend (FcPattern *p, FcPattern *s);
|
|||
void
|
||||
FcPatternAddFullFname (const FcPattern *p, const char *fname);
|
||||
|
||||
const char *
|
||||
FcPatternFindFullFname (const FcPattern *p);
|
||||
void
|
||||
FcPatternTransferFullFname (const FcPattern *new, const FcPattern *orig);
|
||||
|
||||
const FcChar8 *
|
||||
FcStrStaticName (const FcChar8 *name);
|
||||
|
|
|
@ -424,11 +424,7 @@ FcListAppend (FcListHashTable *table,
|
|||
|
||||
/* Also, copy over the full path info. */
|
||||
if (!strcmp (os->objects[o], FC_FILE))
|
||||
{
|
||||
FcChar8 * s;
|
||||
FcPatternGetString (font, FC_FILE, 0, &s);
|
||||
FcPatternAddFullFname (bucket->pattern, FcPatternFindFullFname(font));
|
||||
}
|
||||
FcPatternTransferFullFname (bucket->pattern, font);
|
||||
|
||||
e = FcPatternFindElt (font, os->objects[o]);
|
||||
if (e)
|
||||
|
|
|
@ -489,6 +489,10 @@ FcFontRenderPrepare (FcConfig *config,
|
|||
FcPatternAdd (new, FcObjectPtrU(pe->object),
|
||||
FcValueCanonicalize(&FcValueListPtrU(pe->values)->value), FcTrue);
|
||||
}
|
||||
|
||||
if (FcPatternFindElt (font, FC_FILE))
|
||||
FcPatternTransferFullFname (new, font);
|
||||
|
||||
FcConfigSubstituteWithPat (config, new, pat, FcMatchFont);
|
||||
return new;
|
||||
}
|
||||
|
|
25
src/fcpat.c
25
src/fcpat.c
|
@ -34,6 +34,8 @@ static int fcpatternelt_ptr, fcpatternelt_count;
|
|||
static FcValueList ** fcvaluelists = 0;
|
||||
static int fcvaluelist_bank_count = 0, fcvaluelist_ptr, fcvaluelist_count;
|
||||
|
||||
static const char *
|
||||
FcPatternFindFullFname (const FcPattern *p);
|
||||
static FcPatternEltPtr
|
||||
FcPatternEltPtrCreateDynamic (FcPatternElt * e);
|
||||
|
||||
|
@ -580,6 +582,9 @@ FcPatternBaseFreeze (FcPattern *b)
|
|||
(FcPatternEltU(b->elts)+i)->object;
|
||||
}
|
||||
|
||||
if (FcPatternFindElt (b, FC_FILE))
|
||||
FcPatternTransferFullFname (ep, b);
|
||||
|
||||
ent->hash = hash;
|
||||
ent->next = *bucket;
|
||||
*bucket = ent;
|
||||
|
@ -647,6 +652,10 @@ FcPatternFreeze (FcPattern *p)
|
|||
if (!FcValueListPtrU((FcPatternEltU(p->elts)+i)->values))
|
||||
goto bail;
|
||||
}
|
||||
|
||||
if (FcPatternFindElt (p, FC_FILE))
|
||||
FcPatternTransferFullFname (b, p);
|
||||
|
||||
/*
|
||||
* Freeze base
|
||||
*/
|
||||
|
@ -1257,6 +1266,13 @@ FcPatternDuplicate (const FcPattern *orig)
|
|||
FcValueCanonicalize(&FcValueListPtrU(l)->value),
|
||||
FcTrue))
|
||||
goto bail1;
|
||||
|
||||
if (!strcmp ((char *)FcObjectPtrU((e + i)->object), FC_FILE))
|
||||
{
|
||||
FcChar8 * s;
|
||||
FcPatternGetString (orig, FC_FILE, 0, &s);
|
||||
FcPatternAddFullFname (new, FcPatternFindFullFname(orig));
|
||||
}
|
||||
}
|
||||
|
||||
return new;
|
||||
|
@ -1957,7 +1973,7 @@ FcPatternAddFullFname (const FcPattern *p, const char *fname)
|
|||
pb->next->m.fname = fname;
|
||||
}
|
||||
|
||||
const char *
|
||||
static const char *
|
||||
FcPatternFindFullFname (const FcPattern *p)
|
||||
{
|
||||
struct patternDirBucket *pb;
|
||||
|
@ -1971,3 +1987,10 @@ FcPatternFindFullFname (const FcPattern *p)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
FcPatternTransferFullFname (const FcPattern *new, const FcPattern *orig)
|
||||
{
|
||||
FcChar8 * s;
|
||||
FcPatternGetString (orig, FC_FILE, 0, &s);
|
||||
FcPatternAddFullFname (new, FcPatternFindFullFname(orig));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue