Module Name:    src
Committed By:   rillig
Date:           Mon Feb 22 21:30:33 UTC 2021

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

Log Message:
make: save a hash map lookup when defining a cmdline variable

This is a preparation to extract the code for exporting a cmdline
variable.  That code differs in several details from the other code in
ExportVar.

No functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.832 -r1.833 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.832 src/usr.bin/make/var.c:1.833
--- src/usr.bin/make/var.c:1.832	Mon Feb 22 21:14:15 2021
+++ src/usr.bin/make/var.c	Mon Feb 22 21:30:33 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.832 2021/02/22 21:14:15 rillig Exp $	*/
+/*	$NetBSD: var.c,v 1.833 2021/02/22 21:30:33 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -140,7 +140,7 @@
 #include "metachar.h"
 
 /*	"@(#)var.c	8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.832 2021/02/22 21:14:15 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.833 2021/02/22 21:30:33 rillig Exp $");
 
 typedef enum VarFlags {
 	VFL_NONE	= 0,
@@ -487,7 +487,7 @@ VarFreeEnv(Var *v, Boolean freeValue)
 }
 
 /* Add a new variable of the given name and value to the given scope. */
-static void
+static Var *
 VarAdd(const char *name, const char *value, GNode *scope, VarSetFlags flags)
 {
 	HashEntry *he = HashTable_CreateEntry(&scope->vars, name, NULL);
@@ -495,6 +495,7 @@ VarAdd(const char *name, const char *val
 	    flags & VAR_SET_READONLY ? VFL_READONLY : VFL_NONE);
 	HashEntry_Set(he, v);
 	DEBUG3(VAR, "%s:%s = %s\n", scope->name, name, value);
+	return v;
 }
 
 /*
@@ -980,7 +981,7 @@ Var_SetWithFlags(GNode *scope, const cha
 			/* XXX: name is expanded for the second time */
 			Var_DeleteExpand(SCOPE_GLOBAL, name);
 		}
-		VarAdd(name, val, scope, flags);
+		v = VarAdd(name, val, scope, flags);
 	} else {
 		if ((v->flags & VFL_READONLY) && !(flags & VAR_SET_READONLY)) {
 			DEBUG3(VAR, "%s:%s = %s ignored (read-only)\n",
@@ -994,15 +995,13 @@ Var_SetWithFlags(GNode *scope, const cha
 		if (v->flags & VFL_EXPORTED)
 			ExportVar(name, VEM_PLAIN);
 	}
+
 	/*
 	 * Any variables given on the command line are automatically exported
-	 * to the environment (as per POSIX standard)
-	 * Other than internals.
+	 * to the environment (as per POSIX standard), except for internals.
 	 */
 	if (scope == SCOPE_CMDLINE && !(flags & VAR_SET_NO_EXPORT) &&
 	    name[0] != '.') {
-		if (v == NULL)
-			v = VarFind(name, scope, FALSE); /* we just added it */
 		v->flags |= VFL_FROM_CMD;
 
 		/*
@@ -1016,6 +1015,7 @@ Var_SetWithFlags(GNode *scope, const cha
 
 		Global_Append(MAKEOVERRIDES, name);
 	}
+
 	if (name[0] == '.' && strcmp(name, MAKE_SAVE_DOLLARS) == 0)
 		save_dollars = ParseBoolean(val, save_dollars);
 

Reply via email to