From da7f7882a2797fa3b6fbc9886e8a2144625739bb Mon Sep 17 00:00:00 2001 From: rsc Date: Fri, 18 May 2007 16:43:43 +0000 Subject: Match leading ^ in regexp with embedded newlines (Roger Peppe) --- src/libregexp/regexec.c | 2 +- src/libregexp/rregexec.c | 19 +++++++++---------- 2 files changed, 10 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/libregexp/regexec.c b/src/libregexp/regexec.c index 62ab1a31..a00fbcbc 100644 --- a/src/libregexp/regexec.c +++ b/src/libregexp/regexec.c @@ -58,7 +58,7 @@ regexec1(Reprog *progp, /* program to run */ p = utfrune(s, '\n'); if(p == 0 || s == j->eol) return match; - s = p; + s = p+1; break; } } diff --git a/src/libregexp/rregexec.c b/src/libregexp/rregexec.c index eece0eb9..4312c4f9 100644 --- a/src/libregexp/rregexec.c +++ b/src/libregexp/rregexec.c @@ -25,6 +25,7 @@ rregexec1(Reprog *progp, /* program to run */ Relist* tle; /* ends of this and next list */ Relist* nle; int match; + Rune *p; match = 0; checkstart = j->startchar; @@ -44,20 +45,18 @@ rregexec1(Reprog *progp, /* program to run */ if(checkstart) { switch(j->starttype) { case RUNE: - while(*s != j->startchar) { - if(*s == 0 || s == j->reol) - return match; - s++; - } + p = runestrchr(s, j->startchar); + if(p == 0 || p == j->eol) + return match; + s = p; break; case BOL: if(s == bol) break; - while(*s != '\n') { - if(*s == 0 || s == j->reol) - return match; - s++; - } + p = runestrchr(s, '\n'); + if(p == 0 || s == j->reol) + return match; + s = p+1; break; } } -- cgit v1.2.3