Module Name:    src
Committed By:   rillig
Date:           Fri Dec  3 23:13:29 UTC 2021

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

Log Message:
make: clean up ParseInclude

It was confusing to let the variable 'file' point to the '<' of the
.include directive.  In each parsing function, there should only be a
single moving pointer, typically named 'p' or historically 'cp', even
though the 'c' is redundant.

No functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.565 -r1.566 src/usr.bin/make/parse.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/parse.c
diff -u src/usr.bin/make/parse.c:1.565 src/usr.bin/make/parse.c:1.566
--- src/usr.bin/make/parse.c:1.565	Tue Sep 21 23:06:18 2021
+++ src/usr.bin/make/parse.c	Fri Dec  3 23:13:29 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: parse.c,v 1.565 2021/09/21 23:06:18 rillig Exp $	*/
+/*	$NetBSD: parse.c,v 1.566 2021/12/03 23:13:29 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -109,7 +109,7 @@
 #include "pathnames.h"
 
 /*	"@(#)parse.c	8.3 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: parse.c,v 1.565 2021/09/21 23:06:18 rillig Exp $");
+MAKE_RCSID("$NetBSD: parse.c,v 1.566 2021/12/03 23:13:29 rillig Exp $");
 
 /* types and constants */
 
@@ -2228,54 +2228,52 @@ IncludeFile(char *file, bool isSystem, b
 		doing_depend = depinc;	/* only turn it on */
 }
 
+/*
+ * Parse a directive like '.include' or '.-include'.
+ *
+ * .include "user-makefile.mk"
+ * .include <system-makefile.mk>
+ */
 static void
 ParseInclude(char *directive)
 {
 	char endc;		/* the character which ends the file spec */
-	char *cp;		/* current position in file spec */
+	char *p, *xfile;
 	bool silent = directive[0] != 'i';
-	char *file = directive + (silent ? 8 : 7);
+	FStr file;
 
-	/* Skip to delimiter character so we know where to look */
-	pp_skip_hspace(&file);
+	p = directive + (silent ? 8 : 7);
+	pp_skip_hspace(&p);
 
-	if (*file != '"' && *file != '<') {
+	if (*p != '"' && *p != '<') {
 		Parse_Error(PARSE_FATAL,
 		    ".include filename must be delimited by '\"' or '<'");
 		return;
 	}
 
-	/*
-	 * Set the search path on which to find the include file based on the
-	 * characters which bracket its name. Angle-brackets imply it's
-	 * a system Makefile while double-quotes imply it's a user makefile
-	 */
-	if (*file == '<')
+	if (*p++ == '<')
 		endc = '>';
 	else
 		endc = '"';
+	file = FStr_InitRefer(p);
 
 	/* Skip to matching delimiter */
-	for (cp = ++file; *cp != '\0' && *cp != endc; cp++)
-		continue;
+	while (*p != '\0' && *p != endc)
+		p++;
 
-	if (*cp != endc) {
+	if (*p != endc) {
 		Parse_Error(PARSE_FATAL,
 		    "Unclosed .include filename. '%c' expected", endc);
 		return;
 	}
 
-	*cp = '\0';
+	*p = '\0';
 
-	/*
-	 * Substitute for any variables in the filename before trying to
-	 * find the file.
-	 */
-	(void)Var_Subst(file, SCOPE_CMDLINE, VARE_WANTRES, &file);
+	(void)Var_Subst(file.str, SCOPE_CMDLINE, VARE_WANTRES, &xfile);
 	/* TODO: handle errors */
 
-	IncludeFile(file, endc == '>', directive[0] == 'd', silent);
-	free(file);
+	IncludeFile(xfile, endc == '>', directive[0] == 'd', silent);
+	free(xfile);
 }
 
 /*

Reply via email to