
1: /* Linear search functions. 2: Copyright (C) 1996,97,98,2002 Free Software Foundation, Inc. 3: This file is part of the GNU C Library. 4: Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. 5: 6: The GNU C Library is free software; you can redistribute it and/or 7: modify it under the terms of the GNU Lesser General Public 8: License as published by the Free Software Foundation; either 9: version 2.1 of the License, or (at your option) any later version. 10: 11: The GNU C Library is distributed in the hope that it will be useful, 12: but WITHOUT ANY WARRANTY; without even the implied warranty of 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14: Lesser General Public License for more details. 15: 16: You should have received a copy of the GNU Lesser General Public 17: License along with the GNU C Library; if not, write to the Free 18: Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 19: 02111-1307 USA. */ 20: 21: #include <search.h> 22: #include <string.h> 23: 24: 25: void * 26: lsearch (const void *key, void *base, size_t *nmemb, size_t size, 27: __compar_fn_t compar) 28: { 29: void *result; 30: 31: /* Try to find it. */ 32: result = lfind (key, base, nmemb, size, compar); 33: if (result == NULL) 34: { 35: /* Not available. Insert at the end. */ 36: result = memcpy (base + (*nmemb) * size, key, size); 37: ++(*nmemb); 38: } 39: 40: return result; 41: } 42: 43: 44: void * 45: lfind (const void *key, const void *base, size_t *nmemb, size_t size, 46: __compar_fn_t compar) 47: { 48: const void *result = base; 49: size_t cnt = 0; 50: 51: while (cnt < *nmemb && (*compar) (key, result) != 0) 52: { 53: result += size; 54: ++cnt; 55: } 56: 57: return cnt < *nmemb ? (void *) result : NULL; 58: } 59: libc_hidden_def (lfind)