You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.8 KiB
61 lines
1.8 KiB
From eb4d60b1ce0e2dc917bd47b10a3ce89de840448a Mon Sep 17 00:00:00 2001
|
|
From: nicm <nicm>
|
|
Date: Wed, 27 Nov 2019 20:54:30 +0000
|
|
Subject: [PATCH] REG_STARTEND is not portable, but it turns out we don't
|
|
actually need it. From Evan Green, GitHub issue 1982.
|
|
|
|
---
|
|
regsub.c | 24 ++++++++++++------------
|
|
1 file changed, 12 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/regsub.c b/regsub.c
|
|
index 199b21714..22e236dc7 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;
|
|
}
|
|
|