summaryrefslogtreecommitdiffstats
path: root/regsub.c
diff options
context:
space:
mode:
authornicm <nicm>2019-11-27 20:54:30 +0000
committernicm <nicm>2019-11-27 20:54:30 +0000
commiteb4d60b1ce0e2dc917bd47b10a3ce89de840448a (patch)
tree1a370b96fd286dc4141318b7904c48678deae044 /regsub.c
parentfef8ee23c05eb8023931a35584acdfa0c756208c (diff)
REG_STARTEND is not portable, but it turns out we don't actually need
it. From Evan Green, GitHub issue 1982.
Diffstat (limited to 'regsub.c')
-rw-r--r--regsub.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/regsub.c b/regsub.c
index 199b2171..22e236dc 100644
--- a/regsub.c
+++ b/regsub.c
@@ -77,10 +77,7 @@ regsub(const char *pattern, const char *with, const char *text, int flags)
end = strlen(text);
while (start <= end) {
- m[0].rm_so = start;
- m[0].rm_eo = end;
-
- if (regexec(&r, text, nitems(m), m, REG_STARTEND) != 0) {
+ if (regexec(&r, text + start, nitems(m), m, 0) != 0) {
regsub_copy(&buf, &len, text, start, end);
break;
}
@@ -89,22 +86,25 @@ regsub(const char *pattern, const char *with, const char *text, int flags)
* Append any text not part of this match (from the end of the
* last match).
*/
- regsub_copy(&buf, &len, text, last, m[0].rm_so);
+ regsub_copy(&buf, &len, text, last, m[0].rm_so + start);
/*
* If the last match was empty and this one isn't (it is either
* later or has matched text), expand this match. If it is
* empty, move on one character and try again from there.
*/
- if (empty || m[0].rm_so != last || m[0].rm_so != m[0].rm_eo) {
- regsub_expand(&buf, &len, with, text, m, nitems(m));
-
- last = m[0].rm_eo;
- start = m[0].rm_eo;
+ if (empty ||
+ start + m[0].rm_so != last ||
+ m[0].rm_so != m[0].rm_eo) {
+ regsub_expand(&buf, &len, with, text + start, m,
+ nitems(m));
+
+ last = start + m[0].rm_eo;
+ start += m[0].rm_eo;
empty = 0;
} else {
- last = m[0].rm_eo;
- start = m[0].rm_eo + 1;
+ last = start + m[0].rm_eo;
+ start += m[0].rm_eo + 1;
empty = 1;
}