Fixes for POSIX regexes not grepping correctly.

[SVN r22623]
This commit is contained in:
John Maddock
2004-04-09 15:55:32 +00:00
parent dc90d07749
commit e3aacc5c55
2 changed files with 5 additions and 6 deletions

View File

@ -208,7 +208,7 @@ bool perl_matcher<BidiIterator, Allocator, traits, Allocator2>::find_imp()
search_base = position = m_result[0].second;
// If last match was null and match_not_null was not set then increment
// our start position, otherwise we go into an infinite loop:
if(((m_match_flags & match_not_null) == 0) && (m_presult->length() == 0))
if(((m_match_flags & match_not_null) == 0) && (m_result.length() == 0))
{
if(position == last)
return false;

View File

@ -55,23 +55,22 @@ inline unsigned int regex_grep(Predicate foo,
return count; // we've reached the end, don't try and find an extra null match.
if(m.length() == 0)
{
if(m[0].second == last)
return count;
// we found a NULL-match, now try to find
// a non-NULL one at the same position:
BidiIterator last_end(m[0].second);
if(last_end == last)
return count;
match_results<BidiIterator, match_allocator_type> m2(m);
matcher.setf(match_not_null | match_continuous);
if(matcher.find())
{
++count;
last_end = m[0].second;
if(0 == foo(m))
return count;
}
else
{
// reset match back to where it was:
m.set_second(last_end);
m = m2;
}
matcher.unsetf((match_not_null | match_continuous) & ~flags);
}