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); } }