Commit f45d39b1 authored by Keith Packard's avatar Keith Packard

FcFontList broken when presented a charset - was comparing inclusion in the

    wrong direction
parent 7d5c134a
......@@ -578,12 +578,12 @@ FcConfigCompareValue (const FcValue m_o,
case FcTypeCharSet:
switch (op) {
case FcOpContains:
/* m contains v if v is a subset of m */
ret = FcCharSetIsSubset (v.u.c, m.u.c);
/* v contains m if m is a subset of v */
ret = FcCharSetIsSubset (m.u.c, v.u.c);
break;
case FcOpNotContains:
/* m contains v if v is a subset of m */
ret = !FcCharSetIsSubset (v.u.c, m.u.c);
/* v contains m if m is a subset of v */
ret = !FcCharSetIsSubset (m.u.c, v.u.c);
break;
case FcOpEqual:
ret = FcCharSetEqual (m.u.c, v.u.c);
......
......@@ -596,6 +596,9 @@ FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b)
{
an = a->numbers[ai];
bn = b->numbers[bi];
/*
* Check matching pages
*/
if (an == bn)
{
FcChar32 *am = a->leaves[ai]->map;
......@@ -604,6 +607,9 @@ FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b)
if (am != bm)
{
int i = 256/32;
/*
* Does am have any bits not in bm?
*/
while (i--)
if (*am++ & ~*bm++)
return FcFalse;
......@@ -611,6 +617,9 @@ FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b)
ai++;
bi++;
}
/*
* Does a have any pages not in b?
*/
else if (an < bn)
return FcFalse;
else
......@@ -618,6 +627,9 @@ FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b)
int low = bi + 1;
int high = b->num - 1;
/*
* Search for page 'an' in 'b'
*/
while (low <= high)
{
int mid = (low + high) >> 1;
......@@ -637,6 +649,9 @@ FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b)
bi++;
}
}
/*
* did we look at every page?
*/
return ai >= a->num;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment