1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
void *bsearch(const void *key, const void *base, size_t num, size_t size, cmp_func_t cmp) { return __inline_bsearch(key, base, num, size, cmp); } EXPORT_SYMBOL(bsearch); NOKPROBE_SYMBOL(bsearch);
static __always_inline void *__inline_bsearch(const void *key, const void *base, size_t num, size_t size, cmp_func_t cmp) { const char *pivot; int result;
while (num > 0) { pivot = base + (num >> 1) * size; result = cmp(key, pivot);
if (result == 0) return (void *)pivot;
if (result > 0) { base = pivot + size; num--; } num >>= 1; }
return NULL; }
extern void *bsearch(const void *key, const void *base, size_t num, size_t size, cmp_func_t cmp);
|