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): in ModifyWord_Match, use different var...



details:   https://anonhg.NetBSD.org/src/rev/2dc1f52038e4
branches:  trunk
changeset: 1012359:2dc1f52038e4
user:      rillig <rillig%NetBSD.org@localhost>
date:      Mon Jul 27 22:59:49 2020 +0000

description:
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.

diffstat:

 usr.bin/make/var.c |  30 ++++++++++++++++--------------
 1 files changed, 16 insertions(+), 14 deletions(-)

diffs (78 lines):

diff -r d92e5f577058 -r 2dc1f52038e4 usr.bin/make/var.c
--- a/usr.bin/make/var.c        Mon Jul 27 22:50:01 2020 +0000
+++ b/usr.bin/make/var.c        Mon Jul 27 22:59:49 2020 +0000
@@ -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 @@
     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 @@
         */
        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,



Home | Main Index | Thread Index | Old Index