From b3e1e62c45f525cdd332073aaa34d8452cb23374 Mon Sep 17 00:00:00 2001 From: marha Date: Mon, 19 Nov 2012 10:47:23 +0100 Subject: git update 19 nov 2012 fontconfig: c20ac78b01df3f0919352bba16b5b48b3b5d4d6d libxcb: 76a2166de9c80b35f987fdc3f3a228bafa0de94e mesa: ddb901fbf4489ffcd85d3320f23913eb1d4fbdfe pixman: 44dd746bb68625b2f6be77c3f80292b45defe9d7 xserver: 6a6c3afe71ac82a93d9fd0034dd5bbdcf0eae1ea xkeyboard-config: 709e05c069428236ca2567e784c9971eecc8ca50 --- fontconfig/src/fcpat.c | 146 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 143 insertions(+), 3 deletions(-) (limited to 'fontconfig/src/fcpat.c') diff --git a/fontconfig/src/fcpat.c b/fontconfig/src/fcpat.c index ebd6e57e2..62e47ca7e 100644 --- a/fontconfig/src/fcpat.c +++ b/fontconfig/src/fcpat.c @@ -120,6 +120,20 @@ FcValueSave (FcValue v) return v; } +FcValueListPtr +FcValueListCreate (void) +{ + FcValueListPtr ret; + + ret = calloc (1, sizeof (FcValueList)); + if (ret) + { + FcMemAlloc(FC_MEM_VALLIST, sizeof (FcValueList)); + } + + return ret; +} + void FcValueListDestroy (FcValueListPtr l) { @@ -151,6 +165,81 @@ FcValueListDestroy (FcValueListPtr l) } } +FcValueListPtr +FcValueListPrepend (FcValueListPtr vallist, + FcValue value, + FcValueBinding binding) +{ + FcValueListPtr new; + + if (value.type == FcTypeVoid) + return vallist; + new = FcValueListCreate (); + if (!new) + return vallist; + + new->value = FcValueSave (value); + new->binding = binding; + new->next = vallist; + + return new; +} + +FcValueListPtr +FcValueListAppend (FcValueListPtr vallist, + FcValue value, + FcValueBinding binding) +{ + FcValueListPtr new, last; + + if (value.type == FcTypeVoid) + return vallist; + new = FcValueListCreate (); + if (!new) + return vallist; + + new->value = FcValueSave (value); + new->binding = binding; + new->next = NULL; + + if (vallist) + { + for (last = vallist; FcValueListNext (last); last = FcValueListNext (last)); + + last->next = new; + } + else + vallist = new; + + return vallist; +} + +FcValueListPtr +FcValueListDuplicate(FcValueListPtr orig) +{ + FcValueListPtr new = NULL, l, t = NULL; + FcValue v; + + for (l = orig; l != NULL; l = FcValueListNext (l)) + { + if (!new) + { + t = new = FcValueListCreate(); + } + else + { + t->next = FcValueListCreate(); + t = FcValueListNext (t); + } + v = FcValueCanonicalize (&l->value); + t->value = FcValueSave (v); + t->binding = l->binding; + t->next = NULL; + } + + return new; +} + FcBool FcValueEqual (FcValue va, FcValue vb) { @@ -460,6 +549,59 @@ FcPatternEqualSubset (const FcPattern *pai, const FcPattern *pbi, const FcObject return FcTrue; } +FcBool +FcPatternObjectListAdd (FcPattern *p, + FcObject object, + FcValueListPtr list, + FcBool append) +{ + FcPatternElt *e; + FcValueListPtr l, *prev; + + if (p->ref == FC_REF_CONSTANT) + goto bail0; + + /* + * Make sure the stored type is valid for built-in objects + */ + for (l = list; l != NULL; l = FcValueListNext (l)) + { + if (!FcObjectValidType (object, l->value.type)) + { + if (FcDebug() & FC_DBG_OBJTYPES) + { + printf ("FcPattern object %s does not accept value ", + FcObjectName (object)); + FcValuePrint (l->value); + } + goto bail0; + } + } + + e = FcPatternObjectInsertElt (p, object); + if (!e) + goto bail0; + + if (append) + { + for (prev = &e->values; *prev; prev = &(*prev)->next) + ; + *prev = list; + } + else + { + for (prev = &list; *prev; prev = &(*prev)->next) + ; + *prev = e->values; + e->values = list; + } + + return FcTrue; + +bail0: + return FcFalse; +} + FcBool FcPatternObjectAddWithBinding (FcPattern *p, FcObject object, @@ -473,12 +615,10 @@ FcPatternObjectAddWithBinding (FcPattern *p, if (p->ref == FC_REF_CONSTANT) goto bail0; - new = malloc (sizeof (FcValueList)); + new = FcValueListCreate (); if (!new) goto bail0; - memset(new, 0, sizeof (FcValueList)); - FcMemAlloc (FC_MEM_VALLIST, sizeof (FcValueList)); value = FcValueSave (value); if (value.type == FcTypeVoid) goto bail1; -- cgit v1.2.3