low = 0;
mid = 0;
c = 1;
+ object = FcStrStaticName (object);
while (low <= high)
{
mid = (low + high) >> 1;
- c = strcmp (os->objects[mid], object);
+ c = os->objects[mid] - object;
if (c == 0)
return FcTrue;
if (c < 0)
mid++;
memmove (os->objects + mid + 1, os->objects + mid,
(os->nobject - mid) * sizeof (const char *));
- os->objects[mid] = FcObjectStaticName (object);
+ os->objects[mid] = object;
os->nobject++;
return FcTrue;
}
* Font must have a containing value for every value in the pattern
*/
static FcBool
-FcListValueListMatchAny (FcValueList *patOrig, /* pattern */
- FcValueList *fntOrig) /* font */
+FcListValueListMatchAny (FcValueListPtr patOrig, /* pattern */
+ FcValueListPtr fntOrig) /* font */
{
- FcValueList *pat, *fnt;
+ FcValueListPtr pat, fnt;
- for (pat = patOrig; pat; pat = pat->next)
+ for (pat = patOrig; FcValueListPtrU(pat);
+ pat = FcValueListPtrU(pat)->next)
{
- for (fnt = fntOrig; fnt; fnt = fnt->next)
+ for (fnt = fntOrig; FcValueListPtrU(fnt);
+ fnt = FcValueListPtrU(fnt)->next)
{
/*
* make sure the font 'contains' the pattern.
* (OpListing is OpContains except for strings
* where it requires an exact match)
*/
- if (FcConfigCompareValue (fnt->value,
+ if (FcConfigCompareValue (&FcValueListPtrU(fnt)->value,
FcOpListing,
- pat->value))
+ &FcValueListPtrU(pat)->value))
break;
}
- if (!fnt)
+ if (!FcValueListPtrU(fnt))
return FcFalse;
}
return FcTrue;
}
static FcBool
-FcListValueListEqual (FcValueList *v1orig,
- FcValueList *v2orig)
+FcListValueListEqual (FcValueListPtr v1orig,
+ FcValueListPtr v2orig)
{
- FcValueList *v1, *v2;
+ FcValueListPtr v1, v2;
- for (v1 = v1orig; v1; v1 = v1->next)
+ for (v1 = v1orig; FcValueListPtrU(v1);
+ v1 = FcValueListPtrU(v1)->next)
{
- for (v2 = v2orig; v2; v2 = v2->next)
- if (FcValueEqual (v1->value, v2->value))
+ for (v2 = v2orig; FcValueListPtrU(v2);
+ v2 = FcValueListPtrU(v2)->next)
+ if (FcValueEqual (FcValueCanonicalize(&FcValueListPtrU(v1)->value),
+ FcValueCanonicalize(&FcValueListPtrU(v2)->value)))
break;
- if (!v2)
+ if (!FcValueListPtrU(v2))
return FcFalse;
}
- for (v2 = v2orig; v2; v2 = v2->next)
+ for (v2 = v2orig; FcValueListPtrU(v2);
+ v2 = FcValueListPtrU(v2)->next)
{
- for (v1 = v1orig; v1; v1 = v1->next)
- if (FcValueEqual (v1->value, v2->value))
+ for (v1 = v1orig; FcValueListPtrU(v1);
+ v1 = FcValueListPtrU(v1)->next)
+ if (FcValueEqual (FcValueCanonicalize(&FcValueListPtrU(v1)->value),
+ FcValueCanonicalize(&FcValueListPtrU(v2)->value)))
break;
- if (!v1)
+ if (!FcValueListPtrU(v1))
return FcFalse;
}
return FcTrue;
for (i = 0; i < p->num; i++)
{
- e = FcPatternFindElt (font, p->elts[i].object);
+ e = FcPatternFindElt (font,
+ FcObjectPtrU((FcPatternEltU(p->elts)+i)->object));
if (!e)
return FcFalse;
- if (!FcListValueListMatchAny (p->elts[i].values, /* pat elts */
+ if (!FcListValueListMatchAny ((FcPatternEltU(p->elts)+i)->values, /* pat elts */
e->values)) /* font elts */
return FcFalse;
}
}
static FcChar32
-FcListValueHash (FcValue v)
+FcListValueHash (FcValue *value)
{
+ FcValue v = FcValueCanonicalize(value);
switch (v.type) {
case FcTypeVoid:
return 0;
}
static FcChar32
-FcListValueListHash (FcValueList *list)
+FcListValueListHash (FcValueListPtr list)
{
FcChar32 h = 0;
- while (list)
+ while (FcValueListPtrU(list))
{
- h = h ^ FcListValueHash (list->value);
- list = list->next;
+ h = h ^ FcListValueHash (&FcValueListPtrU(list)->value);
+ list = FcValueListPtrU(list)->next;
}
return h;
}
{
int o;
FcPatternElt *e;
- FcValueList *v;
+ FcValueListPtr v;
FcChar32 hash;
FcListBucket **prev, *bucket;
e = FcPatternFindElt (font, os->objects[o]);
if (e)
{
- for (v = e->values; v; v = v->next)
+ for (v = e->values; FcValueListPtrU(v);
+ v = FcValueListPtrU(v)->next)
{
if (!FcPatternAdd (bucket->pattern,
os->objects[o],
- v->value, FcTrue))
+ FcValueCanonicalize(&FcValueListPtrU(v)->value), FcTrue))
goto bail2;
}
}