Module Name:    src
Committed By:   rillig
Date:           Sat Aug 22 15:43:32 UTC 2020

Modified Files:
        src/usr.bin/make: compat.c dir.c job.c lst.c lst.h make.c suff.c

Log Message:
make(1): require argument of Lst_Member to be non-null

Since the lists don't contain null pointers, it doesn't make sense to
search for a null pointer.  All calls but one already had obviously
non-null arguments.  The one remaining call using targ->suff has been
guarded for now.

The code for Lst_Member became much simpler than before.  Partly because
the old code had an extra condition for circular lists, which are not
used by make.


To generate a diff of this commit:
cvs rdiff -u -r1.123 -r1.124 src/usr.bin/make/compat.c
cvs rdiff -u -r1.103 -r1.104 src/usr.bin/make/dir.c
cvs rdiff -u -r1.211 -r1.212 src/usr.bin/make/job.c
cvs rdiff -u -r1.28 -r1.29 src/usr.bin/make/lst.c
cvs rdiff -u -r1.34 -r1.35 src/usr.bin/make/lst.h
cvs rdiff -u -r1.117 -r1.118 src/usr.bin/make/make.c
cvs rdiff -u -r1.106 -r1.107 src/usr.bin/make/suff.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/compat.c
diff -u src/usr.bin/make/compat.c:1.123 src/usr.bin/make/compat.c:1.124
--- src/usr.bin/make/compat.c:1.123	Sat Aug 22 14:39:12 2020
+++ src/usr.bin/make/compat.c	Sat Aug 22 15:43:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat.c,v 1.123 2020/08/22 14:39:12 rillig Exp $	*/
+/*	$NetBSD: compat.c,v 1.124 2020/08/22 15:43:32 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: compat.c,v 1.123 2020/08/22 14:39:12 rillig Exp $";
+static char rcsid[] = "$NetBSD: compat.c,v 1.124 2020/08/22 15:43:32 rillig Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)compat.c	8.2 (Berkeley) 3/19/94";
 #else
-__RCSID("$NetBSD: compat.c,v 1.123 2020/08/22 14:39:12 rillig Exp $");
+__RCSID("$NetBSD: compat.c,v 1.124 2020/08/22 15:43:32 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -232,7 +232,7 @@ CompatRunCommand(void *cmdp, void *gnp)
     errCheck = !(gn->type & OP_IGNORE);
     doIt = FALSE;
 
-    cmdNode = Lst_Member(gn->commands, cmd);
+    cmdNode = Lst_MemberS(gn->commands, cmd);
     cmdStart = Var_Subst(cmd, gn, VARE_WANTRES);
 
     /*
@@ -538,7 +538,7 @@ Compat_Make(void *gnp, void *pgnp)
 	    goto cohorts;
 	}
 
-	if (Lst_Member(gn->iParents, pgn) != NULL) {
+	if (Lst_MemberS(gn->iParents, pgn) != NULL) {
 	    char *p1;
 	    Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn);
 	    bmake_free(p1);
@@ -642,7 +642,7 @@ Compat_Make(void *gnp, void *pgnp)
 	 */
 	pgn->flags &= ~REMAKE;
     } else {
-	if (Lst_Member(gn->iParents, pgn) != NULL) {
+	if (Lst_MemberS(gn->iParents, pgn) != NULL) {
 	    char *p1;
 	    Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn);
 	    bmake_free(p1);

Index: src/usr.bin/make/dir.c
diff -u src/usr.bin/make/dir.c:1.103 src/usr.bin/make/dir.c:1.104
--- src/usr.bin/make/dir.c:1.103	Sat Aug 22 15:17:09 2020
+++ src/usr.bin/make/dir.c	Sat Aug 22 15:43:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: dir.c,v 1.103 2020/08/22 15:17:09 rillig Exp $	*/
+/*	$NetBSD: dir.c,v 1.104 2020/08/22 15:43:32 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.103 2020/08/22 15:17:09 rillig Exp $";
+static char rcsid[] = "$NetBSD: dir.c,v 1.104 2020/08/22 15:43:32 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.103 2020/08/22 15:17:09 rillig Exp $");
+__RCSID("$NetBSD: dir.c,v 1.104 2020/08/22 15:43:32 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -417,7 +417,7 @@ Dir_InitDot(void)
 	LstNode ln;
 
 	/* Remove old entry from openDirectories, but do not destroy. */
-	ln = Lst_Member(openDirectories, dot);
+	ln = Lst_MemberS(openDirectories, dot);
 	Lst_RemoveS(openDirectories, ln);
     }
 
@@ -1574,7 +1574,7 @@ Dir_AddDir(Lst path, const char *name)
 	ln = Lst_Find(openDirectories, name, DirFindName);
     if (ln != NULL) {
 	p = Lst_DatumS(ln);
-	if (path && Lst_Member(path, p) == NULL) {
+	if (path && Lst_MemberS(path, p) == NULL) {
 	    p->refCount += 1;
 	    Lst_AppendS(path, p);
 	}
@@ -1702,7 +1702,7 @@ Dir_Destroy(void *pp)
     if (p->refCount == 0) {
 	LstNode ln;
 
-	ln = Lst_Member(openDirectories, p);
+	ln = Lst_MemberS(openDirectories, p);
 	Lst_RemoveS(openDirectories, ln);
 
 	Hash_DeleteTable(&p->files);
@@ -1764,7 +1764,7 @@ Dir_Concat(Lst path1, Lst path2)
 
     for (ln = Lst_First(path2); ln != NULL; ln = Lst_Succ(ln)) {
 	p = Lst_DatumS(ln);
-	if (Lst_Member(path1, p) == NULL) {
+	if (Lst_MemberS(path1, p) == NULL) {
 	    p->refCount += 1;
 	    Lst_AppendS(path1, p);
 	}

Index: src/usr.bin/make/job.c
diff -u src/usr.bin/make/job.c:1.211 src/usr.bin/make/job.c:1.212
--- src/usr.bin/make/job.c:1.211	Sat Aug 22 13:28:20 2020
+++ src/usr.bin/make/job.c	Sat Aug 22 15:43:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: job.c,v 1.211 2020/08/22 13:28:20 rillig Exp $	*/
+/*	$NetBSD: job.c,v 1.212 2020/08/22 15:43:32 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: job.c,v 1.211 2020/08/22 13:28:20 rillig Exp $";
+static char rcsid[] = "$NetBSD: job.c,v 1.212 2020/08/22 15:43:32 rillig Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)job.c	8.2 (Berkeley) 3/19/94";
 #else
-__RCSID("$NetBSD: job.c,v 1.211 2020/08/22 13:28:20 rillig Exp $");
+__RCSID("$NetBSD: job.c,v 1.212 2020/08/22 15:43:32 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -714,8 +714,8 @@ JobPrintCommand(void *cmdp, void *jobp)
     if (strcmp(cmd, "...") == 0) {
 	job->node->type |= OP_SAVE_CMDS;
 	if ((job->flags & JOB_IGNDOTS) == 0) {
-	    job->tailCmds = Lst_Succ(Lst_Member(job->node->commands,
-						cmd));
+	    LstNode dotsNode = Lst_MemberS(job->node->commands, cmd);
+	    job->tailCmds = Lst_Succ(dotsNode);
 	    return 1;
 	}
 	return 0;

Index: src/usr.bin/make/lst.c
diff -u src/usr.bin/make/lst.c:1.28 src/usr.bin/make/lst.c:1.29
--- src/usr.bin/make/lst.c:1.28	Sat Aug 22 15:17:09 2020
+++ src/usr.bin/make/lst.c	Sat Aug 22 15:43:32 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: lst.c,v 1.28 2020/08/22 15:17:09 rillig Exp $ */
+/* $NetBSD: lst.c,v 1.29 2020/08/22 15:43:32 rillig Exp $ */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -37,11 +37,11 @@
 #include "make.h"
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: lst.c,v 1.28 2020/08/22 15:17:09 rillig Exp $";
+static char rcsid[] = "$NetBSD: lst.c,v 1.29 2020/08/22 15:43:32 rillig Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: lst.c,v 1.28 2020/08/22 15:17:09 rillig Exp $");
+__RCSID("$NetBSD: lst.c,v 1.29 2020/08/22 15:43:32 rillig Exp $");
 #endif /* not lint */
 #endif
 
@@ -519,24 +519,18 @@ Lst_FindFrom(Lst list, LstNode node, con
 
 /* Return the first node that contains the given datum, or NULL. */
 LstNode
-Lst_Member(Lst list, void *datum)
+Lst_MemberS(Lst list, void *datum)
 {
     LstNode node;
 
-    if (list == NULL) {
-	return NULL;
-    }
-    node = list->first;
-    if (node == NULL) {
-	return NULL;
-    }
+    assert(LstIsValid(list));
+    assert(datum != NULL);
 
-    do {
+    for (node = list->first; node != NULL; node = node->next) {
 	if (node->datum == datum) {
 	    return node;
 	}
-	node = node->next;
-    } while (node != NULL && node != list->first);
+    }
 
     return NULL;
 }

Index: src/usr.bin/make/lst.h
diff -u src/usr.bin/make/lst.h:1.34 src/usr.bin/make/lst.h:1.35
--- src/usr.bin/make/lst.h:1.34	Sat Aug 22 15:17:09 2020
+++ src/usr.bin/make/lst.h	Sat Aug 22 15:43:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: lst.h,v 1.34 2020/08/22 15:17:09 rillig Exp $	*/
+/*	$NetBSD: lst.h,v 1.35 2020/08/22 15:43:32 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -155,7 +155,7 @@ LstNode		Lst_FindFrom(Lst, LstNode, cons
  * See if the given datum is on the list. Returns the LstNode containing
  * the datum
  */
-LstNode		Lst_Member(Lst, void *);
+LstNode		Lst_MemberS(Lst, void *);
 /* Apply a function to all elements of a lst */
 int		Lst_ForEach(Lst, int (*)(void *, void *), void *);
 /* Apply a function to all elements of a lst starting from a certain point. */

Index: src/usr.bin/make/make.c
diff -u src/usr.bin/make/make.c:1.117 src/usr.bin/make/make.c:1.118
--- src/usr.bin/make/make.c:1.117	Sat Aug 22 15:17:09 2020
+++ src/usr.bin/make/make.c	Sat Aug 22 15:43:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: make.c,v 1.117 2020/08/22 15:17:09 rillig Exp $	*/
+/*	$NetBSD: make.c,v 1.118 2020/08/22 15:43:32 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: make.c,v 1.117 2020/08/22 15:17:09 rillig Exp $";
+static char rcsid[] = "$NetBSD: make.c,v 1.118 2020/08/22 15:43:32 rillig Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)make.c	8.1 (Berkeley) 6/6/93";
 #else
-__RCSID("$NetBSD: make.c,v 1.117 2020/08/22 15:17:09 rillig Exp $");
+__RCSID("$NetBSD: make.c,v 1.118 2020/08/22 15:43:32 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -525,7 +525,7 @@ MakeHandleUse(void *cgnp, void *pgnp)
      * children the parent has. This is used by Make_Run to decide
      * whether to queue the parent or examine its children...
      */
-    if ((ln = Lst_Member(pgn->children, cgn)) != NULL) {
+    if ((ln = Lst_MemberS(pgn->children, cgn)) != NULL) {
 	Lst_RemoveS(pgn->children, ln);
 	pgn->unmade--;
     }

Index: src/usr.bin/make/suff.c
diff -u src/usr.bin/make/suff.c:1.106 src/usr.bin/make/suff.c:1.107
--- src/usr.bin/make/suff.c:1.106	Sat Aug 22 15:17:09 2020
+++ src/usr.bin/make/suff.c	Sat Aug 22 15:43:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: suff.c,v 1.106 2020/08/22 15:17:09 rillig Exp $	*/
+/*	$NetBSD: suff.c,v 1.107 2020/08/22 15:43:32 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: suff.c,v 1.106 2020/08/22 15:17:09 rillig Exp $";
+static char rcsid[] = "$NetBSD: suff.c,v 1.107 2020/08/22 15:43:32 rillig Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)suff.c	8.4 (Berkeley) 3/21/94";
 #else
-__RCSID("$NetBSD: suff.c,v 1.106 2020/08/22 15:17:09 rillig Exp $");
+__RCSID("$NetBSD: suff.c,v 1.107 2020/08/22 15:43:32 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -407,7 +407,7 @@ SuffUnRef(void *lp, void *sp)
 {
     Lst l = (Lst) lp;
 
-    LstNode ln = Lst_Member(l, sp);
+    LstNode ln = Lst_MemberS(l, sp);
     if (ln != NULL) {
 	Lst_RemoveS(l, ln);
 	((Suff *)sp)->refCount--;
@@ -1303,7 +1303,7 @@ SuffRemoveSrc(Lst l)
 		free(s->pref);
 	    else {
 #ifdef DEBUG_SRC
-		LstNode ln2 = Lst_Member(s->parent->cp, s);
+		LstNode ln2 = Lst_MemberS(s->parent->cp, s);
 		if (ln2 != NULL)
 		    Lst_RemoveS(s->parent->cp, ln2);
 #endif
@@ -1474,7 +1474,9 @@ SuffFindCmds(Src *targ, Lst slst)
 	 */
 	suff = Lst_DatumS(ln);
 
-	if (Lst_Member(suff->parents, targ->suff) != NULL)
+	/* XXX: Can targ->suff be NULL here? */
+	if (targ->suff != NULL &&
+	    Lst_MemberS(suff->parents, targ->suff) != NULL)
 	    break;
     }
 
@@ -1669,7 +1671,7 @@ SuffExpandChildren(LstNode cln, GNode *p
      */
     pgn->unmade--;
     Lst_RemoveS(pgn->children, cln);
-    Lst_RemoveS(cgn->parents, Lst_Member(cgn->parents, pgn));
+    Lst_RemoveS(cgn->parents, Lst_MemberS(cgn->parents, pgn));
 }
 
 static void
@@ -1721,7 +1723,7 @@ SuffExpandWildcards(LstNode cln, GNode *
      */
     pgn->unmade--;
     Lst_RemoveS(pgn->children, cln);
-    Lst_RemoveS(cgn->parents, Lst_Member(cgn->parents, pgn));
+    Lst_RemoveS(cgn->parents, Lst_MemberS(cgn->parents, pgn));
 }
 
 /*-
@@ -2311,7 +2313,7 @@ sfnd_abort:
 	     * up to, but not including, the parent node.
 	     */
 	    while (bottom && bottom->parent != NULL) {
-		if (Lst_Member(slst, bottom) == NULL) {
+		if (Lst_MemberS(slst, bottom) == NULL) {
 		    Lst_AppendS(slst, bottom);
 		}
 		bottom = bottom->parent;
@@ -2387,7 +2389,7 @@ sfnd_abort:
      */
 sfnd_return:
     if (bottom)
-	if (Lst_Member(slst, bottom) == NULL)
+	if (Lst_MemberS(slst, bottom) == NULL)
 	    Lst_AppendS(slst, bottom);
 
     while (SuffRemoveSrc(srcs) || SuffRemoveSrc(targs))

Reply via email to