Module Name: src Committed By: rillig Date: Mon Jul 27 22:59:49 UTC 2020
Modified Files: src/usr.bin/make: var.c Log Message: make(1): in ModifyWord_Match, use different variables Using the same registers or memory locations for different variables is the job of the register allocator, not the programmer. For humans, that practice is rather confusing. To generate a diff of this commit: cvs rdiff -u -r1.345 -r1.346 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.345 src/usr.bin/make/var.c:1.346 --- src/usr.bin/make/var.c:1.345 Mon Jul 27 22:50:01 2020 +++ src/usr.bin/make/var.c Mon Jul 27 22:59:49 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: var.c,v 1.345 2020/07/27 22:50:01 rillig Exp $ */ +/* $NetBSD: var.c,v 1.346 2020/07/27 22:59:49 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: var.c,v 1.345 2020/07/27 22:50:01 rillig Exp $"; +static char rcsid[] = "$NetBSD: var.c,v 1.346 2020/07/27 22:59:49 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.345 2020/07/27 22:50:01 rillig Exp $"); +__RCSID("$NetBSD: var.c,v 1.346 2020/07/27 22:59:49 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -2349,22 +2349,21 @@ ApplyModifier_Match(const char *mod, App st->termc = *st->cp; const char *endpat = st->cp; - char *pattern = NULL; + char *pattern; if (copy) { /* Compress the \:'s out of the pattern. */ pattern = bmake_malloc(st->cp - (mod + 1) + 1); - char *cp2; - for (cp2 = pattern, st->cp = mod + 1; - st->cp < endpat; - st->cp++, cp2++) { - if ((*st->cp == '\\') && (st->cp+1 < endpat) && + char *dst = pattern; + const char *src = mod + 1; + for (; src < endpat; src++, dst++) { + if (src[0] == '\\' && src + 1 < endpat && /* XXX: st->startc is missing here; see above */ - (st->cp[1] == ':' || st->cp[1] == st->endc)) - st->cp++; - *cp2 = *st->cp; + (src[1] == ':' || src[1] == st->endc)) + src++; + *dst = *src; } - *cp2 = '\0'; - endpat = cp2; + *dst = '\0'; + endpat = dst; } else { /* * Either Var_Subst or ModifyWords will need a @@ -2372,15 +2371,18 @@ ApplyModifier_Match(const char *mod, App */ pattern = bmake_strndup(mod + 1, endpat - (mod + 1)); } + if (needSubst) { /* pattern contains embedded '$', so use Var_Subst to expand it. */ char *old_pattern = pattern; pattern = Var_Subst(NULL, pattern, st->ctxt, st->eflags); free(old_pattern); } + if (DEBUG(VAR)) fprintf(debug_file, "Pattern[%s] for [%s] is [%s]\n", st->v->name, st->nstr, pattern); + ModifyWordsCallback callback = mod[0] == 'M' ? ModifyWord_Match : ModifyWord_NoMatch; st->newStr = ModifyWords(st->ctxt, st->sep, st->oneBigWord, st->nstr,