Module Name: src
Committed By: rillig
Date: Sat Nov 21 15:32:52 UTC 2020
Modified Files:
src/usr.bin/make: var.c
Log Message:
make(1): clean up freeing of environment variables in Var_Parse
The previous code with the extra boolean variable was a brain-twister
since the responsibility of freeing the memory was distributed over 3
different functions.
To generate a diff of this commit:
cvs rdiff -u -r1.691 -r1.692 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.691 src/usr.bin/make/var.c:1.692
--- src/usr.bin/make/var.c:1.691 Sat Nov 21 15:28:44 2020
+++ src/usr.bin/make/var.c Sat Nov 21 15:32:52 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.691 2020/11/21 15:28:44 rillig Exp $ */
+/* $NetBSD: var.c,v 1.692 2020/11/21 15:32:52 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -130,7 +130,7 @@
#include "metachar.h"
/* "@(#)var.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.691 2020/11/21 15:28:44 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.692 2020/11/21 15:32:52 rillig Exp $");
#define VAR_DEBUG1(fmt, arg1) DEBUG1(VAR, fmt, arg1)
#define VAR_DEBUG2(fmt, arg1, arg2) DEBUG2(VAR, fmt, arg1, arg2)
@@ -3925,12 +3925,17 @@ Var_Parse(const char **pp, GNode *ctxt,
*pp = p;
if (v->flags & VAR_FROM_ENV) {
- /* Free the environment variable now since we own it,
- * but don't free the variable value if it will be returned. */
- Boolean keepValue = value == Buf_GetAll(&v->val, NULL);
- if (keepValue)
- *out_val_freeIt = value;
- (void)VarFreeEnv(v, !keepValue);
+ /* Free the environment variable now since we own it. */
+
+ char *varValue = Buf_Destroy(&v->val, FALSE);
+ if (value == varValue) {
+ /* Don't free the variable value since it will be returned. */
+ *out_val_freeIt = varValue;
+ } else
+ free(varValue);
+
+ free(v->name_freeIt);
+ free(v);
} else if (exprFlags & VEF_UNDEF) {
if (!(exprFlags & VEF_DEF)) {