]> git.saurik.com Git - apple/libc.git/blobdiff - stdlib/FreeBSD/bsearch.c
Libc-1081.1.3.tar.gz
[apple/libc.git] / stdlib / FreeBSD / bsearch.c
index b6988690e30103821c3f668bb36358329426a956..6af42914320fa063622d3ed5a7ede29b9d82a671 100644 (file)
@@ -77,3 +77,31 @@ bsearch(key, base0, nmemb, size, compar)
        }
        return (NULL);
 }
+
+#ifdef __BLOCKS__
+void *
+bsearch_b(key, base0, nmemb, size, compar)
+       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__ */