1#include <stdint.h>2#include <stdlib.h>34void *5bsearch(const void *key, const void *ary, size_t n, size_t size,6 int (*cmp)(const void *, const void *))7{8 int t;9 size_t mid, low, high;10 char *cur, *base = (char *) ary;1112 low = 0;13 high = n - 1;14 while (low <= high) {15 mid = low + (high - low) / 2;16 cur = base + mid*size;1718 if ((t = (*cmp)(key, cur)) == 0)19 return cur;20 else if (t > 0 && mid < SIZE_MAX)21 low = mid + 1;22 else if (t < 0 && mid > 0)23 high = mid - 1;24 else25 break;26 }2728 return NULL;29}