Loading...
stdlib/FreeBSD/bsearch.c Libc-763.13 Libc-1669.0.4
--- Libc/Libc-763.13/stdlib/FreeBSD/bsearch.c
+++ Libc/Libc-1669.0.4/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__ */