Index: fusl/src/search/lsearch.c |
diff --git a/fusl/src/search/lsearch.c b/fusl/src/search/lsearch.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..63f319223a0abcd8c9f70544c0500bcdf9a6195b |
--- /dev/null |
+++ b/fusl/src/search/lsearch.c |
@@ -0,0 +1,31 @@ |
+#include <search.h> |
+#include <string.h> |
+ |
+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(p[i], key) == 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(p[i], key) == 0) |
+ return p[i]; |
+ return 0; |
+} |
+ |
+ |