diff options
author | Martin Hosken <martin_hosken@sil.org> | 2011-05-16 20:07:36 +0200 |
---|---|---|
committer | Petr Mladek <pmladek@suse.cz> | 2011-05-16 20:07:36 +0200 |
commit | 0bd8a0b4122d38d42e0dea2c3f239cde98b2584b (patch) | |
tree | 76740ded11acb05d630cf30cf4f9d500e33a0592 /graphite | |
parent | 31e0d0c56fffa4873c029979f15c6cee1bdf81ed (diff) |
Fix graphite2-0.9.2 particulary for LinLibertineG (fdo#36510, fdo#36752)
Signed-off-by: Petr Mladek <pmladek@suse.cz>
Diffstat (limited to 'graphite')
-rw-r--r-- | graphite/graphite2-0.9.2.patch | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/graphite/graphite2-0.9.2.patch b/graphite/graphite2-0.9.2.patch index 35f0bd23650b..a775c1fe6c8e 100644 --- a/graphite/graphite2-0.9.2.patch +++ b/graphite/graphite2-0.9.2.patch @@ -402,3 +402,52 @@ diff current src/List.h #ifdef GR2_EXPORTING #ifdef __GNUC__ #define GR2_API __attribute__((dllexport)) +diff -r b3a86877ec68 src/Pass.cpp +--- misc/build/graphite2-0.9.2/src/Pass.cpp Wed May 11 09:34:52 2011 +0700 ++++ misc/build/graphite2-0.9.2/src/Pass.cpp Mon May 16 13:54:00 2011 +0700 +@@ -513,6 +513,7 @@ + bool Pass::testConstraint(const Rule &r, Machine & m) const + { + if (r.sort - r.preContext > (int)m.slotMap().size() - m.slotMap().context()) return false; ++ if (m.slotMap().context() - r.preContext < 0) return false; + if (!*r.constraint) return true; + assert(r.constraint->constraint()); + +@@ -527,6 +528,7 @@ + Machine::status_t status = Machine::finished; + for (int n = r.sort; n && map; --n, ++map) + { ++ if (!*map) continue; + const int32 ret = r.constraint->run(m, map, status); + if (!ret || status != Machine::finished) + { +diff -r b3a86877ec68 src/Rule.h +--- misc/build/graphite2-0.9.2/src/Rule.h Wed May 11 09:34:52 2011 +0700 ++++ misc/build/graphite2-0.9.2/src/Rule.h Mon May 16 13:54:00 2011 +0700 +@@ -187,8 +187,9 @@ + // Merge the new sorted rules list into the current sorted result set. + const RuleEntry * lre = begin(), * rre = state.rules; + RuleEntry * out = m_rules + (m_begin == m_rules)*MAX_RULES; ++ const RuleEntry * lrend = out + MAX_RULES; + m_begin = out; +- while (lre != end()) ++ while (lre != end() && out != lrend) + { + if (*lre < *rre) *out++ = *lre++; + else if (*rre < *lre) { *out++ = *rre++; } +@@ -196,12 +197,12 @@ + + if (rre == state.rules_end) + { +- while (lre != end()) { *out++ = *lre++; } ++ while (lre != end() && out != lrend) { *out++ = *lre++; } + m_end = out; + return; + } + } +- while (rre != state.rules_end) { *out++ = *rre++; } ++ while (rre != state.rules_end && out != lrend) { *out++ = *rre++; } + m_end = out; + } + + |