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): merge duplicate code in Hash_FindEntry...



details:   https://anonhg.NetBSD.org/src/rev/cf0e74b082e7
branches:  trunk
changeset: 955591:cf0e74b082e7
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sun Oct 04 18:16:09 2020 +0000

description:
make(1): merge duplicate code in Hash_FindEntry and Hash_CreateEntry

diffstat:

 usr.bin/make/hash.c |  70 +++++++++++++++++++++++-----------------------------
 1 files changed, 31 insertions(+), 39 deletions(-)

diffs (109 lines):

diff -r 4ac04e957916 -r cf0e74b082e7 usr.bin/make/hash.c
--- a/usr.bin/make/hash.c       Sun Oct 04 17:50:41 2020 +0000
+++ b/usr.bin/make/hash.c       Sun Oct 04 18:16:09 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: hash.c,v 1.40 2020/10/04 17:50:41 rillig Exp $ */
+/*     $NetBSD: hash.c,v 1.41 2020/10/04 18:16:09 rillig Exp $ */
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -79,7 +79,7 @@
 #include "make.h"
 
 /*     "@(#)hash.c     8.1 (Berkeley) 6/6/93"  */
-MAKE_RCSID("$NetBSD: hash.c,v 1.40 2020/10/04 17:50:41 rillig Exp $");
+MAKE_RCSID("$NetBSD: hash.c,v 1.41 2020/10/04 18:16:09 rillig Exp $");
 
 /*
  * The ratio of # entries to # buckets at which we rebuild the table to
@@ -100,6 +100,28 @@
        return h;
 }
 
+static Hash_Entry *
+HashTable_Find(Hash_Table *t, unsigned int h, const char *key)
+{
+       Hash_Entry *e;
+       int chainlen = 0;
+
+#ifdef DEBUG_HASH_LOOKUP
+       DEBUG4(HASH, "%s: %p h=%x key=%s\n", __func__, t, h, key);
+#endif
+
+       for (e = t->buckets[h & t->bucketsMask]; e != NULL; e = e->next) {
+               chainlen++;
+               if (e->namehash == h && strcmp(e->name, key) == 0)
+                       break;
+       }
+
+       if (chainlen > t->maxchain)
+               t->maxchain = chainlen;
+
+       return e;
+}
+
 /* Sets up the hash table. */
 void
 Hash_InitTable(Hash_Table *t)
@@ -152,23 +174,8 @@
 Hash_Entry *
 Hash_FindEntry(Hash_Table *t, const char *key)
 {
-       Hash_Entry *e;
-       unsigned h;
-       int chainlen;
-
-       h = hash(key, NULL);
-       chainlen = 0;
-#ifdef DEBUG_HASH_LOOKUP
-       DEBUG4(HASH, "%s: %p h=%x key=%s\n", __func__, t, h, key);
-#endif
-       for (e = t->buckets[h & t->bucketsMask]; e != NULL; e = e->next) {
-               chainlen++;
-               if (e->namehash == h && strcmp(e->name, key) == 0)
-                       break;
-       }
-       if (chainlen > t->maxchain)
-               t->maxchain = chainlen;
-       return e;
+       unsigned int h = hash(key, NULL);
+       return HashTable_Find(t, h, key);
 }
 
 void *
@@ -225,30 +232,15 @@
        Hash_Entry *e;
        unsigned h;
        size_t keylen;
-       int chainlen;
        struct Hash_Entry **hp;
 
-       /*
-        * Hash the key.  As a side effect, save the length (strlen) of the
-        * key in case we need to create the entry.
-        */
        h = hash(key, &keylen);
-       chainlen = 0;
-#ifdef DEBUG_HASH_LOOKUP
-       DEBUG4(HASH, "%s: %p h=%x key=%s\n", __func__, t, h, key);
-#endif
-       for (e = t->buckets[h & t->bucketsMask]; e != NULL; e = e->next) {
-               chainlen++;
-               if (e->namehash == h && strcmp(e->name, key) == 0) {
-                       if (newPtr != NULL)
-                               *newPtr = FALSE;
-                       break;
-               }
+       e = HashTable_Find(t, h, key);
+       if (e) {
+               if (newPtr != NULL)
+                       *newPtr = FALSE;
+               return e;
        }
-       if (chainlen > t->maxchain)
-               t->maxchain = chainlen;
-       if (e)
-               return e;
 
        /*
         * The desired entry isn't there.  Before allocating a new entry,



Home | Main Index | Thread Index | Old Index