Module Name: src
Committed By: rillig
Date: Sat Sep 26 14:48:31 UTC 2020
Modified Files:
src/usr.bin/make: arch.c hash.c hash.h var.c
Log Message:
make(1): add Hash_FindValue, for direct access to hash table data
To generate a diff of this commit:
cvs rdiff -u -r1.121 -r1.122 src/usr.bin/make/arch.c
cvs rdiff -u -r1.32 -r1.33 src/usr.bin/make/hash.c
cvs rdiff -u -r1.23 -r1.24 src/usr.bin/make/hash.h
cvs rdiff -u -r1.541 -r1.542 src/usr.bin/make/var.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/arch.c
diff -u src/usr.bin/make/arch.c:1.121 src/usr.bin/make/arch.c:1.122
--- src/usr.bin/make/arch.c:1.121 Fri Sep 25 14:49:51 2020
+++ src/usr.bin/make/arch.c Sat Sep 26 14:48:31 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: arch.c,v 1.121 2020/09/25 14:49:51 rillig Exp $ */
+/* $NetBSD: arch.c,v 1.122 2020/09/26 14:48:31 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -133,7 +133,7 @@
#include "config.h"
/* "@(#)arch.c 8.2 (Berkeley) 1/2/94" */
-MAKE_RCSID("$NetBSD: arch.c,v 1.121 2020/09/25 14:49:51 rillig Exp $");
+MAKE_RCSID("$NetBSD: arch.c,v 1.122 2020/09/26 14:48:31 rillig Exp $");
#ifdef TARGET_MACHINE
#undef MAKE_MACHINE
@@ -466,7 +466,6 @@ ArchStatMember(const char *archive, cons
char magic[SARMAG];
ArchListNode *ln;
Arch *ar; /* Archive descriptor */
- Hash_Entry *he; /* Entry containing member's description */
struct ar_hdr arh; /* archive-member header for reading archive */
char memName[MAXPATHLEN+1];
/* Current member name while hashing. */
@@ -489,13 +488,14 @@ ArchStatMember(const char *archive, cons
}
if (ln != NULL) {
- ar = LstNode_Datum(ln);
+ struct ar_hdr *hdr;
- he = Hash_FindEntry(&ar->members, member);
+ ar = LstNode_Datum(ln);
+ hdr = Hash_FindValue(&ar->members, member);
+ if (hdr != NULL)
+ return hdr;
- if (he != NULL) {
- return (struct ar_hdr *)Hash_GetValue(he);
- } else {
+ {
/* Try truncated name */
char copy[AR_MAX_NAME_LEN+1];
size_t len = strlen(member);
@@ -504,9 +504,8 @@ ArchStatMember(const char *archive, cons
len = AR_MAX_NAME_LEN;
snprintf(copy, sizeof copy, "%s", member);
}
- if ((he = Hash_FindEntry(&ar->members, copy)) != NULL)
- return (struct ar_hdr *)Hash_GetValue(he);
- return NULL;
+ hdr = Hash_FindValue(&ar->members, copy);
+ return hdr;
}
}
@@ -628,9 +627,12 @@ ArchStatMember(const char *archive, cons
}
#endif
- he = Hash_CreateEntry(&ar->members, memName, NULL);
- Hash_SetValue(he, bmake_malloc(sizeof(struct ar_hdr)));
- memcpy(Hash_GetValue(he), &arh, sizeof(struct ar_hdr));
+ {
+ Hash_Entry *he;
+ he = Hash_CreateEntry(&ar->members, memName, NULL);
+ Hash_SetValue(he, bmake_malloc(sizeof(struct ar_hdr)));
+ memcpy(Hash_GetValue(he), &arh, sizeof(struct ar_hdr));
+ }
}
if (fseek(arch, ((long)size + 1) & ~1, SEEK_CUR) != 0)
goto badarch;
@@ -644,13 +646,7 @@ ArchStatMember(const char *archive, cons
* Now that the archive has been read and cached, we can look into
* the hash table to find the desired member's header.
*/
- he = Hash_FindEntry(&ar->members, member);
-
- if (he != NULL) {
- return (struct ar_hdr *)Hash_GetValue(he);
- } else {
- return NULL;
- }
+ return Hash_FindValue(&ar->members, member);
badarch:
fclose(arch);
Index: src/usr.bin/make/hash.c
diff -u src/usr.bin/make/hash.c:1.32 src/usr.bin/make/hash.c:1.33
--- src/usr.bin/make/hash.c:1.32 Sun Sep 13 15:15:51 2020
+++ src/usr.bin/make/hash.c Sat Sep 26 14:48:31 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: hash.c,v 1.32 2020/09/13 15:15:51 rillig Exp $ */
+/* $NetBSD: hash.c,v 1.33 2020/09/26 14:48:31 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.32 2020/09/13 15:15:51 rillig Exp $");
+MAKE_RCSID("$NetBSD: hash.c,v 1.33 2020/09/26 14:48:31 rillig Exp $");
/*
* Forward references to local procedures that are used before they're
@@ -188,6 +188,13 @@ Hash_FindEntry(Hash_Table *t, const char
return e;
}
+void *
+Hash_FindValue(Hash_Table *t, const char *key)
+{
+ Hash_Entry *he = Hash_FindEntry(t, key);
+ return he != NULL ? he->value : NULL;
+}
+
/* Searches the hash table for an entry corresponding to the key.
* If no entry is found, then one is created.
*
Index: src/usr.bin/make/hash.h
diff -u src/usr.bin/make/hash.h:1.23 src/usr.bin/make/hash.h:1.24
--- src/usr.bin/make/hash.h:1.23 Sun Sep 13 15:27:25 2020
+++ src/usr.bin/make/hash.h Sat Sep 26 14:48:31 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: hash.h,v 1.23 2020/09/13 15:27:25 rillig Exp $ */
+/* $NetBSD: hash.h,v 1.24 2020/09/26 14:48:31 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -121,6 +121,7 @@ Hash_SetValue(Hash_Entry *h, void *datum
void Hash_InitTable(Hash_Table *);
void Hash_DeleteTable(Hash_Table *);
Hash_Entry *Hash_FindEntry(Hash_Table *, const char *);
+void *Hash_FindValue(Hash_Table *, const char *);
Hash_Entry *Hash_CreateEntry(Hash_Table *, const char *, Boolean *);
void Hash_DeleteEntry(Hash_Table *, Hash_Entry *);
Hash_Entry *Hash_EnumFirst(Hash_Table *, Hash_Search *);
Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.541 src/usr.bin/make/var.c:1.542
--- src/usr.bin/make/var.c:1.541 Fri Sep 25 15:54:51 2020
+++ src/usr.bin/make/var.c Sat Sep 26 14:48:31 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.541 2020/09/25 15:54:51 rillig Exp $ */
+/* $NetBSD: var.c,v 1.542 2020/09/26 14:48:31 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -121,7 +121,7 @@
#include "metachar.h"
/* "@(#)var.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.541 2020/09/25 15:54:51 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.542 2020/09/26 14:48:31 rillig Exp $");
#define VAR_DEBUG_IF(cond, fmt, ...) \
if (!(DEBUG(VAR) && (cond))) \
@@ -277,7 +277,7 @@ typedef enum {
static Var *
VarFind(const char *name, GNode *ctxt, VarFindFlags flags)
{
- Hash_Entry *var;
+ Var *var;
/*
* If the variable name begins with a '.', it could very well be one of
@@ -322,7 +322,7 @@ VarFind(const char *name, GNode *ctxt, V
}
}
-#ifdef notyet
+#if 0
/* for compatibility with gmake */
if (name[0] == '^' && name[1] == '\0')
name = ALLSRC;
@@ -333,18 +333,18 @@ VarFind(const char *name, GNode *ctxt, V
* look for it in VAR_CMD, VAR_GLOBAL and the environment, in that order,
* depending on the FIND_* flags in 'flags'
*/
- var = Hash_FindEntry(&ctxt->context, name);
+ var = Hash_FindValue(&ctxt->context, name);
if (var == NULL && (flags & FIND_CMD) && ctxt != VAR_CMD)
- var = Hash_FindEntry(&VAR_CMD->context, name);
+ var = Hash_FindValue(&VAR_CMD->context, name);
if (!checkEnvFirst && var == NULL && (flags & FIND_GLOBAL) &&
ctxt != VAR_GLOBAL)
{
- var = Hash_FindEntry(&VAR_GLOBAL->context, name);
+ var = Hash_FindValue(&VAR_GLOBAL->context, name);
if (var == NULL && ctxt != VAR_INTERNAL) {
/* VAR_INTERNAL is subordinate to VAR_GLOBAL */
- var = Hash_FindEntry(&VAR_INTERNAL->context, name);
+ var = Hash_FindValue(&VAR_INTERNAL->context, name);
}
}
@@ -365,22 +365,16 @@ VarFind(const char *name, GNode *ctxt, V
}
if (checkEnvFirst && (flags & FIND_GLOBAL) && ctxt != VAR_GLOBAL) {
- var = Hash_FindEntry(&VAR_GLOBAL->context, name);
+ var = Hash_FindValue(&VAR_GLOBAL->context, name);
if (var == NULL && ctxt != VAR_INTERNAL)
- var = Hash_FindEntry(&VAR_INTERNAL->context, name);
- if (var == NULL)
- return NULL;
- else
- return (Var *)Hash_GetValue(var);
+ var = Hash_FindValue(&VAR_INTERNAL->context, name);
+ return var;
}
return NULL;
}
- if (var == NULL)
- return NULL;
- else
- return (Var *)Hash_GetValue(var);
+ return var;
}
/*-