Module Name:    src
Committed By:   rillig
Date:           Thu Nov  5 20:50:14 UTC 2020

Modified Files:
        src/usr.bin/make: var.c

Log Message:
make(1): extract EvalUndefined from ParseVarnameLong


To generate a diff of this commit:
cvs rdiff -u -r1.662 -r1.663 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.662 src/usr.bin/make/var.c:1.663
--- src/usr.bin/make/var.c:1.662	Thu Nov  5 18:43:55 2020
+++ src/usr.bin/make/var.c	Thu Nov  5 20:50:13 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.662 2020/11/05 18:43:55 rillig Exp $	*/
+/*	$NetBSD: var.c,v 1.663 2020/11/05 20:50:13 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.662 2020/11/05 18:43:55 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.663 2020/11/05 20:50:13 rillig Exp $");
 
 #define VAR_DEBUG1(fmt, arg1) DEBUG1(VAR, fmt, arg1)
 #define VAR_DEBUG2(fmt, arg1, arg2) DEBUG2(VAR, fmt, arg1, arg2)
@@ -3648,6 +3648,44 @@ FindLocalLegacyVar(const char *varname, 
     }
 }
 
+static VarParseResult
+EvalUndefined(
+	Boolean dynamic,
+	const char *start,
+	const char *p, char *varname,
+	VarEvalFlags eflags,
+	void **out_freeIt,
+	const char **out_val
+) {
+    if (dynamic) {
+	char *pstr = bmake_strsedup(start, p);
+	free(varname);
+	*out_freeIt = pstr;
+	*out_val = pstr;
+	return VPR_OK;
+    }
+
+    if ((eflags & VARE_UNDEFERR) && (eflags & VARE_WANTRES) &&
+	DEBUG(LINT))
+    {
+	Parse_Error(PARSE_FATAL, "Variable \"%s\" is undefined",
+		    varname);
+	free(varname);
+	*out_val = var_Error;
+	return VPR_UNDEF_MSG;
+    }
+
+    if (eflags & VARE_UNDEFERR) {
+	free(varname);
+	*out_val = var_Error;
+	return VPR_UNDEF_SILENT;
+    }
+
+    free(varname);
+    *out_val = varUndefined;
+    return VPR_OK;
+}
+
 /* Parse a long variable name enclosed in braces or parentheses such as $(VAR)
  * or ${VAR}, up to the closing brace or parenthesis, or in the case of
  * ${VAR:Modifiers}, up to the ':' that starts the modifiers.
@@ -3713,36 +3751,8 @@ ParseVarnameLong(
 	if (!haveModifier) {
 	    p++;		/* skip endc */
 	    *pp = p;
-	    if (dynamic) {
-		char *pstr = bmake_strsedup(start, p);
-		free(varname);
-		*out_FALSE_res = VPR_OK;
-		*out_FALSE_freeIt = pstr;
-		*out_FALSE_val = pstr;
-		return FALSE;
-	    }
-
-	    if ((eflags & VARE_UNDEFERR) && (eflags & VARE_WANTRES) &&
-		DEBUG(LINT))
-	    {
-		Parse_Error(PARSE_FATAL, "Variable \"%s\" is undefined",
-			    varname);
-		free(varname);
-		*out_FALSE_res = VPR_UNDEF_MSG;
-		*out_FALSE_val = var_Error;
-		return FALSE;
-	    }
-
-	    if (eflags & VARE_UNDEFERR) {
-		free(varname);
-		*out_FALSE_res = VPR_UNDEF_SILENT;
-		*out_FALSE_val = var_Error;
-		return FALSE;
-	    }
-
-	    free(varname);
-	    *out_FALSE_res = VPR_OK;
-	    *out_FALSE_val = varUndefined;
+	    *out_FALSE_res = EvalUndefined(dynamic, start, p, varname, eflags,
+					   out_FALSE_freeIt, out_FALSE_val);
 	    return FALSE;
 	}
 

Reply via email to