Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/make make(1): don't modify GNode name while rebuildi...



details:   https://anonhg.NetBSD.org/src/rev/89207f64a1e0
branches:  trunk
changeset: 956195:89207f64a1e0
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sat Oct 24 03:30:25 2020 +0000

description:
make(1): don't modify GNode name while rebuilding the suffix graph

diffstat:

 usr.bin/make/suff.c |  45 ++++++++++++++++++++++-----------------------
 1 files changed, 22 insertions(+), 23 deletions(-)

diffs (103 lines):

diff -r 390e9ddb506d -r 89207f64a1e0 usr.bin/make/suff.c
--- a/usr.bin/make/suff.c       Sat Oct 24 03:18:22 2020 +0000
+++ b/usr.bin/make/suff.c       Sat Oct 24 03:30:25 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: suff.c,v 1.220 2020/10/24 03:01:19 rillig Exp $        */
+/*     $NetBSD: suff.c,v 1.221 2020/10/24 03:30:25 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.220 2020/10/24 03:01:19 rillig Exp $");
+MAKE_RCSID("$NetBSD: suff.c,v 1.221 2020/10/24 03:30:25 rillig Exp $");
 
 #define SUFF_DEBUG0(text) DEBUG0(SUFF, text)
 #define SUFF_DEBUG1(fmt, arg1) DEBUG1(SUFF, fmt, arg1)
@@ -244,11 +244,11 @@
  * Results:
  *     NULL if it ain't, pointer to the start of suffix in str if it is.
  */
-static char *
-SuffSuffGetSuffix(const Suff *s, size_t nameLen, char *nameEnd)
+static const char *
+SuffSuffGetSuffix(const Suff *s, size_t nameLen, const char *nameEnd)
 {
-    char *p1;                  /* Pointer into suffix name */
-    char *p2;                  /* Pointer into string being examined */
+    const char *p1;            /* Pointer into suffix name */
+    const char *p2;            /* Pointer into string being examined */
 
     if (nameLen < s->nameLen)
        return NULL;            /* this string is shorter than the suffix */
@@ -273,18 +273,24 @@
 }
 
 static Suff *
-FindSuffByName(const char *name)
+FindSuffByNameLen(const char *name, size_t nameLen)
 {
     SuffListNode *ln;
 
     for (ln = sufflist->first; ln != NULL; ln = ln->next) {
        Suff *suff = ln->datum;
-       if (strcmp(suff->name, name) == 0)
+       if (suff->nameLen == nameLen && memcmp(suff->name, name, nameLen) == 0)
            return suff;
     }
     return NULL;
 }
 
+static Suff *
+FindSuffByName(const char *name)
+{
+    return FindSuffByNameLen(name, strlen(name));
+}
+
 static GNode *
 FindTransformByName(const char *name)
 {
@@ -608,17 +614,16 @@
 static void
 SuffRebuildGraph(GNode *transform, Suff *suff)
 {
-    char *name = transform->name;
+    const char *name = transform->name;
     size_t nameLen = strlen(name);
-    char *prefixName;
-    const char *suffixName;
+    const char *toName;
 
     /*
      * First see if it is a transformation from this suffix.
      */
-    suffixName = SuffStrIsPrefix(suff->name, name);
-    if (suffixName != NULL) {
-       Suff *to = FindSuffByName(suffixName);
+    toName = SuffStrIsPrefix(suff->name, name);
+    if (toName != NULL) {
+       Suff *to = FindSuffByName(toName);
        if (to != NULL) {
            /* Link in and return, since it can't be anything else. */
            SuffInsert(to->children, suff);
@@ -630,15 +635,9 @@
     /*
      * Not from, maybe to?
      */
-    prefixName = SuffSuffGetSuffix(suff, nameLen, name + nameLen);
-    if (prefixName != NULL) {
-       Suff *from;
-
-       /* Null-terminate the source suffix in order to find it. */
-       /* XXX: don't modify strings, not even temporarily */
-       prefixName[0] = '\0';
-       from = FindSuffByName(name);
-       prefixName[0] = suff->name[0];  /* restore */
+    toName = SuffSuffGetSuffix(suff, nameLen, name + nameLen);
+    if (toName != NULL) {
+       Suff *from = FindSuffByNameLen(name, (size_t)(toName - name));
 
        if (from != NULL) {
            /* establish the proper relationship */



Home | Main Index | Thread Index | Old Index