Module Name:    src
Committed By:   rillig
Date:           Fri Jul  3 17:03:09 UTC 2020

Modified Files:
        src/usr.bin/make: hash.c hash.h var.c

Log Message:
make(1): add Hash_ForEach to avoid duplicate code


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/usr.bin/make/hash.c
cvs rdiff -u -r1.12 -r1.13 src/usr.bin/make/hash.h
cvs rdiff -u -r1.240 -r1.241 src/usr.bin/make/var.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/hash.c
diff -u src/usr.bin/make/hash.c:1.21 src/usr.bin/make/hash.c:1.22
--- src/usr.bin/make/hash.c:1.21	Fri Jul  3 08:02:55 2020
+++ src/usr.bin/make/hash.c	Fri Jul  3 17:03:09 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: hash.c,v 1.21 2020/07/03 08:02:55 rillig Exp $	*/
+/*	$NetBSD: hash.c,v 1.22 2020/07/03 17:03:09 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: hash.c,v 1.21 2020/07/03 08:02:55 rillig Exp $";
+static char rcsid[] = "$NetBSD: hash.c,v 1.22 2020/07/03 17:03:09 rillig Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)hash.c	8.1 (Berkeley) 6/6/93";
 #else
-__RCSID("$NetBSD: hash.c,v 1.21 2020/07/03 08:02:55 rillig Exp $");
+__RCSID("$NetBSD: hash.c,v 1.22 2020/07/03 17:03:09 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -464,3 +464,14 @@ RebuildTable(Hash_Table *t)
 	}
 	free(oldhp);
 }
+
+void Hash_ForEach(Hash_Table *t, void (*action)(void *, void *), void *data)
+{
+	Hash_Search search;
+	Hash_Entry *e;
+
+	for (e = Hash_EnumFirst(t, &search);
+	     e != NULL;
+	     e = Hash_EnumNext(&search))
+		action(Hash_GetValue(e), data);
+}

Index: src/usr.bin/make/hash.h
diff -u src/usr.bin/make/hash.h:1.12 src/usr.bin/make/hash.h:1.13
--- src/usr.bin/make/hash.h:1.12	Wed May 31 21:07:03 2017
+++ src/usr.bin/make/hash.h	Fri Jul  3 17:03:09 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: hash.h,v 1.12 2017/05/31 21:07:03 maya Exp $	*/
+/*	$NetBSD: hash.h,v 1.13 2020/07/03 17:03:09 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -145,5 +145,6 @@ Hash_Entry *Hash_CreateEntry(Hash_Table 
 void Hash_DeleteEntry(Hash_Table *, Hash_Entry *);
 Hash_Entry *Hash_EnumFirst(Hash_Table *, Hash_Search *);
 Hash_Entry *Hash_EnumNext(Hash_Search *);
+void Hash_ForEach(Hash_Table *, void (*)(void *, void *), void *);
 
 #endif /* _HASH_H */

Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.240 src/usr.bin/make/var.c:1.241
--- src/usr.bin/make/var.c:1.240	Fri Jul  3 17:00:47 2020
+++ src/usr.bin/make/var.c	Fri Jul  3 17:03:09 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.240 2020/07/03 17:00:47 rillig Exp $	*/
+/*	$NetBSD: var.c,v 1.241 2020/07/03 17:03:09 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.240 2020/07/03 17:00:47 rillig Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.241 2020/07/03 17:03:09 rillig Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)var.c	8.3 (Berkeley) 3/19/94";
 #else
-__RCSID("$NetBSD: var.c,v 1.240 2020/07/03 17:00:47 rillig Exp $");
+__RCSID("$NetBSD: var.c,v 1.241 2020/07/03 17:03:09 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -338,7 +338,6 @@ static char *VarModify(GNode *, Var_Pars
 static char *VarOrder(const char *, const char);
 static char *VarUniq(const char *);
 static int VarWordCompare(const void *, const void *);
-static void VarPrintVar(void *);
 
 #define BROPEN	'{'
 #define BRCLOSE	'}'
@@ -673,6 +672,13 @@ Var_Export1(const char *name, int flags)
     return 1;
 }
 
+static void
+Var_ExportVars_callback(void *entry, void *unused MAKE_ATTR_UNUSED)
+{
+	Var *var = entry;
+	Var_Export1(var->name, 0);
+}
+
 /*
  * This gets called from our children.
  */
@@ -680,9 +686,6 @@ void
 Var_ExportVars(void)
 {
     char tmp[BUFSIZ];
-    Hash_Entry          *var;
-    Hash_Search         state;
-    Var *v;
     char *val;
     int n;
 
@@ -699,15 +702,8 @@ Var_ExportVars(void)
 	return;
 
     if (VAR_EXPORTED_ALL == var_exportedVars) {
-	/*
-	 * Ouch! This is crazy...
-	 */
-	for (var = Hash_EnumFirst(&VAR_GLOBAL->context, &state);
-	     var != NULL;
-	     var = Hash_EnumNext(&state)) {
-	    v = (Var *)Hash_GetValue(var);
-	    Var_Export1(v->name, 0);
-	}
+	/* Ouch! This is crazy... */
+	Hash_ForEach(&VAR_GLOBAL->context, Var_ExportVars_callback, NULL);
 	return;
     }
     /*
@@ -4291,7 +4287,7 @@ Var_End(void)
 
 /****************** PRINT DEBUGGING INFO *****************/
 static void
-VarPrintVar(void *vp)
+VarPrintVar(void *vp, void *data MAKE_ATTR_UNUSED)
 {
     Var    *v = (Var *)vp;
     fprintf(debug_file, "%-16s = %s\n", v->name, Buf_GetAll(&v->val, NULL));
@@ -4306,12 +4302,5 @@ VarPrintVar(void *vp)
 void
 Var_Dump(GNode *ctxt)
 {
-    Hash_Search search;
-    Hash_Entry *h;
-
-    for (h = Hash_EnumFirst(&ctxt->context, &search);
-	 h != NULL;
-	 h = Hash_EnumNext(&search)) {
-	VarPrintVar(Hash_GetValue(h));
-    }
+    Hash_ForEach(&ctxt->context, VarPrintVar, NULL);
 }

Reply via email to