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 */