Module Name:    src
Committed By:   rillig
Date:           Mon Sep  7 07:10:56 UTC 2020

Modified Files:
        src/usr.bin/make: var.c

Log Message:
make(1): migrate to Var_ParsePP in Var_Parse and Var_Subst


To generate a diff of this commit:
cvs rdiff -u -r1.489 -r1.490 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.489 src/usr.bin/make/var.c:1.490
--- src/usr.bin/make/var.c:1.489	Mon Sep  7 07:04:30 2020
+++ src/usr.bin/make/var.c	Mon Sep  7 07:10:56 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.489 2020/09/07 07:04:30 rillig Exp $	*/
+/*	$NetBSD: var.c,v 1.490 2020/09/07 07:10:56 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.489 2020/09/07 07:04:30 rillig Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.490 2020/09/07 07:10:56 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.489 2020/09/07 07:04:30 rillig Exp $");
+__RCSID("$NetBSD: var.c,v 1.490 2020/09/07 07:10:56 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -3429,7 +3429,7 @@ Var_Parse(const char * const str, GNode 
 	 * Skip to the end character or a colon, whichever comes first.
 	 */
 	depth = 1;
-	for (tstr = str + 2; *tstr != '\0'; tstr++) {
+	for (tstr = str + 2; *tstr != '\0';) {
 	    /* Track depth so we can spot parse errors. */
 	    if (*tstr == startc)
 		depth++;
@@ -3441,15 +3441,14 @@ Var_Parse(const char * const str, GNode 
 		break;
 	    /* A variable inside a variable, expand. */
 	    if (*tstr == '$') {
-		int rlen;
 		void *freeIt;
-		const char *rval = Var_Parse(tstr, ctxt, eflags, &rlen,
-					     &freeIt);
+		const char *rval = Var_ParsePP(&tstr, ctxt, eflags, &freeIt);
 		Buf_AddStr(&namebuf, rval);
 		free(freeIt);
-		tstr += rlen - 1;
-	    } else
+	    } else {
 		Buf_AddByte(&namebuf, *tstr);
+		tstr++;
+	    }
 	}
 	if (*tstr == ':') {
 	    haveModifier = TRUE;
@@ -3696,9 +3695,9 @@ Var_Subst(const char *str, GNode *ctxt, 
 		continue;
 	    Buf_AddBytesBetween(&buf, cp, str);
 	} else {
-	    int length;
+	    const char *nested_str = str;
 	    void *freeIt;
-	    const char *val = Var_Parse(str, ctxt, eflags, &length, &freeIt);
+	    const char *val = Var_ParsePP(&nested_str, ctxt, eflags, &freeIt);
 
 	    if (val == var_Error || val == varNoError) {
 		/*
@@ -3708,7 +3707,7 @@ Var_Subst(const char *str, GNode *ctxt, 
 		 * the string...
 		 */
 		if (oldVars) {
-		    str += length;
+		    str = nested_str;
 		} else if ((eflags & VARE_UNDEFERR) || val == var_Error) {
 		    /*
 		     * If variable is undefined, complain and skip the
@@ -3717,18 +3716,18 @@ Var_Subst(const char *str, GNode *ctxt, 
 		     */
 		    if (!errorReported) {
 			Parse_Error(PARSE_FATAL, "Undefined variable \"%.*s\"",
-				    length, str);
+				    (int)(size_t)(nested_str - str), str);
 		    }
-		    str += length;
+		    str = nested_str;
 		    errorReported = TRUE;
 		} else {
 		    Buf_AddByte(&buf, *str);
-		    str += 1;
+		    str++;
 		}
 	    } else {
 		size_t val_len;
 
-		str += length;
+		str = nested_str;
 
 		val_len = strlen(val);
 		Buf_AddBytes(&buf, val, val_len);

Reply via email to