hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/include/linux/bsearch.h
....@@ -4,7 +4,29 @@
44
55 #include <linux/types.h>
66
7
-void *bsearch(const void *key, const void *base, size_t num, size_t size,
8
- int (*cmp)(const void *key, const void *elt));
7
+static __always_inline
8
+void *__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
+
30
+extern void *bsearch(const void *key, const void *base, size_t num, size_t size, cmp_func_t cmp);
931
1032 #endif /* _LINUX_BSEARCH_H */