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): clean up freeing of environment variab...
details: https://anonhg.NetBSD.org/src/rev/28ecda69515e
branches: trunk
changeset: 946219:28ecda69515e
user: rillig <rillig%NetBSD.org@localhost>
date: Sat Nov 21 15:32:52 2020 +0000
description:
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.
diffstat:
usr.bin/make/var.c | 21 +++++++++++++--------
1 files changed, 13 insertions(+), 8 deletions(-)
diffs (42 lines):
diff -r bb96aebb9087 -r 28ecda69515e usr.bin/make/var.c
--- a/usr.bin/make/var.c Sat Nov 21 15:30:06 2020 +0000
+++ b/usr.bin/make/var.c Sat Nov 21 15:32:52 2020 +0000
@@ -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 @@
*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)) {
Home |
Main Index |
Thread Index |
Old Index