Module Name:    src
Committed By:   rillig
Date:           Wed Sep  2 04:19:52 UTC 2020

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

Log Message:
make(1): fix aliasing problem in cached_stat from the previous commit

When the struct stat was used for both calling the actual stat and for
returning the result, no copying was needed.  This also had the side
effect that for the first call of cached_stat, the returned struct stat
included all the fields properly filled in, and on later calls, these
fields were all zeroed out.

These two variables are separate now, thus the fields need to be copied
explicitly.  There are no existing unit tests for this, but ./build.sh
failed reliably.


To generate a diff of this commit:
cvs rdiff -u -r1.133 -r1.134 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.133 src/usr.bin/make/dir.c:1.134
--- src/usr.bin/make/dir.c:1.133	Wed Sep  2 04:08:54 2020
+++ src/usr.bin/make/dir.c	Wed Sep  2 04:19:52 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: dir.c,v 1.133 2020/09/02 04:08:54 rillig Exp $	*/
+/*	$NetBSD: dir.c,v 1.134 2020/09/02 04:19:52 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -70,14 +70,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: dir.c,v 1.133 2020/09/02 04:08:54 rillig Exp $";
+static char rcsid[] = "$NetBSD: dir.c,v 1.134 2020/09/02 04:19:52 rillig Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)dir.c	8.2 (Berkeley) 1/2/94";
 #else
-__RCSID("$NetBSD: dir.c,v 1.133 2020/09/02 04:08:54 rillig Exp $");
+__RCSID("$NetBSD: dir.c,v 1.134 2020/09/02 04:19:52 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -315,6 +315,9 @@ cached_stats(Hash_Table *htp, const char
     if (rc == -1)
 	return -1;
 
+    mst->mst_mode = sys_st.st_mode;
+    mst->mst_mtime = sys_st.st_mtime;
+
     if (sys_st.st_mtime == 0)
 	sys_st.st_mtime = 1;	/* avoid confusion with missing file */
 

Reply via email to