Loading...
--- Libc/Libc-763.13/stdlib/FreeBSD/bsearch.c
+++ Libc/Libc-1698.100.8/stdlib/FreeBSD/bsearch.c
@@ -53,12 +53,8 @@
* look at item 3.
*/
void *
-bsearch(key, base0, nmemb, size, compar)
- const void *key;
- const void *base0;
- size_t nmemb;
- size_t size;
- int (*compar)(const void *, const void *);
+bsearch(const void *key, const void *base0, size_t nmemb, size_t size,
+ int (*compar)(const void *, const void *))
{
const char *base = base0;
size_t lim;
@@ -77,3 +73,27 @@
}
return (NULL);
}
+
+#ifdef __BLOCKS__
+void *
+bsearch_b(const void *key, const void *base0, size_t nmemb, size_t size,
+ int (^compar)(const void *, const void *))
+{
+ const char *base = base0;
+ size_t lim;
+ int cmp;
+ const void *p;
+
+ for (lim = nmemb; lim != 0; lim >>= 1) {
+ p = base + (lim >> 1) * size;
+ cmp = compar(key, p);
+ if (cmp == 0)
+ return ((void *)p);
+ if (cmp > 0) { /* key > p: move right */
+ base = (char *)p + size;
+ lim--;
+ } /* else move left */
+ }
+ return (NULL);
+}
+#endif /* __BLOCKS__ */