Module Name:    src
Committed By:   rillig
Date:           Fri Jun 10 22:23:19 UTC 2022

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

Log Message:
make: extract half of IncludeFile into a separate function

No functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.672 -r1.673 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.672 src/usr.bin/make/parse.c:1.673
--- src/usr.bin/make/parse.c:1.672	Fri Jun 10 22:04:49 2022
+++ src/usr.bin/make/parse.c	Fri Jun 10 22:23:19 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: parse.c,v 1.672 2022/06/10 22:04:49 rillig Exp $	*/
+/*	$NetBSD: parse.c,v 1.673 2022/06/10 22:23:19 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -106,7 +106,7 @@
 #include "pathnames.h"
 
 /*	"@(#)parse.c	8.3 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: parse.c,v 1.672 2022/06/10 22:04:49 rillig Exp $");
+MAKE_RCSID("$NetBSD: parse.c,v 1.673 2022/06/10 22:23:19 rillig Exp $");
 
 /*
  * A file being read.
@@ -1116,6 +1116,37 @@ ClearPaths(SearchPathList *paths)
 	Dir_SetPATH();
 }
 
+static char *
+FindInDirOfIncludingFile(const char *file)
+{
+	char *fullname, *incdir, *slash, *newName;
+	int i;
+
+	fullname = NULL;
+	incdir = bmake_strdup(CurFile()->name.str);
+	slash = strrchr(incdir, '/');
+	if (slash != NULL) {
+		*slash = '\0';
+		/*
+		 * Now do lexical processing of leading "../" on the
+		 * filename.
+		 */
+		for (i = 0; strncmp(file + i, "../", 3) == 0; i += 3) {
+			slash = strrchr(incdir + 1, '/');
+			if (slash == NULL || strcmp(slash, "/..") == 0)
+				break;
+			*slash = '\0';
+		}
+		newName = str_concat3(incdir, "/", file + i);
+		fullname = Dir_FindFile(newName, parseIncPath);
+		if (fullname == NULL)
+			fullname = Dir_FindFile(newName, &dirSearchPath);
+		free(newName);
+	}
+	free(incdir);
+	return fullname;
+}
+
 /*
  * Handle one of the .[-ds]include directives by remembering the current file
  * and pushing the included file on the stack.  After the included file has
@@ -1131,50 +1162,12 @@ IncludeFile(const char *file, bool isSys
 {
 	Buffer buf;
 	char *fullname;		/* full pathname of file */
-	char *newName;
-	char *slash, *incdir;
 	int fd;
-	int i;
 
 	fullname = file[0] == '/' ? bmake_strdup(file) : NULL;
 
 	if (fullname == NULL && !isSystem) {
-		/*
-		 * Include files contained in double-quotes are first searched
-		 * relative to the including file's location. We don't want to
-		 * cd there, of course, so we just tack on the old file's
-		 * leading path components and call Dir_FindFile to see if
-		 * we can locate the file.
-		 */
-
-		incdir = bmake_strdup(CurFile()->name.str);
-		slash = strrchr(incdir, '/');
-		if (slash != NULL) {
-			*slash = '\0';
-			/*
-			 * Now do lexical processing of leading "../" on the
-			 * filename.
-			 */
-			for (i = 0; strncmp(file + i, "../", 3) == 0; i += 3) {
-				slash = strrchr(incdir + 1, '/');
-				if (slash == NULL || strcmp(slash, "/..") == 0)
-					break;
-				*slash = '\0';
-			}
-			newName = str_concat3(incdir, "/", file + i);
-			fullname = Dir_FindFile(newName, parseIncPath);
-			if (fullname == NULL)
-				fullname = Dir_FindFile(newName,
-				    &dirSearchPath);
-			free(newName);
-		}
-		free(incdir);
-
-		/*
-		 * Makefile wasn't found in same directory as included
-		 * makefile.  Search for it on .PATH.suffix, then on the '-I'
-		 * search path, then on the .PATH.
-		 */
+		fullname = FindInDirOfIncludingFile(file);
 		if (fullname == NULL) {
 			const char *suff;
 			SearchPath *suffPath;

Reply via email to