Module Name: src
Committed By: rillig
Date: Mon Dec 13 03:19:32 UTC 2021
Modified Files:
src/usr.bin/make: var.c
Log Message:
make: condense RegexReplace for the modifier ':C'
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.982 -r1.983 src/usr.bin/make/var.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.982 src/usr.bin/make/var.c:1.983
--- src/usr.bin/make/var.c:1.982 Mon Dec 13 03:03:42 2021
+++ src/usr.bin/make/var.c Mon Dec 13 03:19:32 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.982 2021/12/13 03:03:42 rillig Exp $ */
+/* $NetBSD: var.c,v 1.983 2021/12/13 03:19:32 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -140,7 +140,7 @@
#include "metachar.h"
/* "@(#)var.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.982 2021/12/13 03:03:42 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.983 2021/12/13 03:19:32 rillig Exp $");
/*
* Variables are defined using one of the VAR=value assignments. Their
@@ -1626,8 +1626,8 @@ RegexReplaceBackref(char ref, SepBuf *bu
}
/*
- * Replacement of regular expressions is not specified by POSIX, therefore
- * re-implement it here.
+ * The regular expression matches the word; now add the replacement to the
+ * buffer, taking back-references from 'wp'.
*/
static void
RegexReplace(const char *replace, SepBuf *buf, const char *wp,
@@ -1636,26 +1636,16 @@ RegexReplace(const char *replace, SepBuf
const char *rp;
for (rp = replace; *rp != '\0'; rp++) {
- if (*rp == '\\' && (rp[1] == '&' || rp[1] == '\\')) {
- SepBuf_AddBytes(buf, rp + 1, 1);
- rp++;
- continue;
- }
-
- if (*rp == '&') {
+ if (*rp == '\\' && (rp[1] == '&' || rp[1] == '\\'))
+ SepBuf_AddBytes(buf, ++rp, 1);
+ else if (*rp == '\\' && ch_isdigit(rp[1]))
+ RegexReplaceBackref(*++rp, buf, wp, m, nsub);
+ else if (*rp == '&') {
SepBuf_AddBytesBetween(buf,
wp + (size_t)m[0].rm_so,
wp + (size_t)m[0].rm_eo);
- continue;
- }
-
- if (*rp != '\\' || !ch_isdigit(rp[1])) {
+ } else
SepBuf_AddBytes(buf, rp, 1);
- continue;
- }
-
- rp++;
- RegexReplaceBackref(*rp, buf, wp, m, nsub);
}
}