Module Name:    src
Committed By:   rillig
Date:           Wed Oct 21 07:05:52 UTC 2020

Modified Files:
        src/usr.bin/make: suff.c

Log Message:
make(1): inline struct SuffSuffGetSuffixArgs in suffix search


To generate a diff of this commit:
cvs rdiff -u -r1.206 -r1.207 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/suff.c
diff -u src/usr.bin/make/suff.c:1.206 src/usr.bin/make/suff.c:1.207
--- src/usr.bin/make/suff.c:1.206	Wed Oct 21 06:46:21 2020
+++ src/usr.bin/make/suff.c	Wed Oct 21 07:05:52 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: suff.c,v 1.206 2020/10/21 06:46:21 rillig Exp $	*/
+/*	$NetBSD: suff.c,v 1.207 2020/10/21 07:05:52 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -129,7 +129,7 @@
 #include "dir.h"
 
 /*	"@(#)suff.c	8.4 (Berkeley) 3/21/94"	*/
-MAKE_RCSID("$NetBSD: suff.c,v 1.206 2020/10/21 06:46:21 rillig Exp $");
+MAKE_RCSID("$NetBSD: suff.c,v 1.207 2020/10/21 07:05:52 rillig Exp $");
 
 #define SUFF_DEBUG0(text) DEBUG0(SUFF, text)
 #define SUFF_DEBUG1(fmt, arg1) DEBUG1(SUFF, fmt, arg1)
@@ -234,45 +234,42 @@ SuffStrIsPrefix(const char *pref, const 
     return *pref ? NULL : str;
 }
 
-struct SuffSuffGetSuffixArgs {
-    size_t name_len;
-    char *name_end;
-};
-
 /* See if suff is a suffix of str.
  *
  * Input:
  *	s		possible suffix
- *	str		string to examine
+ *	nameLen		length of the string to examine
+ *	nameEnd		end of the string to examine
  *
  * Results:
  *	NULL if it ain't, pointer to the start of suffix in str if it is.
  */
 static char *
-SuffSuffGetSuffix(const Suff *s, const struct SuffSuffGetSuffixArgs *str)
+SuffSuffGetSuffix(const Suff *s, size_t nameLen, char *nameEnd)
 {
     char *p1;			/* Pointer into suffix name */
     char *p2;			/* Pointer into string being examined */
 
-    if (str->name_len < s->nameLen)
+    if (nameLen < s->nameLen)
 	return NULL;		/* this string is shorter than the suffix */
 
     p1 = s->name + s->nameLen;
-    p2 = str->name_end;
+    p2 = nameEnd;
 
     while (p1 >= s->name && *p1 == *p2) {
 	p1--;
 	p2--;
     }
 
+    /* XXX: s->name - 1 invokes undefined behavior */
     return p1 == s->name - 1 ? p2 + 1 : NULL;
 }
 
 /* Predicate form of SuffSuffGetSuffix, for Lst_Find. */
 static Boolean
-SuffSuffIsSuffix(const void *s, const void *sd)
+SuffSuffIsSuffix(const Suff *suff, size_t nameLen, char *nameEnd)
 {
-    return SuffSuffGetSuffix(s, sd) != NULL;
+    return SuffSuffGetSuffix(suff, nameLen, nameEnd) != NULL;
 }
 
 static Suff *
