OpenCoverage

hashlib.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/bash/src/hashlib.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* hashlib.c -- functions to manage and access hash tables for bash. */-
2-
3/* Copyright (C) 1987,1989,1991,1995,1998,2001,2003,2005,2006,2008,2009 Free Software Foundation, Inc.-
4-
5 This file is part of GNU Bash, the Bourne Again SHell.-
6-
7 Bash is free software: you can redistribute it and/or modify-
8 it under the terms of the GNU General Public License as published by-
9 the Free Software Foundation, either version 3 of the License, or-
10 (at your option) any later version.-
11-
12 Bash is distributed in the hope that it will be useful,-
13 but WITHOUT ANY WARRANTY; without even the implied warranty of-
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
15 GNU General Public License for more details.-
16-
17 You should have received a copy of the GNU General Public License-
18 along with Bash. If not, see <http://www.gnu.org/licenses/>.-
19*/-
20-
21#include <config.h>-
22-
23#include "bashansi.h"-
24-
25#if defined (HAVE_UNISTD_H)-
26# ifdef _MINIX-
27# include <sys/types.h>-
28# endif-
29# include <unistd.h>-
30#endif-
31-
32#include <stdio.h>-
33-
34#include "shell.h"-
35#include "hashlib.h"-
36-
37/* Rely on properties of unsigned division (unsigned/int -> unsigned) and-
38 don't discard the upper 32 bits of the value, if present. */-
39#define HASH_BUCKET(s, t, h) (((h) = hash_string (s)) & ((t)->nbuckets - 1))-
40-
41static BUCKET_CONTENTS *copy_bucket_array __P((BUCKET_CONTENTS *, sh_string_func_t *));-
42-
43/* Make a new hash table with BUCKETS number of buckets. Initialize-
44 each slot in the table to NULL. */-
45HASH_TABLE *-
46hash_create (buckets)-
47 int buckets;-
48{-
49 HASH_TABLE *new_table;-
50 register int i;-
51-
52 new_table = (HASH_TABLE *)xmalloc (sizeof (HASH_TABLE));-
53 if (buckets == 0)
buckets == 0Description
TRUEevaluated 11010 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 20047 times by 1 test
Evaluated by:
  • Self test
11010-20047
54 buckets = DEFAULT_HASH_BUCKETS;
executed 11010 times by 1 test: buckets = 128;
Executed by:
  • Self test
11010
55-
56 new_table->bucket_array =-
57 (BUCKET_CONTENTS **)xmalloc (buckets * sizeof (BUCKET_CONTENTS *));-
58 new_table->nbuckets = buckets;-
59 new_table->nentries = 0;-
60-
61 for (i = 0; i < buckets; i++)
i < bucketsDescription
TRUEevaluated 12654064 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 31057 times by 1 test
Evaluated by:
  • Self test
31057-12654064
62 new_table->bucket_array[i] = (BUCKET_CONTENTS *)NULL;
executed 12654064 times by 1 test: new_table->bucket_array[i] = (BUCKET_CONTENTS *) ((void *)0) ;
Executed by:
  • Self test
12654064
63-
64 return (new_table);
executed 31057 times by 1 test: return (new_table);
Executed by:
  • Self test
31057
65}-
66-
67int-
68hash_size (table)-
69 HASH_TABLE *table;-
70{-
71 return (HASH_ENTRIES(table));
never executed: return (((table) ? (table)->nentries : 0));
0
72}-
73-
74static BUCKET_CONTENTS *-
75copy_bucket_array (ba, cpdata)-
76 BUCKET_CONTENTS *ba;-
77 sh_string_func_t *cpdata; /* data copy function */-
78{-
79 BUCKET_CONTENTS *new_bucket, *n, *e;-
80-
81 if (ba == 0)
ba == 0Description
TRUEevaluated 2472 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 88 times by 1 test
Evaluated by:
  • Self test
88-2472
82 return ((BUCKET_CONTENTS *)0);
executed 2472 times by 1 test: return ((BUCKET_CONTENTS *)0);
Executed by:
  • Self test
2472
83-
84 for (n = (BUCKET_CONTENTS *)0, e = ba; e; e = e->next)
eDescription
TRUEevaluated 88 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 88 times by 1 test
Evaluated by:
  • Self test
88
85 {-
86 if (n == 0)
n == 0Description
TRUEevaluated 88 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-88
87 {-
88 new_bucket = (BUCKET_CONTENTS *)xmalloc (sizeof (BUCKET_CONTENTS));-
89 n = new_bucket;-
90 }
executed 88 times by 1 test: end of block
Executed by:
  • Self test
88
91 else-
92 {-
93 n->next = (BUCKET_CONTENTS *)xmalloc (sizeof (BUCKET_CONTENTS));-
94 n = n->next;-
95 }
never executed: end of block
0
96-
97 n->key = savestring (e->key);-
98 n->data = e->data ? (cpdata ? (*cpdata) (e->data) : savestring (e->data))
e->dataDescription
TRUEevaluated 88 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
cpdataDescription
TRUEnever evaluated
FALSEevaluated 88 times by 1 test
Evaluated by:
  • Self test
0-88
99 : NULL;-
100 n->khash = e->khash;-
101 n->times_found = e->times_found;-
102 n->next = (BUCKET_CONTENTS *)NULL;-
103 }
executed 88 times by 1 test: end of block
Executed by:
  • Self test
88
104-
105 return new_bucket;
executed 88 times by 1 test: return new_bucket;
Executed by:
  • Self test
88
106}-
107-
108HASH_TABLE *-
109hash_copy (table, cpdata)-
110 HASH_TABLE *table;-
111 sh_string_func_t *cpdata;-
112{-
113 HASH_TABLE *new_table;-
114 int i;-
115-
116 if (table == 0)
table == 0Description
TRUEnever evaluated
FALSEevaluated 20 times by 1 test
Evaluated by:
  • Self test
0-20
117 return ((HASH_TABLE *)NULL);
never executed: return ((HASH_TABLE *) ((void *)0) );
0
118-
119 new_table = hash_create (table->nbuckets);-
120-
121 for (i = 0; i < table->nbuckets; i++)
i < table->nbucketsDescription
TRUEevaluated 2560 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 20 times by 1 test
Evaluated by:
  • Self test
20-2560
122 new_table->bucket_array[i] = copy_bucket_array (table->bucket_array[i], cpdata);
executed 2560 times by 1 test: new_table->bucket_array[i] = copy_bucket_array (table->bucket_array[i], cpdata);
Executed by:
  • Self test
2560
123-
124 new_table->nentries = table->nentries;-
125 return new_table;
executed 20 times by 1 test: return new_table;
Executed by:
  • Self test
20
126}-
127-
128/* The `khash' check below requires that strings that compare equally with-
129 strcmp hash to the same value. */-
130unsigned int-
131hash_string (s)-
132 const char *s;-
133{-
134 register unsigned int i;-
135-
136 /* This is the best string hash function I found.-
137-
138 The magic is in the interesting relationship between the special prime-
139 16777619 (2^24 + 403) and 2^32 and 2^8. */-
140 -
141 for (i = 0; *s; s++)
*sDescription
TRUEevaluated 1450221733 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 353387759 times by 1 test
Evaluated by:
  • Self test
353387759-1450221733
142 {-
143 i *= 16777619;-
144 i ^= *s;-
145 }
executed 1450221733 times by 1 test: end of block
Executed by:
  • Self test
1450221733
146-
147 return i;
executed 353387759 times by 1 test: return i;
Executed by:
  • Self test
353387759
148}-
149-
150/* Return the location of the bucket which should contain the data-
151 for STRING. TABLE is a pointer to a HASH_TABLE. */-
152-
153int-
154hash_bucket (string, table)-
155 const char *string;-
156 HASH_TABLE *table;-
157{-
158 unsigned int h;-
159-
160 return (HASH_BUCKET (string, table, h));
never executed: return ((((h) = hash_string (string)) & ((table)->nbuckets - 1)));
0
161}-
162-
163/* Return a pointer to the hashed item. If the HASH_CREATE flag is passed,-
164 create a new hash table entry for STRING, otherwise return NULL. */-
165BUCKET_CONTENTS *-
166hash_search (string, table, flags)-
167 const char *string;-
168 HASH_TABLE *table;-
169 int flags;-
170{-
171 BUCKET_CONTENTS *list;-
172 int bucket;-
173 unsigned int hv;-
174-
175 if (table == 0 || ((flags & HASH_CREATE) == 0 && HASH_ENTRIES (table) == 0))
(table)Description
TRUEevaluated 353013535 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
table == 0Description
TRUEevaluated 255305696 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 353014125 times by 1 test
Evaluated by:
  • Self test
(flags & 0x02) == 0Description
TRUEevaluated 353013535 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 590 times by 1 test
Evaluated by:
  • Self test
((table) ? (ta...ries : 0) == 0Description
TRUEevaluated 74418 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 352939117 times by 1 test
Evaluated by:
  • Self test
0-353014125
176 return (BUCKET_CONTENTS *)NULL;
executed 255380114 times by 1 test: return (BUCKET_CONTENTS *) ((void *)0) ;
Executed by:
  • Self test
255380114
177-
178 bucket = HASH_BUCKET (string, table, hv);-
179-
180 for (list = table->bucket_array ? table->bucket_array[bucket] : 0; list; list = list->next)
listDescription
TRUEevaluated 319487111 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 35149839 times by 1 test
Evaluated by:
  • Self test
35149839-319487111
181 {-
182 /* This is the comparison function */-
183 if (hv == list->khash && STREQ (list->key, string))
never executed: __result = (((const unsigned char *) (const char *) ( list->key ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( string ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
hv == list->khashDescription
TRUEevaluated 317789868 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1697243 times by 1 test
Evaluated by:
  • Self test
(list->key)[0] == (string)[0]Description
TRUEevaluated 317789868 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
__extension__ ... )))); }) == 0Description
TRUEevaluated 317789868 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-317789868
184 {-
185 list->times_found++;-
186 return (list);
executed 317789868 times by 1 test: return (list);
Executed by:
  • Self test
317789868
187 }-
188 }
executed 1697243 times by 1 test: end of block
Executed by:
  • Self test
