Module Name:    src
Committed By:   rillig
Date:           Thu Sep 21 20:30:59 UTC 2023

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

Log Message:
make: remove obsolete comments, clean up comments and identifiers

No binary change, except for the line numbers in assertions.


To generate a diff of this commit:
cvs rdiff -u -r1.282 -r1.283 src/usr.bin/make/dir.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/dir.c
diff -u src/usr.bin/make/dir.c:1.282 src/usr.bin/make/dir.c:1.283
--- src/usr.bin/make/dir.c:1.282	Fri Jun 23 04:56:54 2023
+++ src/usr.bin/make/dir.c	Thu Sep 21 20:30:59 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: dir.c,v 1.282 2023/06/23 04:56:54 rillig Exp $	*/
+/*	$NetBSD: dir.c,v 1.283 2023/09/21 20:30:59 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -83,7 +83,7 @@
  *
  *	Dir_End		Clean up the module.
  *
- *	Dir_SetPATH	Set ${.PATH} to reflect state of dirSearchPath.
+ *	Dir_SetPATH	Set ${.PATH} to reflect the state of dirSearchPath.
  *
  *	Dir_HasWildcards
  *			Returns true if the name given it needs to
@@ -94,13 +94,12 @@
  *			from the search path.
  *
  *	Dir_FindFile	Searches for a file on a given search path.
- *			If it exists, the entire path is returned.
- *			Otherwise NULL is returned.
+ *			If it exists, returns the entire path, otherwise NULL.
  *
  *	Dir_FindHereOrAbove
- *			Search for a path in the current directory and
- *			then all the directories above it in turn until
- *			the path is found or we reach the root ("/").
+ *			Search for a path in the current directory and then
+ *			all the directories above it in turn, until the path
+ *			is found or the root directory ("/") is reached.
  *
  *	Dir_UpdateMTime
  *			Update the modification time and path of a node with
@@ -114,11 +113,6 @@
  *			preceded by the command flag and all of them
  *			separated by a space.
  *
- *	Dir_Destroy	Destroy an element of a search path. Frees up all
- *			things that can be freed for the element as long
- *			as the element is no longer referenced by any other
- *			search path.
- *
  *	SearchPath_Clear
  *			Resets a search path to the empty list.
  *
@@ -138,7 +132,7 @@
 #include "job.h"
 
 /*	"@(#)dir.c	8.2 (Berkeley) 1/2/94"	*/
