--- /dev/null
+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;
+ }
+