/*
- * $XFree86: xc/lib/fontconfig/src/fccfg.c,v 1.20 2002/08/19 19:32:05 keithp Exp $
+ * $XFree86: xc/lib/fontconfig/src/fccfg.c,v 1.23 2002/08/31 22:17:32 keithp Exp $
*
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
*
subst = (FcSubst *) malloc (sizeof (FcSubst));
if (!subst)
return FcFalse;
+ FcMemAlloc (FC_MEM_SUBST, sizeof (FcSubst));
if (kind == FcMatchPattern)
prev = &config->substPattern;
else
}
FcBool
-FcConfigCompareValue (FcValue m,
- FcOp op,
- FcValue v)
+FcConfigCompareValue (const FcValue m_o,
+ FcOp op,
+ const FcValue v_o)
{
- FcBool ret = FcFalse;
+ FcValue m = m_o;
+ FcValue v = v_o;
+ FcBool ret = FcFalse;
m = FcConfigPromote (m, v);
v = FcConfigPromote (v, m);
case FcOpContains:
ret = m.u.d == v.u.d;
break;
- case FcOpNotEqual:
+ case FcOpNotEqual:
+ case FcOpNotContains:
ret = m.u.d != v.u.d;
break;
case FcOpLess:
case FcOpContains:
ret = m.u.b == v.u.b;
break;
- case FcOpNotEqual:
+ case FcOpNotEqual:
+ case FcOpNotContains:
ret = m.u.b != v.u.b;
break;
default:
case FcOpContains:
ret = FcStrCmpIgnoreCase (m.u.s, v.u.s) == 0;
break;
- case FcOpNotEqual:
+ case FcOpNotEqual:
+ case FcOpNotContains:
ret = FcStrCmpIgnoreCase (m.u.s, v.u.s) != 0;
break;
default:
ret = FcMatrixEqual (m.u.m, v.u.m);
break;
case FcOpNotEqual:
+ case FcOpNotContains:
ret = !FcMatrixEqual (m.u.m, v.u.m);
break;
default:
/* m contains v if v is a subset of m */
ret = FcCharSetIsSubset (v.u.c, m.u.c);
break;
+ case FcOpNotContains:
+ /* m contains v if v is a subset of m */
+ ret = !FcCharSetIsSubset (v.u.c, m.u.c);
+ break;
case FcOpEqual:
ret = FcCharSetEqual (m.u.c, v.u.c);
break;
case FcOpContains:
ret = FcLangSetCompare (v.u.l, m.u.l) != FcLangDifferentLang;
break;
+ case FcOpNotContains:
+ ret = FcLangSetCompare (v.u.l, m.u.l) == FcLangDifferentLang;
+ break;
case FcOpEqual:
ret = FcLangSetEqual (v.u.l, m.u.l);
break;
case FcTypeFTFace:
switch (op) {
case FcOpEqual:
+ case FcOpContains:
ret = m.u.f == v.u.f;
break;
case FcOpNotEqual:
+ case FcOpNotContains:
ret = m.u.f != v.u.f;
break;
default:
}
else
{
- if (op == FcOpNotEqual)
+ if (op == FcOpNotEqual || op == FcOpNotContains)
ret = FcTrue;
}
return ret;
v.type = FcTypeVoid;
FcValueDestroy (vl);
break;
- case FcOpContains:
+ case FcOpEqual:
case FcOpNotEqual:
case FcOpLess:
case FcOpLessEqual:
case FcOpMore:
case FcOpMoreEqual:
+ case FcOpContains:
+ case FcOpNotContains:
vl = FcConfigEvaluate (p, e->u.tree.left);
vr = FcConfigEvaluate (p, e->u.tree.right);
v.type = FcTypeBool;
break;
case FcOpOr:
case FcOpAnd:
- case FcOpEqual:
case FcOpPlus:
case FcOpMinus:
case FcOpTimes:
if ((t->kind == FcMatchFont || kind == FcMatchPattern) &&
!FcStrCmpIgnoreCase ((FcChar8 *) t->field,
(FcChar8 *) e->field))
+ {
+ if (!st[i].elt)
+ t = 0;
break;
+ }
}
switch (e->op) {
case FcOpAssign:
strcat ((char *) path, "/");
strcat ((char *) path, (char *) file);
+ FcMemAlloc (FC_MEM_STRING, strlen ((char *) path) + 1);
if (access ((char *) path, R_OK) == 0)
return path;
- free (path);
+ FcStrFree (path);
return 0;
}