X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=src%2Ffcpat.c;h=052874ffbbf5f4077fb6508250ea064af736282e;hb=2b77216ee21de95ec352672aa025195a83925b32;hp=74327456cc27918c0e9af8d49794866fb0dfb851;hpb=7ce196733129b0e664c1bdc20f973f15167292f7;p=fontconfig.git diff --git a/src/fcpat.c b/src/fcpat.c index 7432745..052874f 100644 --- a/src/fcpat.c +++ b/src/fcpat.c @@ -282,7 +282,13 @@ FcPatternDestroy (FcPattern *p) int i; FcPatternElt *elts; - if (p->ref == FC_REF_CONSTANT || --p->ref > 0) + if (p->ref == FC_REF_CONSTANT) + { + FcCacheObjectDereference (p); + return; + } + + if (--p->ref > 0) return; elts = FcPatternElts (p); @@ -491,7 +497,15 @@ FcPatternObjectAddWithBinding (FcPattern *p, * Make sure the stored type is valid for built-in objects */ if (!FcObjectValidType (object, value.type)) + { + if (FcDebug() & FC_DBG_OBJTYPES) + { + printf ("FcPattern object %s does not accept value ", + FcObjectName (object)); + FcValuePrint (value); + } goto bail1; + } new->value = value; new->binding = binding; @@ -930,6 +944,8 @@ FcPatternReference (FcPattern *p) { if (p->ref != FC_REF_CONSTANT) p->ref++; + else + FcCacheObjectReference (p); } FcPattern * @@ -1044,7 +1060,7 @@ void FcPatternFini (void) { FcStrStaticNameFini (); - FcObjectStaticNameFini (); + FcObjectFini (); } FcBool @@ -1096,6 +1112,13 @@ FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat) values_serialized, FcValueList); } + if (FcDebug() & FC_DBG_CACHEV) { + printf ("Raw pattern:\n"); + FcPatternPrint (pat); + printf ("Serialized pattern:\n"); + FcPatternPrint (pat_serialized); + printf ("\n"); + } return pat_serialized; } @@ -1151,8 +1174,14 @@ FcValueListSerialize (FcSerialize *serialize, const FcValueList *vl) head_serialized = vl_serialized; vl_serialized->next = NULL; - vl_serialized->value = vl->value; + vl_serialized->value.type = vl->value.type; switch (vl->value.type) { + case FcTypeInteger: + vl_serialized->value.u.i = vl->value.u.i; + break; + case FcTypeDouble: + vl_serialized->value.u.d = vl->value.u.d; + break; case FcTypeString: s_serialized = FcStrSerialize (serialize, vl->value.u.s); if (!s_serialized) @@ -1161,6 +1190,12 @@ FcValueListSerialize (FcSerialize *serialize, const FcValueList *vl) s_serialized, FcChar8); break; + case FcTypeBool: + vl_serialized->value.u.b = vl->value.u.b; + break; + case FcTypeMatrix: + /* can't happen */ + break; case FcTypeCharSet: c_serialized = FcCharSetSerialize (serialize, vl->value.u.c); if (!c_serialized) @@ -1169,6 +1204,9 @@ FcValueListSerialize (FcSerialize *serialize, const FcValueList *vl) c_serialized, FcCharSet); break; + case FcTypeFTFace: + /* can't happen */ + break; case FcTypeLangSet: l_serialized = FcLangSetSerialize (serialize, vl->value.u.l); if (!l_serialized) @@ -1180,7 +1218,11 @@ FcValueListSerialize (FcSerialize *serialize, const FcValueList *vl) default: break; } + prev_serialized = vl_serialized; vl = vl->next; } return head_serialized; } +#define __fcpat__ +#include "fcaliastail.h" +#undef __fcpat__