-.\" $OpenBSD: hcreate.3,v 1.5 2008/06/26 05:42:05 ray Exp $
-.\" $NetBSD: hcreate.3,v 1.6 2003/04/16 13:34:46 wiz Exp $
+.\" $OpenBSD: hcreate.3,v 1.6 2010/07/28 09:00:20 ray Exp $
+.\" $NetBSD: hcreate.3,v 1.8 2010/05/01 06:18:03 jruoho Exp $
.\"
.\" Copyright (c) 1999 The NetBSD Foundation, Inc.
.\" All rights reserved.
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd $Mdocdate: June 26 2008 $
+.Dd $Mdocdate: July 28 2010 $
.Dt HCREATE 3
.Os
.Sh NAME
The
.Fa item
argument is of type
-.Dv ENTRY ,
-a structural type which contains the following members:
+.Vt ENTRY ,
+defined in the
+.In search.h
+header.
+This is a structure type that contains two pointers:
.Pp
-.Bl -tag -compact -offset indent -width voidX*dataXX
+.Bl -tag -compact -offset indent -width "void *data "
.It Fa char *key
-comparison key.
+comparison key
.It Fa void *data
pointer to data associated with
-.Fa key .
+.Fa key
.El
.Pp
The key comparison function used by
The
.Fa action
argument is of type
-.Dv ACTION ,
+.Vt ACTION ,
an enumeration type which defines the following values:
.Bl -tag -offset indent -width ENTERXX
.It Dv ENTER
Search the hash table without inserting
.Fa item .
.El
+.Pp
+Note that the comparison
+.Fa key
+must be allocated using
+.Xr malloc 3
+or
+.Xr calloc 3
+if action is
+.Dv ENTER
+and
+.Fn hdestroy
+will be called.
+This is because
+.Fn hdestroy
+will call
+.Xr free 3
+for each comparison
+.Fa key
+(but not
+.Fa data ) .
+Typically the comparison
+.Fa key
+is allocated by using
+.Xr strdup 3 .
.Sh RETURN VALUES
If successful, the
.Fn hcreate
.Xr malloc 3 ,
.Xr strcmp 3
.Sh STANDARDS
-These functions conform to
-.St -p1003.1-2004 .
+The
+.Fn hcreate ,
+.Fn hdestroy
+and
+.Fn hsearch
+functions conform to
+.St -xpg4.2 .
.Sh HISTORY
The
.Fn hcreate ,
.Fn hsearch
functions first appeared in
.At V .
-.Sh BUGS
+.Sh CAVEATS
+At least the following limitations can be mentioned:
+.Bl -bullet
+.It
The interface permits the use of only one hash table at a time.
+.It
+Individual hash table entries can be added, but not deleted.
+.It
+The standard is indecipherable about the
+internal memory usage of the functions,
+mentioning only that
+.Do
+.Fn hcreate
+and
+.Fn hsearch
+functions may use
+.Fn malloc
+to allocate space
+.Dc .
+This limits the portability of the functions,
+given that other implementations may not
+.Xr free 3
+the buffer pointed by
+.Fa key .
+.El