diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 2004-06-24 04:43:34 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 2004-06-24 04:43:34 +0000 |
commit | 9c06fe2ff2b8dfe77892a0dd3631241a1a789daa (patch) | |
tree | eee465ff5db7265f36a9600031374157fdf655fe /lib/libc/db | |
parent | 25b5d0c61452ba19e289b1d9e8edfa2e0c823b2c (diff) |
Working hcreate(3) et al from NetBSD (cgd) via ray at cyth dot net.
Now passes the regress tests.
Diffstat (limited to 'lib/libc/db')
-rw-r--r-- | lib/libc/db/hash/Makefile.inc | 4 | ||||
-rw-r--r-- | lib/libc/db/hash/hsearch.c | 109 | ||||
-rw-r--r-- | lib/libc/db/man/Makefile.inc | 5 | ||||
-rw-r--r-- | lib/libc/db/man/hcreate.3 | 195 |
4 files changed, 4 insertions, 309 deletions
diff --git a/lib/libc/db/hash/Makefile.inc b/lib/libc/db/hash/Makefile.inc index 8022fe41e68..5825ef8c976 100644 --- a/lib/libc/db/hash/Makefile.inc +++ b/lib/libc/db/hash/Makefile.inc @@ -1,6 +1,6 @@ -# $OpenBSD: Makefile.inc,v 1.4 1998/11/20 11:18:35 d Exp $ +# $OpenBSD: Makefile.inc,v 1.5 2004/06/24 04:43:33 millert Exp $ .PATH: ${LIBCSRCDIR}/db/hash SRCS+= hash.c hash_bigkey.c hash_buf.c hash_func.c hash_log2.c \ - hash_page.c hsearch.c ndbm.c + hash_page.c ndbm.c diff --git a/lib/libc/db/hash/hsearch.c b/lib/libc/db/hash/hsearch.c deleted file mode 100644 index ffd7d399e47..00000000000 --- a/lib/libc/db/hash/hsearch.c +++ /dev/null @@ -1,109 +0,0 @@ -/* $OpenBSD: hsearch.c,v 1.6 2003/06/02 20:18:34 millert Exp $ */ - -/*- - * Copyright (c) 1990, 1993 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * Margo Seltzer. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -#if 0 -static char sccsid[] = "@(#)hsearch.c 8.5 (Berkeley) 9/21/94"; -#else -static const char rcsid[] = "$OpenBSD: hsearch.c,v 1.6 2003/06/02 20:18:34 millert Exp $"; -#endif -#endif /* LIBC_SCCS and not lint */ - -#include <sys/types.h> - -#include <fcntl.h> -#include <string.h> - -#include <db.h> -#include "search.h" - -static DB *dbp = NULL; -static ENTRY retval; - -extern int -hcreate(nel) - u_int nel; -{ - HASHINFO info; - - info.nelem = nel; - info.bsize = 256; - info.ffactor = 8; - info.cachesize = 0; - info.hash = NULL; - info.lorder = 0; - dbp = (DB *)__hash_open(NULL, O_CREAT | O_RDWR, 0600, &info, 0); - return (dbp != NULL); -} - -extern ENTRY * -hsearch(item, action) - ENTRY item; - ACTION action; -{ - DBT key, val; - int status; - - if (!dbp) - return (NULL); - key.data = (u_char *)item.key; - key.size = strlen(item.key) + 1; - - if (action == ENTER) { - val.data = (u_char *)item.data; - val.size = strlen(item.data) + 1; - status = (dbp->put)(dbp, &key, &val, R_NOOVERWRITE); - if (status) - return (NULL); - } else { - /* FIND */ - status = (dbp->get)(dbp, &key, &val, 0); - if (status) - return (NULL); - else - item.data = (char *)val.data; - } - retval.key = item.key; - retval.data = item.data; - return (&retval); -} - -extern void -hdestroy() -{ - if (dbp) { - (void)(dbp->close)(dbp); - dbp = NULL; - } -} diff --git a/lib/libc/db/man/Makefile.inc b/lib/libc/db/man/Makefile.inc index 7e03894fedc..6fad4927777 100644 --- a/lib/libc/db/man/Makefile.inc +++ b/lib/libc/db/man/Makefile.inc @@ -1,12 +1,11 @@ -# $OpenBSD: Makefile.inc,v 1.11 2001/04/16 00:08:46 millert Exp $ +# $OpenBSD: Makefile.inc,v 1.12 2004/06/24 04:43:33 millert Exp $ .PATH: ${LIBCSRCDIR}/db/man -MAN+= btree.3 dbm.3 dbopen.3 hash.3 hcreate.3 mpool.3 ndbm.3 recno.3 +MAN+= btree.3 dbm.3 dbopen.3 hash.3 mpool.3 ndbm.3 recno.3 MLINKS+= dbopen.3 db.3 MLINKS+= dbm.3 dbminit.3 dbm.3 dbmclose.3 dbm.3 fetch.3 dbm.3 store.3 MLINKS+= dbm.3 delete.3 dbm.3 firstkey.3 dbm.3 nextkey.3 -MLINKS+= hcreate.3 hdestroy.3 hcreate.3 hsearch.3 MLINKS+= mpool.3 mpool_open.3 mpool.3 mpool_filter.3 mpool.3 mpool_new.3 MLINKS+= mpool.3 mpool_delete.3 mpool.3 mpool_get.3 mpool.3 mpool_put.3 MLINKS+= mpool.3 mpool_sync.3 mpool.3 mpool_close.3 diff --git a/lib/libc/db/man/hcreate.3 b/lib/libc/db/man/hcreate.3 deleted file mode 100644 index 89286d15aeb..00000000000 --- a/lib/libc/db/man/hcreate.3 +++ /dev/null @@ -1,195 +0,0 @@ -.\" $OpenBSD: hcreate.3,v 1.4 2003/05/30 13:11:14 jmc Exp $ -.\" $NetBSD: hcreate.3,v 1.2.4.1 2001/03/13 21:19:18 he Exp $ -.\" -.\" Copyright (c) 1999 The NetBSD Foundation, Inc. -.\" All rights reserved. -.\" -.\" This code is derived from software contributed to The NetBSD Foundation -.\" by Klaus Klein. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\" must display the following acknowledgement: -.\" This product includes software developed by the NetBSD -.\" Foundation, Inc. and its contributors. -.\" 4. Neither the name of The NetBSD Foundation nor the names of its -.\" contributors may be used to endorse or promote products derived -.\" from this software without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS -.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS -.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -.\" POSSIBILITY OF SUCH DAMAGE. -.\" -.Dd February 13, 2001 -.Dt HCREATE 3 -.Os -.Sh NAME -.Nm hcreate , -.Nm hdestroy , -.Nm hsearch -.Nd manage hash search table -.Sh SYNOPSIS -.Fd #include <search.h> -.Ft int -.Fn hcreate "size_t nel" -.Ft void -.Fn hdestroy "void" -.Ft ENTRY * -.Fn hsearch "ENTRY item" "ACTION action" -.Sh DESCRIPTION -The -.Fn hcreate , -.Fn hdestroy -and -.Fn hsearch -functions manage hash search tables. -.Pp -The -.Fn hcreate -function allocates and initializes the table. -The -.Fa nel -argument specifies an estimate of the maximum number of entries to be held -by the table. -Unless further memory allocation fails, supplying an -insufficient -.Fa nel -value will not result in functional harm, although a performance degradation -may occur. -Initialization using the -.Fn hcreate -function is mandatory prior to any access operations using -.Fn hsearch . -.Pp -The -.Fn hdestroy -function destroys a table previously created using -.Fn hcreate . -After a call to -.Fn hdestroy , -the data can no longer be accessed. -.Pp -The -.Fn hsearch -function is used to search to the hash table. -It returns a pointer into the hash table indicating the address of an item. -The -.Fa item -argument is of type -.Dv ENTRY , -a structural type which contains the following members: -.Bl -tag -compact -offset indent -width voidX*dataXX -.It Fa char *key -comparison key. -.It Fa void *data -pointer to data associated with -.Fa key . -.El -.Pp -The key comparison function used by -.Fn hsearch -is -.Xr strcmp 3 . -.Pp -The -.Fa action -argument is of type -.Dv ACTION , -an enumeration type which defines the following values: -.Bl -tag -compact -offset indent -width ENTERXX -.It Dv ENTER -Insert -.Fa item -into the hash table. -If an existing item with the same key is found, it is not replaced. -Note that the -.Fa key -and -.Fa data -elements of -.Fa item -are used directly by the new table entry. -The storage for the -key must not be modified during the lifetime of the hash table. -.It Dv FIND -Search the hash table without inserting -.Fa item . -.El -.Sh RETURN VALUES -If successful, the -.Fn hcreate -function returns a non-zero value. -Otherwise, a value of 0 is returned and -.Va errno -is set to indicate the error. -.Pp -The -.Fn hdestroy -functions -returns no value. -.Pp -If successful, the -.Fn hsearch -function returns a pointer to hash table entry matching -the provided key. -If the action is -.Dv FIND -and the item was not found, or if the action is -.Dv ENTER -and the insertion failed, -.Dv NULL -is returned and -.Va errno -is set to indicate the error. -If the action is -.Dv ENTER -and an entry already existed in the table matching the given -key, the existing entry is returned and is not replaced. -.Sh ERRORS -The -.Fn hcreate -and -.Fn hsearch -functions will fail if: -.Bl -tag -width Er -.It Bq Er ENOMEM -Insufficient memory is available. -.El -.Sh SEE ALSO -.Xr bsearch 3 , -.Xr lsearch 3 , -.Xr malloc 3 , -.Xr strcmp 3 -.Sh STANDARDS -The -.Fn hcreate , -.Fn hdestroy -and -.Fn hsearch -functions conform to -.St -xpg4.2 . -.Sh HISTORY -The -.Fn hcreate , -.Fn hdestroy -and -.Fn hsearch -functions first appeared in -.At V . -.Sh BUGS -The interface permits the use of only one hash table at a time. |