Index: fusl/src/stdlib/bsearch.c |
diff --git a/fusl/src/stdlib/bsearch.c b/fusl/src/stdlib/bsearch.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..61d89367e7b9140fa7dc067558427dc2aeed223c |
--- /dev/null |
+++ b/fusl/src/stdlib/bsearch.c |
@@ -0,0 +1,20 @@ |
+#include <stdlib.h> |
+ |
+void *bsearch(const void *key, const void *base, size_t nel, size_t width, int (*cmp)(const void *, const void *)) |
+{ |
+ void *try; |
+ int sign; |
+ while (nel > 0) { |
+ try = (char *)base + width*(nel/2); |
+ sign = cmp(key, try); |
+ if (!sign) return try; |
+ else if (nel == 1) break; |
+ else if (sign < 0) |
+ nel /= 2; |
+ else { |
+ base = try; |
+ nel -= nel/2; |
+ } |
+ } |
+ return NULL; |
+} |