1697243
189-
190 if (flags & HASH_CREATE)
flags & 0x02Description
TRUEevaluated 562 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 35149277 times by 1 test
Evaluated by:
  • Self test
562-35149277
191 {-
192 list = (BUCKET_CONTENTS *)xmalloc (sizeof (BUCKET_CONTENTS));-
193 list->next = table->bucket_array[bucket];-
194 table->bucket_array[bucket] = list;-
195-
196 list->data = NULL;-
197 list->key = (char *)string; /* XXX fix later */-
198 list->khash = hv;-
199 list->times_found = 0;-
200-
201 table->nentries++;-
202 return (list);
executed 562 times by 1 test: return (list);
Executed by:
  • Self test
562
203 }-
204 -
205 return (BUCKET_CONTENTS *)NULL;
executed 35149277 times by 1 test: return (BUCKET_CONTENTS *) ((void *)0) ;
Executed by:
  • Self test
35149277
206}-
207-
208/* Remove the item specified by STRING from the hash table TABLE.-
209 The item removed is returned, so you can free its contents. If-
210 the item isn't in this table NULL is returned. */-
211BUCKET_CONTENTS *-
212hash_remove (string, table, flags)-
213 const char *string;-
214 HASH_TABLE *table;-
215 int flags;-
216{-
217 int bucket;-
218 BUCKET_CONTENTS *prev, *temp;-
219 unsigned int hv;-
220-
221 if (table == 0 || HASH_ENTRIES (table) == 0)
(table)Description
TRUEevaluated 26584 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
table == 0Description
TRUEevaluated 5498 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 26584 times by 1 test
Evaluated by:
  • Self test
((table) ? (ta...ries : 0) == 0Description
TRUEevaluated 1577 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 25007 times by 1 test
Evaluated by:
  • Self test
0-26584
222 return (BUCKET_CONTENTS *)NULL;
executed 7075 times by 1 test: return (BUCKET_CONTENTS *) ((void *)0) ;
Executed by:
  • Self test
7075
223-
224 bucket = HASH_BUCKET (string, table, hv);-
225 prev = (BUCKET_CONTENTS *)NULL;-
226 for (temp = table->bucket_array[bucket]; temp; temp = temp->next)
tempDescription
TRUEevaluated 12088 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 12956 times by 1 test
Evaluated by:
  • Self test
12088-12956
227 {-
228 if (hv == temp->khash && STREQ (temp->key, string))
never executed: __result = (((const unsigned char *) (const char *) ( temp->key ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( string ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
hv == temp->khashDescription
TRUEevaluated 12051 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 37 times by 1 test
Evaluated by:
  • Self test
(temp->key)[0] == (string)[0]Description
TRUEevaluated 12051 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
__extension__ ... )))); }) == 0Description
TRUEevaluated 12051 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-12051
229 {-
230 if (prev)
prevDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 12049 times by 1 test
Evaluated by:
  • Self test
2-12049
231 prev->next = temp->next;
executed 2 times by 1 test: prev->next = temp->next;
Executed by:
  • Self test
2
232 else-
233 table->bucket_array[bucket] = temp->next;
executed 12049 times by 1 test: table->bucket_array[bucket] = temp->next;
Executed by:
  • Self test
12049
234-
235 table->nentries--;-
236 return (temp);
executed 12051 times by 1 test: return (temp);
Executed by:
  • Self test
12051
237 }-
238 prev = temp;-
239 }
executed 37 times by 1 test: end of block
Executed by:
  • Self test
