ref: 0a5224e17a101c6b0c1c7eb1e36dc9d3fd8ac120
dir: /src/libc/stdlib/bsearch.c/
#include <stdlib.h>
void *
bsearch(const void *key, const void *ary, size_t n, size_t size,
int (*cmp)(const void *, const void *))
{
int t;
size_t mid, low, high;
char *cur, *base = ary;
low = 0;
high = n - 1;
while (low <= high) {
mid = low + (high - low) / 2;
cur = base + mid*size;
if ((t = (*cmp)(key, cur)) == 0)
return cur;
else if (t > 0)
low = mid + 1;
else
high = mid - 1;
}
return NULL;
}