aboutsummaryrefslogtreecommitdiff
path: root/fontconfig/src/fcpat.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2012-11-19 10:47:23 +0100
committermarha <marha@users.sourceforge.net>2012-11-19 10:47:23 +0100
commitb3e1e62c45f525cdd332073aaa34d8452cb23374 (patch)
tree221ee6420074033279921fadc971d30d63d6847b /fontconfig/src/fcpat.c
parentb142593315b909b9e202f0f4585b96bf2e74b9db (diff)
downloadvcxsrv-b3e1e62c45f525cdd332073aaa34d8452cb23374.tar.gz
vcxsrv-b3e1e62c45f525cdd332073aaa34d8452cb23374.tar.bz2
vcxsrv-b3e1e62c45f525cdd332073aaa34d8452cb23374.zip
git update 19 nov 2012
fontconfig: c20ac78b01df3f0919352bba16b5b48b3b5d4d6d libxcb: 76a2166de9c80b35f987fdc3f3a228bafa0de94e mesa: ddb901fbf4489ffcd85d3320f23913eb1d4fbdfe pixman: 44dd746bb68625b2f6be77c3f80292b45defe9d7 xserver: 6a6c3afe71ac82a93d9fd0034dd5bbdcf0eae1ea xkeyboard-config: 709e05c069428236ca2567e784c9971eecc8ca50
Diffstat (limited to 'fontconfig/src/fcpat.c')
-rw-r--r--fontconfig/src/fcpat.c146
1 files changed, 143 insertions, 3 deletions
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)
{
@@ -461,6 +550,59 @@ FcPatternEqualSubset (const FcPattern *pai, const FcPattern *pbi, const FcObject
}
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,
FcValue value,
@@ -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;