37
240 return ((BUCKET_CONTENTS *) NULL);
executed 12956 times by 1 test: return ((BUCKET_CONTENTS *) ((void *)0) );
Executed by:
  • Self test
12956
241}-
242-
243/* Create an entry for STRING, in TABLE. If the entry already-
244 exists, then return it (unless the HASH_NOSRCH flag is set). */-
245BUCKET_CONTENTS *-
246hash_insert (string, table, flags)-
247 char *string;-
248 HASH_TABLE *table;-
249 int flags;-
250{-
251 BUCKET_CONTENTS *item;-
252 int bucket;-
253 unsigned int hv;-
254-
255 if (table == 0)
table == 0Description
TRUEnever evaluated
FALSEevaluated 423049 times by 1 test
Evaluated by:
  • Self test
0-423049
256 table = hash_create (0);
never executed: table = hash_create (0);
0
257-
258 item = (flags & HASH_NOSRCH) ? (BUCKET_CONTENTS *)NULL
(flags & 0x01)Description
TRUEevaluated 417149 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5900 times by 1 test
Evaluated by:
  • Self test
5900-417149
259 : hash_search (string, table, 0);-
260-
261 if (item == 0)
item == 0Description
TRUEevaluated 423045 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test
4-423045
262 {-
263 bucket = HASH_BUCKET (string, table, hv);-
264-
265 item = (BUCKET_CONTENTS *)xmalloc (sizeof (BUCKET_CONTENTS));-
266 item->next = table->bucket_array[bucket];-
267 table->bucket_array[bucket] = item;-
268-
269 item->data = NULL;-
270 item->key = string;-
271 item->khash = hv;-
272 item->times_found = 0;-
273-
274 table->nentries++;-
275 }
executed 423045 times by 1 test: end of block
Executed by:
  • Self test
423045
276-
277 return (item);
executed 423049 times by 1 test: return (item);
Executed by:
  • Self test
423049
278}-
279-
280/* Remove and discard all entries in TABLE. If FREE_DATA is non-null, it-
281 is a function to call to dispose of a hash item's data. Otherwise,-
282 free() is called. */-
283void-
284hash_flush (table, free_data)-
285 HASH_TABLE *table;-
286 sh_free_func_t *free_data;-
287{-
288 int i;-
289 register BUCKET_CONTENTS *bucket, *item;-
290-
291 if (table == 0 || HASH_ENTRIES (table) == 0)
(table)Description
TRUEevaluated 2614 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
table == 0Description
TRUEnever evaluated
FALSEevaluated 2614 times by 1 test
Evaluated by:
  • Self test
((table) ? (ta...ries : 0) == 0Description
TRUEevaluated 439 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2175 times by 1 test
Evaluated by:
  • Self test
0-2614
292 return;
executed 439 times by 1 test: return;
Executed by:
  • Self test
439
293-
294 for (i = 0; i < table->nbuckets; i++)
i < table->nbucketsDescription
TRUEevaluated 40120 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2175 times by 1 test
Evaluated by:
  • Self test
2175-40120
295 {-
296 bucket = table->bucket_array[i];-
297-
298 while (bucket)
bucketDescription
TRUEevaluated 3621 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 40120 times by 1 test
Evaluated by:
  • Self test
3621-40120
299 {-
300 item = bucket;-
301 bucket = bucket->next;-
302-
303 if (free_data)
free_dataDescription
TRUEevaluated 3345 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 276 times by 1 test
Evaluated by:
  • Self test
276-3345
304 (*free_data) (item->data);
executed 3345 times by 1 test: (*free_data) (item->data);
Executed by:
  • Self test
3345
305 else-
306 free (item->data);
executed 276 times by 1 test: sh_xfree((item->data), "hashlib.c", 306);
Executed by:
  • Self test
276
307 free (item->key);-
308 free (item);-
309 }
executed 3621 times by 1 test: end of block
Executed by:
  • Self test
3621
310 table->bucket_array[i] = (BUCKET_CONTENTS *)NULL;-
311 }
executed 40120 times by 1 test: end of block
Executed by:
  • Self test
40120
312-
313 table->nentries = 0;-
314}
executed 2175 times by 1 test: end of block
Executed by:
  • Self test
2175
315-
316/* Free the hash table pointed to by TABLE. */-
317void-
318hash_dispose (table)-
319 HASH_TABLE *table;-
320{-
321 free (table->bucket_array);-
322 free (table);-
323}
executed 2150 times by 1 test: end of block
Executed by:
  • Self test
2150
324-
325void-
326hash_walk (table, func)-
327 HASH_TABLE *table;-
328 hash_wfunc *func;-
329{-
330 register int i;-
331 BUCKET_CONTENTS *item;-
332-
333 if (table == 0 || HASH_ENTRIES (table) == 0)
(table)Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
table == 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test
((table) ? (ta...ries : 0) == 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test
0-3
334 return;
never executed: return;
0
335-
336 for (i = 0; i < table->nbuckets; i++)
i < table->nbucketsDescription
TRUEevaluated 192 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test
3-192
337 {-
338 for (item = hash_items (i, table); item; item = item->next)
itemDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 192 times by 1 test
Evaluated by:
  • Self test
8-192
339 if ((*func) (item) < 0)
(*func) (item) < 0Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test
0-8
340 return;
never executed: return;
0
341 }
executed 192 times by 1 test: end of block
Executed by:
  • Self test
192
342}
executed 3 times by 1 test: end of block
Executed by:
  • Self test
3
343-
344#if defined (DEBUG) || defined (TEST_HASHING)-
345void-
346hash_pstats (table, name)-
347 HASH_TABLE *table;-
348 char *name;-
349{-
350 register int slot, bcount;-
351 register BUCKET_CONTENTS *bc;-
352-
353 if (name == 0)
name == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
354 name = "unknown hash table";
never executed: name = "unknown hash table";
0
355-
356 fprintf (stderr, "%s: %d buckets; %d items\n", name, table->nbuckets, table->nentries);-
357-
358 /* Print out a count of how many strings hashed to each bucket, so we can-
359 see how even the distribution is. */-
360 for (slot = 0; slot < table->nbuckets; slot++)
slot < table->nbucketsDescription
TRUEnever evaluated
FALSEnever evaluated
0
361 {-
362 bc = hash_items (slot, table);
tableDescription
TRUEnever evaluated
FALSEnever evaluated
(slot < table->nbuckets)Description
TRUEnever evaluated
FALSEnever evaluated
0
363-
364 fprintf (stderr, "\tslot %3d: ", slot);-
365 for (bcount = 0; bc; bc = bc->next)
bcDescription
TRUEnever evaluated
FALSEnever evaluated
0
366 bcount++;
never executed: bcount++;
0
367-
368 fprintf (stderr, "%d\n", bcount);-
369 }
never executed: end of block
0
370}
never executed: end of block
0
371#endif-
372-
373#ifdef TEST_HASHING-
374-
375/* link with xmalloc.o and lib/malloc/libmalloc.a */-
376#undef NULL-
377#include <stdio.h>-
378-
379#ifndef NULL-
380#define NULL 0-
381#endif-
382-
383HASH_TABLE *table, *ntable;-
384-
385int interrupt_immediately = 0;-
386-
387int-
388signal_is_trapped (s)-
389 int s;-
390{-
391 return (0);-
392}-
393-
394void-
395programming_error (const char *format, ...)-
396{-
397 abort();-
398}-
399-
400void-
401fatal_error (const char *format, ...)-
402{-
403 abort();-
404}-
405-
406void-
407internal_warning (const char *format, ...)-
408{-
409}-
410-
411main ()-
412{-
413 char string[256];-
414 int count = 0;-
415 BUCKET_CONTENTS *tt;-
416-
417#if defined (TEST_NBUCKETS)-
418 table = hash_create (TEST_NBUCKETS);-
419#else-
420 table = hash_create (0);-
421#endif-
422-
423 for (;;)-
424 {-
425 char *temp_string;-
426 if (fgets (string, sizeof (string), stdin) == 0)-
427 break;-
428 if (!*string)-
429 break;-
430 temp_string = savestring (string);-
431 tt = hash_insert (temp_string, table, 0);-
432 if (tt->times_found)-
433 {-
434 fprintf (stderr, "You have already added item `%s'\n", string);-
435 free (temp_string);-
436 }-
437 else-
438 {-
439 count++;-
440 }-
441 }-
442-
443 hash_pstats (table, "hash test");-
444-
445 ntable = hash_copy (table, (sh_string_func_t *)NULL);-
446 hash_flush (table, (sh_free_func_t *)NULL);-
447 hash_pstats (ntable, "hash copy test");-
448-
449 exit (0);-
450}-
451-
452#endif /* TEST_HASHING */-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2