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; } /*-