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): extract code to allocate a Src



details:   https://anonhg.NetBSD.org/src/rev/4598646f3a71
branches:  trunk
changeset: 956102:4598646f3a71
user:      rillig <rillig%NetBSD.org@localhost>
date:      Wed Oct 21 07:42:36 2020 +0000

description:
make(1): extract code to allocate a Src

Separating this code from the rest of the initialization makes it
obvious that there are inconsistencies in memory handling (owned vs.
shared pointers, reference counts).  It also forces a consistent order
of specifying the fields of a Src.

diffstat:

 usr.bin/make/suff.c |  73 +++++++++++++++++++++-------------------------------
 1 files changed, 30 insertions(+), 43 deletions(-)

diffs (132 lines):

diff -r 92c871922884 -r 4598646f3a71 usr.bin/make/suff.c
--- a/usr.bin/make/suff.c       Wed Oct 21 07:14:22 2020 +0000
+++ b/usr.bin/make/suff.c       Wed Oct 21 07:42:36 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: suff.c,v 1.208 2020/10/21 07:11:50 rillig Exp $        */
+/*     $NetBSD: suff.c,v 1.209 2020/10/21 07:42:36 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.208 2020/10/21 07:11:50 rillig Exp $");
+MAKE_RCSID("$NetBSD: suff.c,v 1.209 2020/10/21 07:42:36 rillig Exp $");
 
 #define SUFF_DEBUG0(text) DEBUG0(SUFF, text)
 #define SUFF_DEBUG1(fmt, arg1) DEBUG1(SUFF, fmt, arg1)
@@ -846,22 +846,33 @@
 }
 #endif
 
+static Src *
+SrcNew(char *name, char *pref, Suff *suff, Src *parent, GNode *gn)
+{
+    Src *src = bmake_malloc(sizeof *src);
+
+    src->file = name;
+    src->pref = pref;
+    src->suff = suff;
+    src->parent = parent;
+    src->node = gn;
+    src->children = 0;
+#ifdef DEBUG_SRC
+    src->cp = Lst_New();
+#endif
+
+    return src;
+}
+
 static void
 SuffAddSrc(Suff *suff, SrcList *srcList, Src *targ, char *srcName,
           const char *debug_tag)
 {
-    Src *s2 = bmake_malloc(sizeof(Src));
-    s2->file = srcName;
-    s2->pref = targ->pref;
-    s2->parent = targ;
-    s2->node = NULL;
-    s2->suff = suff;
+    Src *s2 = SrcNew(srcName, targ->pref, suff, targ, NULL);
     suff->refCount++;
-    s2->children = 0;
     targ->children++;
     Lst_Append(srcList, s2);
 #ifdef DEBUG_SRC
-    s2->cp = Lst_New();
     Lst_Append(targ->cp, s2);
     debug_printf("%s add %p %p to %p:", debug_tag, targ, s2, srcList);
     SrcList_PrintAddrs(srcList);
@@ -1091,17 +1102,10 @@
      * source node's name so Suff_FindDeps can free it
      * again (ick)), and return the new structure.
      */
-    ret = bmake_malloc(sizeof(Src));
-    ret->file = bmake_strdup(s->name);
-    ret->pref = targ->pref;
-    ret->suff = suff;
+    ret = SrcNew(bmake_strdup(s->name), targ->pref, suff, targ, s);
     suff->refCount++;
-    ret->parent = targ;
-    ret->node = s;
-    ret->children = 0;
     targ->children++;
 #ifdef DEBUG_SRC
-    ret->cp = Lst_New();
     debug_printf("3 add %p %p\n", targ, ret);
     Lst_Append(targ->cp, ret);
 #endif
@@ -1589,26 +1593,17 @@
                        SrcList *srcs, SrcList *targs)
 {
     SuffListNode *ln;
-    const char *eopref;
     Src *targ;
+    char *pref;
 
     for (ln = sufflist->first; ln != NULL; ln = ln->next) {
-       if (!SuffSuffIsSuffix(ln->datum, nameLen, name + nameLen))
+       Suff *suff = ln->datum;
+       if (!SuffSuffIsSuffix(suff, nameLen, name + nameLen))
            continue;
 
-       targ = bmake_malloc(sizeof(Src));
-       targ->file = bmake_strdup(gn->name);
-       targ->suff = ln->datum;
-       targ->suff->refCount++;
-       targ->node = gn;
-       targ->parent = NULL;
-       targ->children = 0;
-#ifdef DEBUG_SRC
-       targ->cp = Lst_New();
-#endif
-
-       eopref = name + nameLen - targ->suff->nameLen;
-       targ->pref = bmake_strsedup(name, eopref);
+       pref = bmake_strldup(name, (size_t)(nameLen - suff->nameLen));
+       targ = SrcNew(bmake_strdup(gn->name), pref, suff, NULL, gn);
+       suff->refCount++;
 
        /*
         * Add nodes from which the target can be made
@@ -1633,17 +1628,9 @@
 
     SUFF_DEBUG1("\tNo known suffix on %s. Using .NULL suffix\n", gn->name);
 
-    targ = bmake_malloc(sizeof *targ);
-    targ->file = bmake_strdup(gn->name);
-    targ->suff = suffNull;
+    targ = SrcNew(bmake_strdup(gn->name), bmake_strdup(sopref),
+                 suffNull, NULL, gn);
     targ->suff->refCount++;
-    targ->node = gn;
-    targ->parent = NULL;
-    targ->children = 0;
-    targ->pref = bmake_strdup(sopref);
-#ifdef DEBUG_SRC
-    targ->cp = Lst_New();
-#endif
 
     /*
      * Only use the default suffix rules if we don't have commands



Home | Main Index | Thread Index | Old Index