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); }