From 11dcb9bdafcfaa80d1b98655a803bd6a374c831d Mon Sep 17 00:00:00 2001 From: rillig Date: Mon, 7 Sep 2020 07:10:56 +0000 Subject: [PATCH] make(1): migrate to Var_ParsePP in Var_Parse and Var_Subst --- usr.bin/make/var.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/usr.bin/make/var.c b/usr.bin/make/var.c index 43bde2d8790c..c2acc2eebdd6 100644 --- a/usr.bin/make/var.c +++ b/usr.bin/make/var.c @@ -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 #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 *ctxt, VarEvalFlags eflags, * 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 *ctxt, VarEvalFlags eflags, 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, VarEvalFlags eflags) 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, VarEvalFlags eflags) * 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, VarEvalFlags eflags) */ 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);