diff options
Diffstat (limited to 'libc/misc/search/_lsearch.c')
-rw-r--r-- | libc/misc/search/_lsearch.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/libc/misc/search/_lsearch.c b/libc/misc/search/_lsearch.c new file mode 100644 index 000000000..eefef2121 --- /dev/null +++ b/libc/misc/search/_lsearch.c @@ -0,0 +1,51 @@ +/* + * This file lifted in toto from 'Dlibs' on the atari ST (RdeBath) + * + * + * Dale Schumacher 399 Beacon Ave. + * (alias: Dalnefre') St. Paul, MN 55104 + * dal@syntel.UUCP United States of America + * "It's not reality that's important, but how you perceive things." + */ + +#include <string.h> +#include <stdio.h> +#include <search.h> + +libc_hidden_proto(lfind) + +#ifdef L_lfind + +void *lfind(const void *key, const void *base, size_t *nmemb, + size_t size, int (*compar)(const void *, const void *)) +{ + register int n = *nmemb; + + while (n--) { + if ((*compar) (base, key) == 0) + return ((void*)base); + base += size; + } + return (NULL); +} +libc_hidden_def(lfind) + +#endif + +#ifdef L_lsearch + +libc_hidden_proto(memcpy) + +void *lsearch(const void *key, void *base, size_t *nmemb, + size_t size, int (*compar)(const void *, const void *)) +{ + register char *p; + + if ((p = lfind(key, base, nmemb, size, compar)) == NULL) { + p = memcpy((base + (size * (*nmemb))), key, size); + ++(*nmemb); + } + return (p); +} + +#endif |