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