Module Name:    src
Committed By:   rillig
Date:           Sun Nov  8 02:56:43 UTC 2020

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

Log Message:
make(1): split ReadMakefiles into separate functions

This keeps the indentation of the code small.

It also reduces the possible confusion about the two similar branches in
that function that differ in a small but important detail:
ReadAllMakefiles reads all the makefiles while ReadFirstDefaultMakefile
stops after the first existing makefile.


To generate a diff of this commit:
cvs rdiff -u -r1.442 -r1.443 src/usr.bin/make/main.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/main.c
diff -u src/usr.bin/make/main.c:1.442 src/usr.bin/make/main.c:1.443
--- src/usr.bin/make/main.c:1.442	Sun Nov  8 02:05:34 2020
+++ src/usr.bin/make/main.c	Sun Nov  8 02:56:43 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.442 2020/11/08 02:05:34 rillig Exp $	*/
+/*	$NetBSD: main.c,v 1.443 2020/11/08 02:56:43 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -109,7 +109,7 @@
 #include "trace.h"
 
 /*	"@(#)main.c	8.3 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: main.c,v 1.442 2020/11/08 02:05:34 rillig Exp $");
+MAKE_RCSID("$NetBSD: main.c,v 1.443 2020/11/08 02:56:43 rillig Exp $");
 #if defined(MAKE_NATIVE) && !defined(lint)
 __COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993 "
 	    "The Regents of the University of California.  "
@@ -1275,29 +1275,35 @@ InitVpath(void)
 }
 
 static void
-ReadMakefiles(void)
+ReadAllMakefiles(StringList *makefiles)
 {
-	if (opts.makefiles->first != NULL) {
-		StringListNode *ln;
+	StringListNode *ln;
 
-		for (ln = opts.makefiles->first; ln != NULL; ln = ln->next) {
-			if (ReadMakefile(ln->datum) != 0)
-				Fatal("%s: cannot open %s.",
-				      progname, (char *)ln->datum);
-		}
-	} else {
-		char *p1;
-		(void)Var_Subst("${" MAKE_MAKEFILE_PREFERENCE "}",
-				VAR_CMDLINE, VARE_WANTRES, &p1);
-		/* TODO: handle errors */
-		(void)str2Lst_Append(opts.makefiles, p1, NULL);
-		(void)Lst_ForEachUntil(opts.makefiles,
-				       ReadMakefileSucceeded, NULL);
-		free(p1);
+	for (ln = makefiles->first; ln != NULL; ln = ln->next) {
+		const char *fname = ln->datum;
+		if (ReadMakefile(fname) != 0)
+			Fatal("%s: cannot open %s.", progname, fname);
 	}
 }
 
 static void
+ReadFirstDefaultMakefile(void)
+{
+	char *prefs;
+	(void)Var_Subst("${" MAKE_MAKEFILE_PREFERENCE "}",
+			VAR_CMDLINE, VARE_WANTRES, &prefs);
+	/* TODO: handle errors */
+
+	/* XXX: This should use a local list instead of opts.makefiles
+	 * since these makefiles do not come from the command line.  They
+	 * also have different semantics in that only the first file that
+	 * is found is processed.  See ReadAllMakefiles. */
+	(void)str2Lst_Append(opts.makefiles, prefs, NULL);
+	(void)Lst_ForEachUntil(opts.makefiles, ReadMakefileSucceeded, NULL);
+	free(prefs);
+}
+
+static void
 CleanUp(void)
 {
 #ifdef CLEANUP
@@ -1541,7 +1547,10 @@ main(int argc, char **argv)
 	 */
 	if (!opts.noBuiltins)
 		ReadBuiltinRules();
-	ReadMakefiles();
+	if (!Lst_IsEmpty(opts.makefiles))
+		ReadAllMakefiles(opts.makefiles);
+	else
+		ReadFirstDefaultMakefile();
 
 	/* In particular suppress .depend for '-r -V .OBJDIR -f /dev/null' */
 	if (!opts.noBuiltins || opts.printVars == PVM_NONE) {

Reply via email to