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;
 }

Reply via email to