-MAKE_RCSID("$NetBSD: dir.c,v 1.282 2023/06/23 04:56:54 rillig Exp $");
+MAKE_RCSID("$NetBSD: dir.c,v 1.283 2023/09/21 20:30:59 rillig Exp $");
 
 /*
  * A search path is a list of CachedDir structures. A CachedDir has in it the
@@ -152,26 +146,21 @@ MAKE_RCSID("$NetBSD: dir.c,v 1.282 2023/
  * All previously-read directories are kept in openDirs, which is checked
  * first before a directory is opened.
  *
- * The need for the caching of whole directories is brought about by the
- * multi-level transformation code in suff.c, which tends to search for far
- * more files than regular make does. In the initial implementation, the
- * amount of time spent performing "stat" calls was truly astronomical.
- * The problem with caching at the start is, of course, that pmake doesn't
- * then detect changes to these directories during the course of the make.
- * Three possibilities suggest themselves:
+ * This cache is used by the multi-level transformation code in suff.c, which
+ * tends to search for far more files than in regular explicit targets. After
+ * a directory has been cached, any later changes to that directory are not
+ * reflected in the cache. To keep the cache up to date, there are several
+ * ideas:
  *
  * 1)	just use stat to test for a file's existence. As mentioned above,
- *	this is very inefficient due to the number of checks engendered by
+ *	this is very inefficient due to the number of checks performed by
  *	the multi-level transformation code.
  *
- * 2)	use readdir() and company to search the directories, keeping them
- *	open between checks. I have tried this and while it didn't slow down
- *	the process too much, it could severely affect the amount of
- *	parallelism available as each directory open would take another file
- *	descriptor out of play for handling I/O for another job. Given that
- *	it is only recently (as of 1993 or earlier) that UNIX OS's have taken
- *	to allowing more than 20 or 32 file descriptors for a process, this
- *	doesn't seem acceptable to me.
+ * 2)	use readdir() to search the directories, keeping them open between
+ *	checks. Around 1993 or earlier, this didn't slow down the process too
+ *	much, but it consumed one file descriptor per open directory, which
+ *	was critical on the then-current operating systems, as many limited
+ *	the number of open file descriptors to 20 or 32.
  *
  * 3)	record the mtime of the directory in the CachedDir structure and
  *	verify the directory hasn't changed since the contents were cached.
@@ -184,9 +173,9 @@ MAKE_RCSID("$NetBSD: dir.c,v 1.282 2023/
  *	number of reloadings and if the number goes over a (small) limit,
  *	resort to using stat in its place.
  *
- * An additional thing to consider is that pmake is used primarily to create
- * C programs and until recently (as of 1993 or earlier) pcc-based compilers
- * refused to allow you to specify where the resulting object file should be
+ * An additional thing to consider is that make is used primarily to create
+ * C programs and until recently (as of 1993 or earlier), pcc-based compilers
+ * didn't have an option to specify where the resulting object file should be
  * placed. This forced all objects to be created in the current directory.
  * This isn't meant as a full excuse, just an explanation of some of the
  * reasons for the caching used here.
@@ -212,7 +201,7 @@ MAKE_RCSID("$NetBSD: dir.c,v 1.282 2023/
 /* A cache for the filenames in a directory. */
 struct CachedDir {
 	/*
-	 * Name of directory, either absolute or relative to the current
+	 * Name of the directory, either absolute or relative to the current
 	 * directory. The name is not normalized in any way, that is, "."
 	 * and "./." are different.
 	 *
@@ -273,8 +262,7 @@ static CachedDir *dotLast = NULL;
  *
  * XXX: If this is done way early, there's a chance other rules will have
  * already updated the file, in which case we'll update it again. Generally,
- * there won't be two rules to update a single file, so this should be ok,
- * but...
+ * there won't be two rules to update a single file, so this should be ok.
  */
 static HashTable mtimes;
 
@@ -338,7 +326,7 @@ CachedDir_Unref(CachedDir *dir)
 	free(dir);
 }
 
-/* Update the value of the CachedDir variable, updating the reference counts. */
+/* Update the value of 'var', updating the reference counts. */
 static void
 CachedDir_Assign(CachedDir **var, CachedDir *dir)
 {
@@ -487,7 +475,7 @@ Dir_InitCur(const char *newCurdir)
 		return;
 
 	/*
-	 * Our build directory is not the same as our source directory.
+	 * The build directory is not the same as the source directory.
 	 * Keep this one around too.
 	 */
 	dir = SearchPath_Add(NULL, newCurdir);
@@ -498,7 +486,7 @@ Dir_InitCur(const char *newCurdir)
 }
 
 /*
- * (Re)initialize "dot" (current/object directory) path hash.
+ * (Re)initialize "dot" (the current/object directory).
  * Some directories may be cached.
  */
 void
@@ -599,8 +587,6 @@ Dir_SetSYSPATH(void)
  * XXX: This code is not 100% correct ([^]] fails etc.). I really don't think
  * that make(1) should be expanding patterns, because then you have to set a
  * mechanism for escaping the expansion!
- *
- * Return true if the word should be expanded, false otherwise.
  */
 bool
 Dir_HasWildcards(const char *name)
