Module Name: src
Committed By: rillig
Date: Sun Dec 6 15:40:46 UTC 2020
Modified Files:
src/usr.bin/make: var.c
Log Message:
make(1): use FStr in Var_UnExport
To generate a diff of this commit:
cvs rdiff -u -r1.711 -r1.712 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.711 src/usr.bin/make/var.c:1.712
--- src/usr.bin/make/var.c:1.711 Sun Dec 6 14:50:09 2020
+++ src/usr.bin/make/var.c Sun Dec 6 15:40:46 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.711 2020/12/06 14:50:09 rillig Exp $ */
+/* $NetBSD: var.c,v 1.712 2020/12/06 15:40:46 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.711 2020/12/06 14:50:09 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.712 2020/12/06 15:40:46 rillig Exp $");
/* A string that may need to be freed after use. */
typedef struct FStr {
@@ -311,6 +311,16 @@ ENUM_FLAGS_RTTI_6(VarFlags,
static VarExportedMode var_exportedVars = VAR_EXPORTED_NONE;
+#define FSTR_INIT { NULL, NULL }
+
+static void
+FStr_Assign(FStr *fstr, const char *str, void *freeIt)
+{
+ free(fstr->freeIt);
+ fstr->str = str;
+ fstr->freeIt = freeIt;
+}
+
static void
FStr_Done(FStr *fstr)
{
@@ -771,13 +781,9 @@ UnexportVar(const char *varname, Boolean
void
Var_UnExport(const char *str)
{
- const char *varnames;
- char *varnames_freeIt;
+ FStr varnames = FSTR_INIT;
Boolean unexport_env;
- varnames = NULL;
- varnames_freeIt = NULL;
-
str += strlen("unexport");
unexport_env = strncmp(str, "-env", 4) == 0;
if (unexport_env) {
@@ -785,31 +791,32 @@ Var_UnExport(const char *str)
} else {
cpp_skip_whitespace(&str);
if (str[0] != '\0')
- varnames = str;
+ FStr_Assign(&varnames, str, NULL);
}
- if (varnames == NULL) {
+ if (varnames.str == NULL) {
+ char *expanded;
/* Using .MAKE.EXPORTED */
(void)Var_Subst("${" MAKE_EXPORTED ":O:u}", VAR_GLOBAL,
- VARE_WANTRES, &varnames_freeIt);
+ VARE_WANTRES, &expanded);
/* TODO: handle errors */
- varnames = varnames_freeIt;
+ FStr_Assign(&varnames, expanded, expanded);
}
{
size_t i;
- Words words = Str_Words(varnames, FALSE);
+ Words words = Str_Words(varnames.str, FALSE);
for (i = 0; i < words.len; i++) {
const char *varname = words.words[i];
- UnexportVar(varname, unexport_env, varnames == str);
+ UnexportVar(varname, unexport_env, varnames.str == str);
}
Words_Free(words);
- if (varnames != str) {
+ if (varnames.str != str)
Var_Delete(MAKE_EXPORTED, VAR_GLOBAL);
- free(varnames_freeIt);
- }
}
+
+ FStr_Done(&varnames);
}
/* See Var_Set for documentation. */