Module Name: src
Committed By: rillig
Date: Mon Nov 23 22:31:04 UTC 2020
Modified Files:
src/usr.bin/make: dir.c
Log Message:
make(1): extract ResolveFullName from Dir_UpdateMTime
To generate a diff of this commit:
cvs rdiff -u -r1.218 -r1.219 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.218 src/usr.bin/make/dir.c:1.219
--- src/usr.bin/make/dir.c:1.218 Mon Nov 23 22:14:54 2020
+++ src/usr.bin/make/dir.c Mon Nov 23 22:31:04 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: dir.c,v 1.218 2020/11/23 22:14:54 rillig Exp $ */
+/* $NetBSD: dir.c,v 1.219 2020/11/23 22:31:04 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -134,7 +134,7 @@
#include "job.h"
/* "@(#)dir.c 8.2 (Berkeley) 1/2/94" */
-MAKE_RCSID("$NetBSD: dir.c,v 1.218 2020/11/23 22:14:54 rillig Exp $");
+MAKE_RCSID("$NetBSD: dir.c,v 1.219 2020/11/23 22:31:04 rillig Exp $");
#define DIR_DEBUG0(text) DEBUG0(DIR, text)
#define DIR_DEBUG1(fmt, arg1) DEBUG1(DIR, fmt, arg1)
@@ -1291,25 +1291,10 @@ Dir_FindHereOrAbove(const char *here, co
return NULL;
}
-/* 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. */
-void
-Dir_UpdateMTime(GNode *gn, Boolean recheck)
+static char *
+ResolveFullName(GNode *gn)
{
char *fullName;
- struct cached_stat cst;
-
- if (gn->type & OP_ARCHV) {
- Arch_UpdateMTime(gn);
- return;
- }
-
- if (gn->type & OP_PHONY) {
- gn->mtime = 0;
- return;
- }
if (gn->path == NULL) {
if (gn->type & OP_NOPATH)
@@ -1354,6 +1339,33 @@ Dir_UpdateMTime(GNode *gn, Boolean reche
if (fullName == NULL)
fullName = bmake_strdup(gn->name);
+ /* XXX: Is every piece of memory freed as it should? */
+
+ return fullName;
+}
+
+/* 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. */
+void
+Dir_UpdateMTime(GNode *gn, Boolean recheck)
+{
+ char *fullName;
+ struct cached_stat cst;
+
+ if (gn->type & OP_ARCHV) {
+ Arch_UpdateMTime(gn);
+ return;
+ }
+
+ if (gn->type & OP_PHONY) {
+ gn->mtime = 0;
+ return;
+ }
+
+ fullName = ResolveFullName(gn);
+
if (cached_stats(fullName, &cst, recheck ? CST_UPDATE : CST_NONE) < 0) {
if (gn->type & OP_MEMBER) {
if (fullName != gn->path)
@@ -1367,6 +1379,7 @@ Dir_UpdateMTime(GNode *gn, Boolean reche
if (fullName != NULL && gn->path == NULL)
gn->path = fullName;
+ /* XXX: else free(fullName)? */
gn->mtime = cst.cst_mtime;
}