@@ -637,20 +623,14 @@ Dir_HasWildcards(const char *name)
 }
 
 /*
- * See if any files match the pattern and add their names to the 'expansions'
- * list if they do.
+ * See if any files as seen from 'dir' match 'pattern', and add their names
+ * to 'expansions' if they do.
  *
- * This is incomplete -- wildcards are only expanded in the final path
- * component, but not in directories like src/lib*c/file*.c, but it
- * will do for now (now being 1993 until at least 2020). To expand these,
+ * Wildcards are only expanded in the final path component, but not in
+ * directories like src/lib*c/file*.c. To expand these wildcards,
  * delegate the work to the shell, using the '!=' variable assignment
  * operator, the ':sh' variable modifier or the ':!...!' variable modifier,
  * such as in ${:!echo src/lib*c/file*.c!}.
- *
- * Input:
- *	pattern		Pattern to look for
- *	dir		Directory to search
- *	expansion	Place to store the results
  */
 static void
 DirMatchFiles(const char *pattern, CachedDir *dir, StringList *expansions)
@@ -824,7 +804,7 @@ DirExpandCurly(const char *word, const c
 }
 
 
-/* Expand the pattern in each of the directories from the path. */
+/* Expand 'pattern' in each of the directories from 'path'. */
 static void
 DirExpandPath(const char *pattern, SearchPath *path, StringList *expansions)
 {
@@ -861,11 +841,6 @@ SearchPath_ExpandMiddle(SearchPath *path
 
 	prefix = bmake_strsedup(pattern, wildcardComponent + 1);
 	/*
-	 * XXX: Check the "the directory is added to the path" part.
-	 * It is probably surprising that the directory before a
-	 * wildcard gets added to the path.
-	 */
-	/*
 	 * XXX: Only the first match of the prefix in the path is
 	 * taken, any others are ignored.  The expectation may be
 	 * that the pattern is expanded in the whole path.
@@ -880,7 +855,7 @@ SearchPath_ExpandMiddle(SearchPath *path
 	 * path contains ../Etc/Object and we're looking for Etc, it won't
 	 * be found.  Ah well.  Probably not important.
 	 *
-	 * XXX: Check whether the above comment is still true.
+	 * TODO: Check whether the above comment is still true.
 	 */
 	if (dirpath == NULL)
 		return;
@@ -921,12 +896,8 @@ SearchPath_Expand(SearchPath *path, cons
 		goto done;
 	}
 
-	/* At this point, the pattern does not contain '{'. */
-
 	slash = strchr(pattern, '/');
 	if (slash == NULL) {
-		/* The pattern has no directory component. */
-
 		/* First the files in dot. */
 		DirMatchFiles(pattern, dot, expansions);
 		/* Then the files in every other directory on the path. */
@@ -972,13 +943,13 @@ done:
 }
 
 /*
- * Find if the file with the given name exists in the given path.
+ * Find if 'base' exists in 'dir'.
  * Return the freshly allocated path to the file, or NULL.
  */
 static char *
 DirLookup(CachedDir *dir, const char *base)
 {
-	char *file;		/* the current filename to check */
+	char *file;
 
 	DEBUG1(DIR, "   %s ...\n", dir->name);
 
@@ -994,7 +965,7 @@ DirLookup(CachedDir *dir, const char *ba
 
 
 /*
- * Find if the file with the given name exists in the given directory.
+ * Find if 'name' exists in 'dir'.
  * Return the freshly allocated path to the file, or NULL.
  */
 static char *
@@ -1016,12 +987,12 @@ DirLookupSubdir(CachedDir *dir, const ch
 }
 
 /*
- * Find if the file with the given name exists in the given path.
- * Return the freshly allocated path to the file, the empty string, or NULL.
- * Returning the empty string means that the search should be terminated.
+ * Find if 'name' (which has basename 'base') exists in 'dir'.
+ * Return the freshly allocated path to the file, an empty string, or NULL.
+ * Returning an empty string means that the search should be terminated.
  */
 static char *
-DirLookupAbs(CachedDir *dir, const char *name, const char *cp)
+DirLookupAbs(CachedDir *dir, const char *name, const char *base)
 {
 	const char *dnp;	/* pointer into dir->name */
 	const char *np;		/* pointer into name */
@@ -1037,10 +1008,10 @@ DirLookupAbs(CachedDir *dir, const char 
 	for (dnp = dir->name, np = name;
 	     *dnp != '\0' && *dnp == *np; dnp++, np++)
 		continue;
-	if (*dnp != '\0' || np != cp - 1)
+	if (*dnp != '\0' || np != base - 1)
 		return NULL;
 
-	if (!HashSet_Contains(&dir->files, cp)) {
+	if (!HashSet_Contains(&dir->files, base)) {
 		DEBUG0(DIR, "   must be here but isn't -- returning\n");
 		return bmake_strdup("");	/* to terminate the search */
 	}
@@ -1090,11 +1061,11 @@ FindFileRelative(SearchPath *path, bool 
 		if (dot != NULL) {
 			checkedDot = true;
 			if ((file = DirLookupSubdir(dot, name)) != NULL)
-				goto found;
+				goto done;
 		}
 		if (cur != NULL &&
 		    (file = DirLookupSubdir(cur, name)) != NULL)
-			goto found;
+			goto done;
 	}
 
 	for (ln = path->dirs.first; ln != NULL; ln = ln->next) {
@@ -1107,18 +1078,18 @@ FindFileRelative(SearchPath *path, bool 
 			checkedDot = true;
 		}
 		if ((file = DirLookupSubdir(dir, name)) != NULL)
-			goto found;
+			goto done;
 	}
 
 	if (seenDotLast) {
 		if (dot != NULL && !checkedDot) {
 			checkedDot = true;
 			if ((file = DirLookupSubdir(dot, name)) != NULL)
-				goto found;
+				goto done;
 		}
 		if (cur != NULL &&
 		    (file = DirLookupSubdir(cur, name)) != NULL)
-			goto found;
+			goto done;
 	}
 
 	if (checkedDot) {
@@ -1128,12 +1099,12 @@ FindFileRelative(SearchPath *path, bool 
 		 */
 		DEBUG0(DIR, "   Checked . already, returning NULL\n");
 		file = NULL;
-		goto found;
+		goto done;
 	}
 
 	return false;
 
-found:
+done:
 	*out_file = file;
 	return true;
 }
@@ -1145,16 +1116,6 @@ FindFileAbsolute(SearchPath *path, bool 
 	char *file;
 	SearchPathNode *ln;
 
-	/*
-	 * For absolute names, compare directory path prefix against
-	 * the the directory path of each member on the search path
-	 * for an exact match. If we have an exact match on any member
-	 * of the search path, use the cached contents of that member
-	 * to lookup the final file component. If that lookup fails we
-	 * can safely assume that the file does not exist at all.
-	 * This is signified by DirLookupAbs() returning an empty
-	 * string.
-	 */
 	DEBUG0(DIR, "   Trying exact path matches...\n");
 
 	if (!seenDotLast && cur != NULL &&
@@ -1187,13 +1148,6 @@ found:
 /*
  * Find the file with the given name along the given search path.
  *
- * If the file is found in a directory that is not on the path
- * already (either 'name' is absolute or it is a relative path
- * [ dir1/.../dirn/file ] which exists below one of the directories
- * already on the search path), its directory is added to the end
- * of the path, on the assumption that there will be more files in
- * that directory later on. Sometimes this is true. Sometimes not.
- *
  * Input:
  *	name		the file to find
  *	path		the directories to search, or NULL
@@ -1206,7 +1160,7 @@ Dir_FindFile(const char *name, SearchPat
 {
 	char *file;		/* the current filename to check */
 	bool seenDotLast = false; /* true if we should search dot last */
-	struct cached_stat cst;	/* Buffer for stat, if necessary */
+	struct cached_stat cst;
 	const char *trailing_dot = ".";
 	const char *base = str_basename(name);
 
@@ -1236,18 +1190,16 @@ Dir_FindFile(const char *name, SearchPat
 		SearchPathNode *ln;
 
 		/*
-		 * We look through all the directories on the path seeking one
+		 * Look through all the directories on the path seeking one
 		 * which contains the final component of the given name.  If
-		 * such a file is found, we concatenate the directory name
-		 * and the final component and return the resulting string.
-		 * If we don't find any such thing, we go on to phase two.
+		 * such a file is found, return its pathname.
+		 * If there is no such file, go on to phase two.
 		 *
-		 * No matter what, we always look for the file in the current
-		 * directory before anywhere else (unless we found the magic
-		 * DOTLAST path, in which case we search it last) and we *do
-		 * not* add the ./ to it if it exists.
+		 * No matter what, always look for the file in the current
+		 * directory before anywhere else (unless the path contains
+		 * the magic '.DOTLAST', in which case search it last).
 		 * This is so there are no conflicts between what the user
-		 * specifies (fish.c) and what pmake finds (./fish.c).
+		 * specifies (fish.c) and what make finds (./fish.c).
 		 */
 		if (!seenDotLast && (file = DirFindDot(name, base)) != NULL)
 			return file;
@@ -1264,30 +1216,14 @@ Dir_FindFile(const char *name, SearchPat
 			return file;
 	}
 
-	/*
-	 * We didn't find the file on any directory in the search path.
-	 * If the name doesn't contain a slash, that means it doesn't exist.
-	 * If it *does* contain a slash, however, there is still hope: it
-	 * could be in a subdirectory of one of the members of the search
-	 * path. (eg. /usr/include and sys/types.h. The above search would
-	 * fail to turn up types.h in /usr/include, but it *is* in
-	 * /usr/include/sys/types.h).
-	 * [ This no longer applies: If we find such a file, we assume there
-	 * will be more (what else can we assume?) and add all but the last
-	 * component of the resulting name onto the search path (at the
-	 * end).]
-	 * This phase is only performed if the file is *not* absolute.
-	 */
 	if (base == name) {
 		DEBUG0(DIR, "   failed.\n");
 		misses++;
 		return NULL;
 	}
 
-	if (*base == '\0') {
-		/* we were given a trailing "/" */
-		base = trailing_dot;
-	}
+	if (*base == '\0')
+		base = trailing_dot;	/* we were given a trailing "/" */
 
 	if (name[0] != '/') {
 		if (FindFileRelative(path, seenDotLast, name, &file))
@@ -1298,16 +1234,7 @@ Dir_FindFile(const char *name, SearchPat
 	}
 
 	/*
-	 * Didn't find it that way, either. Sigh. Phase 3. Add its directory
-	 * onto the search path in any case, just in case, then look for the
-	 * thing in the hash table. If we find it, grand. We return a new
-	 * copy of the name. Otherwise we sadly return a NULL pointer. Sigh.
-	 * Note that if the directory holding the file doesn't exist, this
-	 * will do an extra search of the final directory on the path. Unless
-	 * something weird happens, this search won't succeed and life will
-	 * be groovy.
-	 *
-	 * Sigh. We cannot add the directory onto the search path because
+	 * We cannot add the directory onto the search path because
 	 * of this amusing case:
 	 * $(INSTALLDIR)/$(FILE): $(FILE)
 	 *
@@ -1315,75 +1242,40 @@ Dir_FindFile(const char *name, SearchPat
 	 * When searching for $(FILE), we will find it in $(INSTALLDIR)
 	 * b/c we added it here. This is not good...
 	 */
-#if 0
-	{
-		CachedDir *dir;
-		char *prefix;
-
-		if (base == trailing_dot) {
-			base = strrchr(name, '/');
-			base++;
-		}
-		prefix = bmake_strsedup(name, base - 1);
-		(void)SearchPath_Add(path, prefix);
-		free(prefix);
-
-		bigmisses++;
-		if (path->last == NULL)
-			return NULL;
-
-		dir = path->last->datum;
-		if (HashSet_Contains(&dir->files, base))
-			return bmake_strdup(name);
-		return NULL;
-	}
-#else
+
 	DEBUG1(DIR, "   Looking for \"%s\" ...\n", name);
 
 	bigmisses++;
-	if (cached_stat(name, &cst) == 0) {
+	if (cached_stat(name, &cst) == 0)
 		return bmake_strdup(name);
-	}
 
 	DEBUG0(DIR, "   failed. Returning NULL\n");
 	return NULL;
-#endif
 }
 
 
 /*
- * Search for a path starting at a given directory and then working our way
- * up towards the root.
- *
- * Input:
- *	here		starting directory
- *	search_path	the relative path we are looking for
- *
- * Results:
- *	The found path, or NULL.
+ * Search for 'needle' starting at the directory 'here' and then working our
+ * way up towards the root directory. Return the allocated path, or NULL.
  */
 char *
-Dir_FindHereOrAbove(const char *here, const char *search_path)
+Dir_FindHereOrAbove(const char *here, const char *needle)
 {
 	struct cached_stat cst;
 	char *dirbase, *dirbase_end;
 	char *try, *try_end;
 
-	/* copy out our starting point */
 	dirbase = bmake_strdup(here);
 	dirbase_end = dirbase + strlen(dirbase);
 
-	/* loop until we determine a result */
 	for (;;) {
-
-		/* try and stat(2) it ... */
-		try = str_concat3(dirbase, "/", search_path);
+		try = str_concat3(dirbase, "/", needle);
 		if (cached_stat(try, &cst) != -1) {
-			/*
-			 * success!  if we found a file, chop off
-			 * the filename so we return a directory.
-			 */
 			if ((cst.cst_mode & S_IFMT) != S_IFDIR) {
+				/*
+				 * Chop off the filename, to return a
+				 * directory.
+				 */
 				try_end = try + strlen(try);
 				while (try_end > try && *try_end != '/')
 					try_end--;
@@ -1396,16 +1288,10 @@ Dir_FindHereOrAbove(const char *here, co
 		}
 		free(try);
 
-		/*
-		 * nope, we didn't find it.  if we used up dirbase we've
-		 * reached the root and failed.
-		 */
 		if (dirbase_end == dirbase)
 			break;	/* failed! */
 
-		/*
-		 * truncate dirbase from the end to move up a dir
-		 */
+		/* Truncate dirbase from the end to move up a dir. */
 		while (dirbase_end > dirbase && *dirbase_end != '/')
 			dirbase_end--;
 		*dirbase_end = '\0';	/* chop! */
@@ -1476,10 +1362,10 @@ ResolveFullName(GNode *gn)
 }
 
 /*
- * Search gn along dirSearchPath and store its modification time in gn->mtime.
- * If no file is found, store 0 instead.
+ * Search 'gn' along 'dirSearchPath' and store its modification time in
+ * 'gn->mtime'. If no file is found, store 0 instead.
  *
- * The found file is stored in gn->path, unless the node already had a path.
+ * The found file is stored in 'gn->path', unless the node already had a path.
  */
 void
 Dir_UpdateMTime(GNode *gn, bool forceRefresh)
@@ -1562,14 +1448,14 @@ CacheNewDir(const char *name, SearchPath
 }
 
 /*
- * Read the list of filenames in the directory and store the result
- * in openDirs.
+ * Read the list of filenames in the directory 'name' and store the result
+ * in 'openDirs'.
  *
- * If a path is given, append the directory to that path.
+ * If a search path is given, append the directory to that path.
  *
  * Input:
  *	path		The path to which the directory should be
- *			added, or NULL to only add the directory to openDirs
+ *			added, or NULL to only add the directory to openDirs.
  *	name		The name of the directory to add.
  *			The name is not normalized in any way.
  * Output:
@@ -1628,16 +1514,8 @@ Dir_CopyDirSearchPath(void)
 /*
  * Make a string by taking all the directories in the given search path and
  * preceding them by the given flag. Used by the suffix module to create
- * variables for compilers based on suffix search paths.
- *
- * Input:
- *	flag		flag which should precede each directory
- *	path		list of directories
- *
- * Results:
- *	The string mentioned above. Note that there is no space between the
- *	given flag and each directory. The empty string is returned if things
- *	don't go well.
+ * variables for compilers based on suffix search paths. Note that there is no
+ * space between the given flag and each directory.
  */
 char *
 SearchPath_ToFlags(SearchPath *path, const char *flag)
@@ -1709,7 +1587,6 @@ percentage(int num, int den)
 	return den != 0 ? num * 100 / den : 0;
 }
 
-/********** DEBUG INFO **********/
 void
 Dir_PrintDirectories(void)
 {

Reply via email to