Module Name:    src
Committed By:   rillig
Date:           Sat Nov 28 19:26:10 UTC 2020

Modified Files:
        src/usr.bin/make: arch.c lst.c lst.h

Log Message:
make(1): reduce pointer indirection for archives


To generate a diff of this commit:
cvs rdiff -u -r1.179 -r1.180 src/usr.bin/make/arch.c
cvs rdiff -u -r1.95 -r1.96 src/usr.bin/make/lst.c
cvs rdiff -u -r1.88 -r1.89 src/usr.bin/make/lst.h

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/arch.c
diff -u src/usr.bin/make/arch.c:1.179 src/usr.bin/make/arch.c:1.180
--- src/usr.bin/make/arch.c:1.179	Sat Nov 28 19:12:28 2020
+++ src/usr.bin/make/arch.c	Sat Nov 28 19:26:10 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: arch.c,v 1.179 2020/11/28 19:12:28 rillig Exp $	*/
+/*	$NetBSD: arch.c,v 1.180 2020/11/28 19:26:10 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -125,12 +125,12 @@
 #include "config.h"
 
 /*	"@(#)arch.c	8.2 (Berkeley) 1/2/94"	*/
-MAKE_RCSID("$NetBSD: arch.c,v 1.179 2020/11/28 19:12:28 rillig Exp $");
+MAKE_RCSID("$NetBSD: arch.c,v 1.180 2020/11/28 19:26:10 rillig Exp $");
 
 typedef struct List ArchList;
 typedef struct ListNode ArchListNode;
 
-static ArchList *archives;	/* The archives we've already examined */
+static ArchList archives;	/* The archives we've already examined */
 
 typedef struct Arch {
 	char *name;		/* Name of archive */
@@ -426,7 +426,7 @@ ArchStatMember(const char *archive, cons
 	if (lastSlash != NULL)
 		member = lastSlash + 1;
 
-	for (ln = archives->first; ln != NULL; ln = ln->next) {
+	for (ln = archives.first; ln != NULL; ln = ln->next) {
 		const Arch *a = ln->datum;
 		if (strcmp(a->name, archive) == 0)
 			break;
@@ -579,7 +579,7 @@ ArchStatMember(const char *archive, cons
 
 	fclose(arch);
 
-	Lst_Append(archives, ar);
+	Lst_Append(&archives, ar);
 
 	/*
 	 * Now that the archive has been read and cached, we can look into
@@ -1063,7 +1063,7 @@ Arch_LibOODate(GNode *gn)
 void
 Arch_Init(void)
 {
-	archives = Lst_New();
+	Lst_Init(&archives);
 }
 
 /* Clean up the archives module. */
@@ -1071,7 +1071,7 @@ void
 Arch_End(void)
 {
 #ifdef CLEANUP
-	Lst_Destroy(archives, ArchFree);
+	Lst_DoneCall(&archives, ArchFree);
 #endif
 }
 

Index: src/usr.bin/make/lst.c
diff -u src/usr.bin/make/lst.c:1.95 src/usr.bin/make/lst.c:1.96
--- src/usr.bin/make/lst.c:1.95	Sat Nov 28 18:55:52 2020
+++ src/usr.bin/make/lst.c	Sat Nov 28 19:26:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: lst.c,v 1.95 2020/11/28 18:55:52 rillig Exp $ */
+/* $NetBSD: lst.c,v 1.96 2020/11/28 19:26:10 rillig Exp $ */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -34,7 +34,7 @@
 
 #include "make.h"
 
-MAKE_RCSID("$NetBSD: lst.c,v 1.95 2020/11/28 18:55:52 rillig Exp $");
+MAKE_RCSID("$NetBSD: lst.c,v 1.96 2020/11/28 19:26:10 rillig Exp $");
 
 static ListNode *
 LstNodeNew(ListNode *prev, ListNode *next, void *datum)
@@ -68,6 +68,18 @@ Lst_Done(List *list)
 	}
 }
 
+void
+Lst_DoneCall(List *list, LstFreeProc freeProc)
+{
+	ListNode *ln, *next;
+
+	for (ln = list->first; ln != NULL; ln = next) {
+		next = ln->next;
+		freeProc(ln->datum);
+		free(ln);
+	}
+}
+
 /* Free a list and all its nodes. The node data are not freed though. */
 void
 Lst_Free(List *list)
@@ -82,14 +94,7 @@ Lst_Free(List *list)
 void
 Lst_Destroy(List *list, LstFreeProc freeProc)
 {
-	ListNode *ln, *next;
-
-	for (ln = list->first; ln != NULL; ln = next) {
-		next = ln->next;
-		freeProc(ln->datum);
-		free(ln);
-	}
-
+	Lst_DoneCall(list, freeProc);
 	free(list);
 }
 

Index: src/usr.bin/make/lst.h
diff -u src/usr.bin/make/lst.h:1.88 src/usr.bin/make/lst.h:1.89
--- src/usr.bin/make/lst.h:1.88	Sat Nov 28 18:55:52 2020
+++ src/usr.bin/make/lst.h	Sat Nov 28 19:26:10 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: lst.h,v 1.88 2020/11/28 18:55:52 rillig Exp $	*/
+/*	$NetBSD: lst.h,v 1.89 2020/11/28 19:26:10 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -111,6 +111,8 @@ typedef void LstFreeProc(void *);
 List *Lst_New(void);
 /* Free the list nodes, but not the list itself. */
 void Lst_Done(List *);
+/* Free the list nodes, freeing the node data using the given function. */
+void Lst_DoneCall(List *, LstFreeProc);
 /* Free the list, leaving the node data unmodified. */
 void Lst_Free(List *);
 /* Free the list, freeing the node data using the given function. */

Reply via email to