diff options
author | marha <marha@users.sourceforge.net> | 2013-08-26 10:26:21 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2013-08-26 10:26:21 +0200 |
commit | be8a3ecf0bebc7134452778070cd83b7decf7f71 (patch) | |
tree | e3a5d81a99754c393062ed811bece6e0787e3767 /fontconfig/src | |
parent | 7403278d95051a554e2cbec3fafdde8ce9c6d200 (diff) | |
parent | 5ee5b91b019005aa27273dff01388a68c12be293 (diff) | |
download | vcxsrv-be8a3ecf0bebc7134452778070cd83b7decf7f71.tar.gz vcxsrv-be8a3ecf0bebc7134452778070cd83b7decf7f71.tar.bz2 vcxsrv-be8a3ecf0bebc7134452778070cd83b7decf7f71.zip |
Merge remote-tracking branch 'origin/released'
* origin/released:
xserver mesa fontconfig libX11 libxcb libxcb/xcb-proto xkeyboard-config git update 26 Aug 2013
Diffstat (limited to 'fontconfig/src')
-rw-r--r-- | fontconfig/src/fcarch.c | 2 | ||||
-rw-r--r-- | fontconfig/src/fcarch.h | 2 | ||||
-rw-r--r-- | fontconfig/src/fccfg.c | 52 | ||||
-rw-r--r-- | fontconfig/src/fcint.h | 5 | ||||
-rw-r--r-- | fontconfig/src/fcxml.c | 7 |
5 files changed, 36 insertions, 32 deletions
diff --git a/fontconfig/src/fcarch.c b/fontconfig/src/fcarch.c index 35734c021..21516ff05 100644 --- a/fontconfig/src/fcarch.c +++ b/fontconfig/src/fcarch.c @@ -49,7 +49,7 @@ FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcStrSet *)); FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcCharLeaf **)); FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcChar16 *)); -FC_ASSERT_STATIC (0x08 + 1*FC_MAX(4,ALIGNOF_DOUBLE) == sizeof (FcValue)); +FC_ASSERT_STATIC (0x08 + 1*FC_MAX(SIZEOF_VOID_P,ALIGNOF_DOUBLE) == sizeof (FcValue)); FC_ASSERT_STATIC (0x00 + 2*SIZEOF_VOID_P == sizeof (FcPatternElt)); FC_ASSERT_STATIC (0x08 + 2*SIZEOF_VOID_P == sizeof (FcPattern)); FC_ASSERT_STATIC (0x08 + 2*SIZEOF_VOID_P == sizeof (FcCharSet)); diff --git a/fontconfig/src/fcarch.h b/fontconfig/src/fcarch.h index cf7fd3c9f..049a5b02b 100644 --- a/fontconfig/src/fcarch.h +++ b/fontconfig/src/fcarch.h @@ -33,7 +33,7 @@ * and on 32bit ones, whether double is aligned to one word or two words. * Those result in the 6 formats listed below. * - * If any of the assertion errors in fccache.c fail, you need to add a new + * If any of the assertion errors in fcarch.c fail, you need to add a new * architecture. Contact the fontconfig mailing list in that case. * * name endianness pointer-size double-alignment diff --git a/fontconfig/src/fccfg.c b/fontconfig/src/fccfg.c index be738d53d..b88095bc6 100644 --- a/fontconfig/src/fccfg.c +++ b/fontconfig/src/fccfg.c @@ -649,8 +649,10 @@ FcConfigAddRule (FcConfig *config, { FcSubst *subst, **prev; FcRule *r; - int num; + int n = 0; + if (!rule) + return FcFalse; switch (kind) { case FcMatchPattern: prev = &config->substPattern; @@ -671,7 +673,6 @@ FcConfigAddRule (FcConfig *config, *prev = subst; subst->next = NULL; subst->rule = rule; - num = 0; for (r = rule; r; r = r->next) { switch (r->type) @@ -680,19 +681,21 @@ FcConfigAddRule (FcConfig *config, if (r->u.test && r->u.test->kind == FcMatchDefault) r->u.test->kind = kind; - if (r->u.test->object > FC_MAX_BASE_OBJECT) - num++; + + if (n < r->u.test->object) + n = r->u.test->object; break; case FcRuleEdit: - if (r->u.edit->object > FC_MAX_BASE_OBJECT) - num++; + if (n < r->u.edit->object) + n = r->u.edit->object; break; default: break; } } - if (config->maxObjects < num) - config->maxObjects = num; + n = FC_OBJ_ID (n) - FC_MAX_BASE_OBJECT; + if (config->maxObjects < n) + config->maxObjects = n; if (FcDebug () & FC_DBG_EDIT) { printf ("Add Subst "); @@ -701,11 +704,6 @@ FcConfigAddRule (FcConfig *config, return FcTrue; } -typedef struct _FcSubState { - FcPatternElt *elt; - FcValueList *value; -} FcSubState; - static FcValue FcConfigPromote (FcValue v, FcValue u, FcValuePromotionBuffer *buf) { @@ -1495,16 +1493,14 @@ FcConfigSubstituteWithPat (FcConfig *config, FcValue v; FcSubst *s; FcRule *r; - FcValueList *l, **value = NULL; + FcValueList *l, **value = NULL, *vl; FcPattern *m; FcStrSet *strs; FcObject object = FC_INVALID_OBJECT; - FcPatternElt **elt = NULL; + FcPatternElt **elt = NULL, *e; int i, nobjs; FcBool retval = FcTrue; -#define FC_OBJ_ID(_n_) ((_n_) > FC_MAX_BASE_OBJECT ? ((_n_) - FC_EXT_OBJ_INDEX) : (_n_)) - if (!config) { config = FcConfigGetCurrent (); @@ -1597,12 +1593,17 @@ FcConfigSubstituteWithPat (FcConfig *config, else m = p; if (m) - elt[object] = FcPatternObjectFindElt (m, r->u.test->object); + e = FcPatternObjectFindElt (m, r->u.test->object); + else + e = NULL; + /* different 'kind' won't be the target of edit */ + if (!elt[object] && kind == r->u.test->kind) + elt[object] = e; /* * If there's no such field in the font, * then FcQualAll matches while FcQualAny does not */ - if (!elt[object]) + if (!e) { if (r->u.test->qual == FcQualAll) { @@ -1620,10 +1621,13 @@ FcConfigSubstituteWithPat (FcConfig *config, * Check to see if there is a match, mark the location * to apply match-relative edits */ - value[object] = FcConfigMatchValueList (m, p_pat, kind, r->u.test, elt[object]->values); - if (!value[object] || - (r->u.test->qual == FcQualFirst && value[object] != elt[object]->values) || - (r->u.test->qual == FcQualNotFirst && value[object] == elt[object]->values)) + vl = FcConfigMatchValueList (m, p_pat, kind, r->u.test, e->values); + /* different 'kind' won't be the target of edit */ + if (!value[object] && kind == r->u.test->kind) + value[object] = vl; + if (!vl || + (r->u.test->qual == FcQualFirst && vl != e->values) || + (r->u.test->qual == FcQualNotFirst && vl == e->values)) { if (FcDebug () & FC_DBG_EDIT) printf ("No match\n"); @@ -1745,8 +1749,6 @@ bail1: if (value) free (value); -#undef FC_OBJ_ID - return retval; } diff --git a/fontconfig/src/fcint.h b/fontconfig/src/fcint.h index ec0c67470..362ea6f99 100644 --- a/fontconfig/src/fcint.h +++ b/fontconfig/src/fcint.h @@ -174,10 +174,11 @@ typedef struct _FcValueList { typedef int FcObject; -/* The 1000 is to leave some room for future added internal objects, such +/* The 1024 is to leave some room for future added internal objects, such * that caches from newer fontconfig can still be used with older fontconfig * without getting confused. */ -#define FC_EXT_OBJ_INDEX 1000 +#define FC_EXT_OBJ_INDEX 1024 +#define FC_OBJ_ID(_n_) ((_n_) & (~FC_EXT_OBJ_INDEX)) typedef struct _FcPatternElt *FcPatternEltPtr; diff --git a/fontconfig/src/fcxml.c b/fontconfig/src/fcxml.c index eb8d26ac0..9cb1fb2ba 100644 --- a/fontconfig/src/fcxml.c +++ b/fontconfig/src/fcxml.c @@ -2510,7 +2510,6 @@ FcParseMatch (FcConfigParse *parse) { const FcChar8 *kind_name; FcMatchKind kind; - FcEdit *edit = 0; FcVStack *vstack; FcRule *rule = NULL, *r; @@ -2546,8 +2545,10 @@ FcParseMatch (FcConfigParse *parse) { FcConfigMessage (parse, FcSevereError, "<match target=\"scan\"> cannot edit user-defined object \"%s\"", - FcObjectName(edit->object)); - break; + FcObjectName(vstack->u.edit->object)); + if (rule) + FcRuleDestroy (rule); + return; } r = FcRuleCreate (FcRuleEdit, vstack->u.edit); if (rule) |