XSI search.h API implementation by Szabolcs Nagy
[musl] / src / search / lsearch.c
diff --git a/src/search/lsearch.c b/src/search/lsearch.c
new file mode 100644 (file)
index 0000000..63f3192
--- /dev/null
@@ -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;
+}
+
+