Module Name: src
Committed By: rillig
Date: Sun Dec 6 17:22:45 UTC 2020
Modified Files:
src/usr.bin/make: var.c
Log Message:
make(1): extract GetVarnamesToUnexport from Var_UnExport
To generate a diff of this commit:
cvs rdiff -u -r1.713 -r1.714 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.713 src/usr.bin/make/var.c:1.714
--- src/usr.bin/make/var.c:1.713 Sun Dec 6 16:24:30 2020
+++ src/usr.bin/make/var.c Sun Dec 6 17:22:44 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.713 2020/12/06 16:24:30 rillig Exp $ */
+/* $NetBSD: var.c,v 1.714 2020/12/06 17:22:44 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.713 2020/12/06 16:24:30 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.714 2020/12/06 17:22:44 rillig Exp $");
/* A string that may need to be freed after use. */
typedef struct FStr {
@@ -725,7 +725,7 @@ Var_Export(const char *str, Boolean isEx
extern char **environ;
static void
-UnexportEnv(void)
+ClearEnv(void)
{
const char *cp;
char **newenv;
@@ -751,6 +751,39 @@ UnexportEnv(void)
}
static void
+GetVarnamesToUnexport(const char *str,
+ const char **out_args, FStr *out_varnames,
+ UnexportWhat *out_what)
+{
+ UnexportWhat what;
+ FStr varnames = FSTR_INIT;
+
+ str += strlen("unexport");
+ if (strncmp(str, "-env", 4) == 0) {
+ ClearEnv();
+ what = UNEXPORT_ENV;
+ } else {
+ cpp_skip_whitespace(&str);
+ what = str[0] != '\0' ? UNEXPORT_NAMED : UNEXPORT_ALL;
+ if (what == UNEXPORT_NAMED)
+ FStr_Assign(&varnames, str, NULL);
+ }
+ *out_args = str;
+
+ if (what != UNEXPORT_NAMED) {
+ char *expanded;
+ /* Using .MAKE.EXPORTED */
+ (void)Var_Subst("${" MAKE_EXPORTED ":O:u}", VAR_GLOBAL,
+ VARE_WANTRES, &expanded);
+ /* TODO: handle errors */
+ FStr_Assign(&varnames, expanded, expanded);
+ }
+
+ *out_varnames = varnames;
+ *out_what = what;
+}
+
+static void
UnexportVar(const char *varname, UnexportWhat what)
{
Var *v = VarFind(varname, VAR_GLOBAL, FALSE);
@@ -788,27 +821,10 @@ void
Var_UnExport(const char *str)
{
UnexportWhat what;
- FStr varnames = FSTR_INIT;
-
- str += strlen("unexport");
- if (strncmp(str, "-env", 4) == 0) {
- UnexportEnv();
- what = UNEXPORT_ENV;
- } else {
- cpp_skip_whitespace(&str);
- what = str[0] != '\0' ? UNEXPORT_NAMED : UNEXPORT_ALL;
- if (what == UNEXPORT_NAMED)
- FStr_Assign(&varnames, str, NULL);
- }
+ FStr varnames;
+ const char *args;
- if (what != UNEXPORT_NAMED) {
- char *expanded;
- /* Using .MAKE.EXPORTED */
- (void)Var_Subst("${" MAKE_EXPORTED ":O:u}", VAR_GLOBAL,
- VARE_WANTRES, &expanded);
- /* TODO: handle errors */
- FStr_Assign(&varnames, expanded, expanded);
- }
+ GetVarnamesToUnexport(str, &args, &varnames, &what);
{
size_t i;
@@ -819,7 +835,7 @@ Var_UnExport(const char *str)
UnexportVar(varname, what);
}
Words_Free(words);
- if (varnames.str != str)
+ if (varnames.str != args)
Var_Delete(MAKE_EXPORTED, VAR_GLOBAL);
}