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

Reply via email to