@@ -609,13 +606,14 @@ Suff_EndTransform(GNode *gn)
 static void
 SuffRebuildGraph(GNode *transform, Suff *s)
 {
+    char *name = transform->name;
+    size_t nameLen = strlen(name);
     char *cp;
-    struct SuffSuffGetSuffixArgs sd;
 
     /*
      * First see if it is a transformation from this suffix.
      */
-    cp = UNCONST(SuffStrIsPrefix(s->name, transform->name));
+    cp = UNCONST(SuffStrIsPrefix(s->name, name));
     if (cp != NULL) {
 	Suff *s2 = FindSuffByName(cp);
 	if (s2 != NULL) {
@@ -629,16 +627,14 @@ SuffRebuildGraph(GNode *transform, Suff 
     /*
      * Not from, maybe to?
      */
-    sd.name_len = strlen(transform->name);
-    sd.name_end = transform->name + sd.name_len;
-    cp = SuffSuffGetSuffix(s, &sd);
+    cp = SuffSuffGetSuffix(s, nameLen, name + nameLen);
     if (cp != NULL) {
 	Suff *s2;
 
 	/* Null-terminate the source suffix in order to find it. */
 	/* XXX: don't modify strings, not even temporarily */
 	cp[0] = '\0';
-	s2 = FindSuffByName(transform->name);
+	s2 = FindSuffByName(name);
 	cp[0] = s->name[0];		/* restore */
 
 	if (s2 != NULL) {
@@ -1339,11 +1335,12 @@ Suff_FindPath(GNode* gn)
     Suff *suff = gn->suffix;
 
     if (suff == NULL) {
-	struct SuffSuffGetSuffixArgs sd;   /* Search string data */
+        char *name = gn->name;
+	size_t nameLen = strlen(gn->name);
 	SuffListNode *ln;
-	sd.name_len = strlen(gn->name);
-	sd.name_end = gn->name + sd.name_len;
-	ln = Lst_Find(sufflist, SuffSuffIsSuffix, &sd);
+	for (ln = sufflist->first; ln != NULL; ln = ln->next)
+	    if (SuffSuffIsSuffix(ln->datum, nameLen, name + nameLen))
+		break;
 
 	SUFF_DEBUG1("Wildcard expanding \"%s\"...", gn->name);
 	if (ln != NULL)
@@ -1545,14 +1542,12 @@ SuffFindArchiveDeps(GNode *gn, SrcList *
 	 * through the entire list, we just look at suffixes to which the
 	 * member's suffix may be transformed...
 	 */
-	struct SuffSuffGetSuffixArgs sd;	/* Search string data */
+	size_t nameLen = (size_t)(eoarch - gn->name);
 
-	/*
-	 * Use first matching suffix...
-	 */
-	sd.name_len = (size_t)(eoarch - gn->name);
-	sd.name_end = eoarch;
-	ln = Lst_Find(ms->parents, SuffSuffIsSuffix, &sd);
+	/* Use first matching suffix... */
+	for (ln = ms->parents->first; ln != NULL; ln = ln->next)
+	    if (SuffSuffIsSuffix(ln->datum, nameLen, eoarch))
+		break;
 
 	if (ln != NULL) {
 	    /*
@@ -1590,16 +1585,15 @@ SuffFindArchiveDeps(GNode *gn, SrcList *
 }
 
 static void
-SuffFindNormalDepsKnown(const struct SuffSuffGetSuffixArgs *sd, GNode *gn,
-			const char *eoname, const char *sopref,
-			SrcList *srcs, SrcList *targs)
+SuffFindNormalDepsKnown(size_t nameLen, char *nameEnd, GNode *gn,
+			const char *sopref, SrcList *srcs, SrcList *targs)
 {
     SuffListNode *ln;
     const char *eopref;
     Src *targ;
 
     for (ln = sufflist->first; ln != NULL; ln = ln->next) {
-	if (!SuffSuffIsSuffix(ln->datum, sd))
+	if (!SuffSuffIsSuffix(ln->datum, nameLen, nameEnd))
 	    continue;
 
 	targ = bmake_malloc(sizeof(Src));
@@ -1613,7 +1607,7 @@ SuffFindNormalDepsKnown(const struct Suf
 	targ->cp = Lst_New();
 #endif
 
-	eopref = eoname - targ->suff->nameLen;
+	eopref = nameEnd - targ->suff->nameLen;
 	targ->pref = bmake_strsedup(sopref, eopref);
 
 	/*
@@ -1742,8 +1736,6 @@ SuffFindNormalDepsPath(GNode *gn, Src *t
 static void
 SuffFindNormalDeps(GNode *gn, SrcList *slst)
 {
-    char *eoname;		/* End of name */
-    char *sopref;		/* Start of prefix */
     SrcList *srcs;		/* List of sources at which to look */
     SrcList *targs;		/* List of targets to which things can be
 				 * transformed. They all have the same file,
@@ -1752,13 +1744,10 @@ SuffFindNormalDeps(GNode *gn, SrcList *s
     Src *src;			/* General Src pointer */
     char *pref;			/* Prefix to use */
     Src *targ;			/* General Src target pointer */
-    struct SuffSuffGetSuffixArgs sd; /* Search string data */
-
-
-    sd.name_len = strlen(gn->name);
-    sd.name_end = eoname = gn->name + sd.name_len;
 
-    sopref = gn->name;
+    size_t nameLen = strlen(gn->name);
+    char *eoname = gn->name + nameLen;
+    char *sopref = gn->name;
 
     /*
      * Begin at the beginning...
@@ -1789,7 +1778,7 @@ SuffFindNormalDeps(GNode *gn, SrcList *s
 
     if (!(gn->type & OP_PHONY)) {
 
-	SuffFindNormalDepsKnown(&sd, gn, eoname, sopref, srcs, targs);
+	SuffFindNormalDepsKnown(nameLen, eoname, gn, sopref, srcs, targs);
 
 	/* Handle target of unknown suffix... */
 	SuffFindNormalDepsUnknown(gn, sopref, srcs, targs);

Reply via email to