Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/make make(1): reduce lifetime of regmatch_t for :C m...
details: https://anonhg.NetBSD.org/src/rev/83ae6672a60a
branches: trunk
changeset: 936287:83ae6672a60a
user: rillig <rillig%NetBSD.org@localhost>
date: Fri Jul 24 08:12:43 2020 +0000
description:
make(1): reduce lifetime of regmatch_t for :C modifier
diffstat:
usr.bin/make/var.c | 25 +++++++++++--------------
1 files changed, 11 insertions(+), 14 deletions(-)
diffs (87 lines):
diff -r 8373e5f11369 -r 83ae6672a60a usr.bin/make/var.c
--- a/usr.bin/make/var.c Fri Jul 24 08:06:28 2020 +0000
+++ b/usr.bin/make/var.c Fri Jul 24 08:12:43 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.304 2020/07/24 08:06:28 rillig Exp $ */
+/* $NetBSD: var.c,v 1.305 2020/07/24 08:12:43 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.304 2020/07/24 08:06:28 rillig Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.305 2020/07/24 08:12:43 rillig Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94";
#else
-__RCSID("$NetBSD: var.c,v 1.304 2020/07/24 08:06:28 rillig Exp $");
+__RCSID("$NetBSD: var.c,v 1.305 2020/07/24 08:12:43 rillig Exp $");
#endif
#endif /* not lint */
#endif
@@ -1378,7 +1378,6 @@
int nsub;
char *replace;
VarPatternFlags pflags;
- regmatch_t matches[10];
} ModifyWord_SubstRegexArgs;
/* Callback for ModifyWords to implement the :C/from/to/ modifier.
@@ -1391,19 +1390,20 @@
const char *wp = word;
char *rp;
int flags = 0;
+ regmatch_t m[10];
if ((args->pflags & (VARP_SUB_ONE | VARP_SUB_MATCHED)) ==
(VARP_SUB_ONE | VARP_SUB_MATCHED))
xrv = REG_NOMATCH;
else {
tryagain:
- xrv = regexec(&args->re, wp, args->nsub, args->matches, flags);
+ xrv = regexec(&args->re, wp, args->nsub, m, flags);
}
switch (xrv) {
case 0:
args->pflags |= VARP_SUB_MATCHED;
- SepBuf_AddBytes(buf, wp, args->matches[0].rm_so);
+ SepBuf_AddBytes(buf, wp, m[0].rm_so);
for (rp = args->replace; *rp; rp++) {
if (*rp == '\\' && (rp[1] == '&' || rp[1] == '\\')) {
@@ -1428,24 +1428,21 @@
if (n >= args->nsub) {
Error("No subexpression %s", errstr);
- } else if ((args->matches[n].rm_so == -1) &&
- (args->matches[n].rm_eo == -1)) {
+ } else if (m[n].rm_so == -1 && m[n].rm_eo == -1) {
Error("No match for subexpression %s", errstr);
} else {
- const char *subbuf = wp + args->matches[n].rm_so;
- int sublen = args->matches[n].rm_eo -
- args->matches[n].rm_so;
- SepBuf_AddBytes(buf, subbuf, sublen);
+ SepBuf_AddBytes(buf, wp + m[n].rm_so,
+ m[n].rm_eo - m[n].rm_so);
}
} else {
SepBuf_AddBytes(buf, rp, 1);
}
}
- wp += args->matches[0].rm_eo;
+ wp += m[0].rm_eo;
if (args->pflags & VARP_SUB_GLOBAL) {
flags |= REG_NOTBOL;
- if (args->matches[0].rm_so == 0 && args->matches[0].rm_eo == 0) {
+ if (m[0].rm_so == 0 && m[0].rm_eo == 0) {
SepBuf_AddBytes(buf, wp, 1);
wp++;
}
Home |
Main Index |
Thread Index |
Old Index