1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _LINUX_BSEARCH_H
3#define _LINUX_BSEARCH_H
4
5#include <linux/types.h>
6
7static __always_inline
8void *__inline_bsearch(const void *key, const void *base, size_t num, size_t size, cmp_func_t cmp)
9{
10 const char *pivot;
11 int result;
12
13 while (num > 0) {
14 pivot = base + (num >> 1) * size;
15 result = cmp(key, pivot);
16
17 if (result == 0)
18 return (void *)pivot;
19
20 if (result > 0) {
21 base = pivot + size;
22 num--;
23 }
24 num >>= 1;
25 }
26
27 return NULL;
28}
29
30extern void *bsearch(const void *key, const void *base, size_t num, size_t size, cmp_func_t cmp);
31
32#endif /* _LINUX_BSEARCH_H */
33

source code of linux/include/linux/bsearch.h