X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/1f2f436a38f7ae2d39a943ad2898d8fed4ed2e58..e07eda1a0324f771bb1ed20ef94f3229005ee46c:/stdlib/FreeBSD/bsearch.c?ds=sidebyside diff --git a/stdlib/FreeBSD/bsearch.c b/stdlib/FreeBSD/bsearch.c index b698869..6af4291 100644 --- a/stdlib/FreeBSD/bsearch.c +++ b/stdlib/FreeBSD/bsearch.c @@ -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__ */