Deleted Added
full compact
1/* $OpenBSD: look.c,v 1.9 2002/02/16 21:27:48 millert Exp $ */
1/* $OpenBSD: look.c,v 1.10 2002/04/26 16:15:16 espie Exp $ */
2
3/*
4 * Copyright (c) 1989, 1993
5 * The Regents of the University of California. All rights reserved.
6 *
7 * This code is derived from software contributed to Berkeley by
8 * Ozan Yigit at York University.
9 *

--- 22 unchanged lines hidden (view full) ---

32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 * SUCH DAMAGE.
37 */
38
39#include <sys/cdefs.h>
40__SCCSID("@(#)look.c 8.1 (Berkeley) 6/6/93");
41__FBSDID("$FreeBSD: head/usr.bin/m4/look.c 95060 2002-04-19 17:26:21Z jmallett $");
40__SCCSID("@(#)look.c 8.1 (Berkeley) 6/6/93");
41__RCSID_SOURCE("$OpenBSD: look.c,v 1.10 2002/04/26 16:15:16 espie Exp $");
42__FBSDID("$FreeBSD: head/usr.bin/m4/look.c 95887 2002-05-01 21:37:29Z jmallett $");
43
44/*
45 * look.c
46 * Facility: m4 macro processor
47 * by: oz
48 */
49
50#include <sys/types.h>
51#include <stdio.h>
52#include <stdlib.h>
53#include <stddef.h>
54#include <string.h>
55#include "mdef.h"
56#include "stdd.h"
57#include "extern.h"
58
59static void freent(ndptr);
60
60unsigned
61hash(name)
62 const char *name;
61unsigned int
62hash(const char *name)
63{
64 unsigned int h = 0;
65 while (*name)
66 h = (h << 5) + h + *name++;
67 return (h);
68}
69
70/*
71 * find name in the hash table
72 */
73ndptr
74lookup(name)
75 const char *name;
74lookup(const char *name)
75{
76 ndptr p;
77 unsigned int h;
78
79 h = hash(name);
80 for (p = hashtab[h % HASHSIZE]; p != nil; p = p->nxtptr)
81 if (h == p->hv && STREQ(name, p->name))
82 break;
83 return (p);
84}
85
86/*
87 * hash and create an entry in the hash table.
88 * The new entry is added in front of a hash bucket.
89 */
90ndptr
92addent(name)
93 const char *name;
91addent(const char *name)
92{
93 unsigned int h;
94 ndptr p;
95
96 h = hash(name);
97 p = (ndptr) xalloc(sizeof(struct ndblock));
98 p->nxtptr = hashtab[h % HASHSIZE];
99 hashtab[h % HASHSIZE] = p;
100 p->name = xstrdup(name);
101 p->hv = h;
102 return p;
103}
104
105static void
108freent(p)
109 ndptr p;
106freent(ndptr p)
107{
108 free((char *) p->name);
109 if (p->defn != null)
110 free((char *) p->defn);
111 free((char *) p);
112}
113
114/*
115 * remove an entry from the hashtable
116 */
117void
121remhash(name, all)
122 const char *name;
123 int all;
118remhash(const char *name, int all)
119{
120 unsigned int h;
121 ndptr xp, tp, mp;
122
123 h = hash(name);
124 mp = hashtab[h % HASHSIZE];
125 tp = nil;
126 while (mp != nil) {

--- 20 unchanged lines hidden ---