|  | /* SPDX-License-Identifier: GPL-2.0 */ | 
|  | #ifndef _LINUX_BSEARCH_H | 
|  | #define _LINUX_BSEARCH_H | 
|  |  | 
|  | #include <linux/types.h> | 
|  |  | 
|  | 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); | 
|  |  | 
|  | #endif /* _LINUX_BSEARCH_H */ |