From 4abab5ad6c8465a7528ccdd5f49367da05f78bbd Mon Sep 17 00:00:00 2001 From: Vladimir Azarov Date: Tue, 1 Oct 2024 15:47:05 +0200 Subject: Initial version --- src/search/lsearch.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/search/lsearch.c (limited to 'src/search/lsearch.c') diff --git a/src/search/lsearch.c b/src/search/lsearch.c new file mode 100644 index 0000000..5eb5cc2 --- /dev/null +++ b/src/search/lsearch.c @@ -0,0 +1,31 @@ +#include +#include + +void *lsearch(const void *key, void *base, size_t *nelp, size_t width, + int (*compar)(const void *, const void *)) +{ + char (*p)[width] = base; + size_t n = *nelp; + size_t i; + + for (i = 0; i < n; i++) + if (compar(key, p[i]) == 0) + return p[i]; + *nelp = n+1; + return memcpy(p[n], key, width); +} + +void *lfind(const void *key, const void *base, size_t *nelp, + size_t width, int (*compar)(const void *, const void *)) +{ + char (*p)[width] = (void *)base; + size_t n = *nelp; + size_t i; + + for (i = 0; i < n; i++) + if (compar(key, p[i]) == 0) + return p[i]; + return 0; +} + + -- cgit v1.2.3