diff options
author | millert <> | 2004-06-24 04:43:33 +0000 |
---|---|---|
committer | millert <> | 2004-06-24 04:43:33 +0000 |
commit | f22795e90c0343742b46ca0a209a6e4059676f88 (patch) | |
tree | 73a9810e9f7758f89202c177e4c823835a49a71c /src/lib/libc/stdlib/hcreate.3 | |
parent | 242acba8652a28aeb609072dfde10f2074651e07 (diff) | |
download | openbsd-f22795e90c0343742b46ca0a209a6e4059676f88.tar.gz openbsd-f22795e90c0343742b46ca0a209a6e4059676f88.tar.bz2 openbsd-f22795e90c0343742b46ca0a209a6e4059676f88.zip |
Working hcreate(3) et al from NetBSD (cgd) via ray at cyth dot net.
Now passes the regress tests.
Diffstat (limited to 'src/lib/libc/stdlib/hcreate.3')
-rw-r--r-- | src/lib/libc/stdlib/hcreate.3 | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/src/lib/libc/stdlib/hcreate.3 b/src/lib/libc/stdlib/hcreate.3 new file mode 100644 index 0000000000..d1d4e5c185 --- /dev/null +++ b/src/lib/libc/stdlib/hcreate.3 | |||
@@ -0,0 +1,195 @@ | |||
1 | .\" $OpenBSD: hcreate.3,v 1.1 2004/06/24 04:43:33 millert Exp $ | ||
2 | .\" $NetBSD: hcreate.3,v 1.6 2003/04/16 13:34:46 wiz Exp $ | ||
3 | .\" | ||
4 | .\" Copyright (c) 1999 The NetBSD Foundation, Inc. | ||
5 | .\" All rights reserved. | ||
6 | .\" | ||
7 | .\" This code is derived from software contributed to The NetBSD Foundation | ||
8 | .\" by Klaus Klein. | ||
9 | .\" | ||
10 | .\" Redistribution and use in source and binary forms, with or without | ||
11 | .\" modification, are permitted provided that the following conditions | ||
12 | .\" are met: | ||
13 | .\" 1. Redistributions of source code must retain the above copyright | ||
14 | .\" notice, this list of conditions and the following disclaimer. | ||
15 | .\" 2. Redistributions in binary form must reproduce the above copyright | ||
16 | .\" notice, this list of conditions and the following disclaimer in the | ||
17 | .\" documentation and/or other materials provided with the distribution. | ||
18 | .\" 3. All advertising materials mentioning features or use of this software | ||
19 | .\" must display the following acknowledgement: | ||
20 | .\" This product includes software developed by the NetBSD | ||
21 | .\" Foundation, Inc. and its contributors. | ||
22 | .\" 4. Neither the name of The NetBSD Foundation nor the names of its | ||
23 | .\" contributors may be used to endorse or promote products derived | ||
24 | .\" from this software without specific prior written permission. | ||
25 | .\" | ||
26 | .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS | ||
27 | .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | ||
28 | .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
29 | .\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS | ||
30 | .\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
31 | .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
32 | .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
33 | .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
34 | .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
35 | .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
36 | .\" POSSIBILITY OF SUCH DAMAGE. | ||
37 | .\" | ||
38 | .Dd February 13, 2001 | ||
39 | .Dt HCREATE 3 | ||
40 | .Os | ||
41 | .Sh NAME | ||
42 | .Nm hcreate , | ||
43 | .Nm hdestroy , | ||
44 | .Nm hsearch | ||
45 | .Nd manage hash search table | ||
46 | .Sh SYNOPSIS | ||
47 | .In search.h | ||
48 | .Ft int | ||
49 | .Fn hcreate "size_t nel" | ||
50 | .Ft void | ||
51 | .Fn hdestroy "void" | ||
52 | .Ft ENTRY * | ||
53 | .Fn hsearch "ENTRY item" "ACTION action" | ||
54 | .Sh DESCRIPTION | ||
55 | The | ||
56 | .Fn hcreate , | ||
57 | .Fn hdestroy | ||
58 | and | ||
59 | .Fn hsearch | ||
60 | functions manage hash search tables. | ||
61 | .Pp | ||
62 | The | ||
63 | .Fn hcreate | ||
64 | function allocates and initializes the table. | ||
65 | The | ||
66 | .Fa nel | ||
67 | argument specifies an estimate of the maximum number of entries to be held | ||
68 | by the table. | ||
69 | Unless further memory allocation fails, supplying an insufficient | ||
70 | .Fa nel | ||
71 | value will not result in functional harm, although a performance degradation | ||
72 | may occur. | ||
73 | Initialization using the | ||
74 | .Fn hcreate | ||
75 | function is mandatory prior to any access operations using | ||
76 | .Fn hsearch . | ||
77 | .Pp | ||
78 | The | ||
79 | .Fn hdestroy | ||
80 | function destroys a table previously created using | ||
81 | .Fn hcreate . | ||
82 | After a call to | ||
83 | .Fn hdestroy , | ||
84 | the data can no longer be accessed. | ||
85 | .Pp | ||
86 | The | ||
87 | .Fn hsearch | ||
88 | function is used to search to the hash table. | ||
89 | It returns a pointer into the | ||
90 | hash table indicating the address of an item. | ||
91 | The | ||
92 | .Fa item | ||
93 | argument is of type | ||
94 | .Dv ENTRY , | ||
95 | a structural type which contains the following members: | ||
96 | .Bl -tag -compact -offset indent -width voidX*dataXX | ||
97 | .It Fa char *key | ||
98 | comparison key. | ||
99 | .It Fa void *data | ||
100 | pointer to data associated with | ||
101 | .Fa key . | ||
102 | .El | ||
103 | .Pp | ||
104 | The key comparison function used by | ||
105 | .Fn hsearch | ||
106 | is | ||
107 | .Xr strcmp 3 . | ||
108 | .Pp | ||
109 | The | ||
110 | .Fa action | ||
111 | argument is of type | ||
112 | .Dv ACTION , | ||
113 | an enumeration type which defines the following values: | ||
114 | .Bl -tag -compact -offset indent -width ENTERXX | ||
115 | .It Dv ENTER | ||
116 | Insert | ||
117 | .Fa item | ||
118 | into the hash table. | ||
119 | If an existing item with the same key is found, it is not replaced. | ||
120 | Note that the | ||
121 | .Fa key | ||
122 | and | ||
123 | .Fa data | ||
124 | elements of | ||
125 | .Fa item | ||
126 | are used directly by the new table entry. | ||
127 | The storage for the | ||
128 | key must not be modified during the lifetime of the hash table. | ||
129 | .It Dv FIND | ||
130 | Search the hash table without inserting | ||
131 | .Fa item . | ||
132 | .El | ||
133 | .Sh RETURN VALUES | ||
134 | If successful, the | ||
135 | .Fn hcreate | ||
136 | function returns a non-zero value. | ||
137 | Otherwise, a value of 0 is returned and | ||
138 | .Va errno | ||
139 | is set to indicate the error. | ||
140 | .Pp | ||
141 | The | ||
142 | .Fn hdestroy | ||
143 | functions | ||
144 | returns no value. | ||
145 | .Pp | ||
146 | If successful, the | ||
147 | .Fn hsearch | ||
148 | function returns a pointer to hash table entry matching | ||
149 | the provided key. | ||
150 | If the action is | ||
151 | .Dv FIND | ||
152 | and the item was not found, or if the action is | ||
153 | .Dv ENTER | ||
154 | and the insertion failed, | ||
155 | .Dv NULL | ||
156 | is returned and | ||
157 | .Va errno | ||
158 | is set to indicate the error. | ||
159 | If the action is | ||
160 | .Dv ENTER | ||
161 | and an entry already existed in the table matching the given | ||
162 | key, the existing entry is returned and is not replaced. | ||
163 | .Sh ERRORS | ||
164 | The | ||
165 | .Fn hcreate | ||
166 | and | ||
167 | .Fn hsearch | ||
168 | functions will fail if: | ||
169 | .Bl -tag -width Er | ||
170 | .It Bq Er ENOMEM | ||
171 | Insufficient memory is available. | ||
172 | .El | ||
173 | .Sh SEE ALSO | ||
174 | .Xr bsearch 3 , | ||
175 | .Xr lsearch 3 , | ||
176 | .Xr malloc 3 , | ||
177 | .Xr strcmp 3 | ||
178 | .Sh STANDARDS | ||
179 | The | ||
180 | .Fn hcreate , | ||
181 | .Fn hdestroy | ||
182 | and | ||
183 | .Fn hsearch | ||
184 | functions conform to | ||
185 | .St -xpg4.2 . | ||
186 | .Sh HISTORY | ||
187 | The | ||
188 | .Fn hcreate , | ||
189 | .Fn hdestroy | ||
190 | and | ||
191 | .Fn hsearch | ||
192 | functions first appeared in | ||
193 | .At V . | ||
194 | .Sh BUGS | ||
195 | The interface permits the use of only one hash table at a time. | ||