diff options
author | Roland McGrath <roland@gnu.org> | 1996-06-07 04:36:10 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 1996-06-07 04:36:10 +0000 |
commit | 1be6ec30336a318dd50f9d9a45c8066860ec07f2 (patch) | |
tree | 8399c167a53cfe3ab9cdf27018730dda3c6a4d1b /misc/lsearch.c | |
parent | c035afc9605510b5437515b71e0603c12463c2e9 (diff) | |
download | glibc-1be6ec30336a318dd50f9d9a45c8066860ec07f2.tar.gz glibc-1be6ec30336a318dd50f9d9a45c8066860ec07f2.tar.xz glibc-1be6ec30336a318dd50f9d9a45c8066860ec07f2.zip |
Fri Jun 7 1996 05:29:32 Ulrich Drepper <drepper@cygnus.com> cvs/libc-960607
* misc/lsearch.c: New file. Implementation of lfind and lsearch functions. * misc/search.h: Add prototype for functions from tsearch family with __ prefix. Correct prototype for lsearch: BASE parameter must not be const. * misc/tsearch.c: prepend all global function names with __ and make normal names weak aliases. Fri Jun 7 00:15:24 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> * Make-dist (sysdep_dirs): Skip CVS dirs.
Diffstat (limited to 'misc/lsearch.c')
-rw-r--r-- | misc/lsearch.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/misc/lsearch.c b/misc/lsearch.c new file mode 100644 index 0000000000..f062a6882b --- /dev/null +++ b/misc/lsearch.c @@ -0,0 +1,58 @@ +/* Linear search functions. +Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. +Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include <search.h> +#include <string.h> + + +void * +lsearch (const void *key, void *base, size_t *nmemb, size_t size, + __compar_fn_t compar) +{ + void *result; + + /* Try to find it. */ + result = lfind (key, base, nmemb, size, compar); + if (result == NULL) + { + /* Not available. Insert at the end. */ + memcpy (base + (*nmemb) * size, key, size); + ++(*nmemb); + } + + return result; +} + + +void * +lfind (const void *key, const void *base, size_t *nmemb, size_t size, + __compar_fn_t compar) +{ + const void *result = base; + size_t cnt = 0; + + while (cnt < *nmemb && (*compar) (key, result) != 0) + { + result += size; + ++cnt; + } + + return cnt < *nmemb ? (void *) result : NULL; +} |