]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - lib/bsearch.c
IB/rdmavt: Setting of QP timeout can overflow jiffies computation
[karo-tx-linux.git] / lib / bsearch.c
index e33c179089dbff6bf97752284ad705a543328fb5..18b445b010c35a87be7480192d5aefa62583ac03 100644 (file)
 void *bsearch(const void *key, const void *base, size_t num, size_t size,
              int (*cmp)(const void *key, const void *elt))
 {
-       size_t start = 0, end = num;
+       const char *pivot;
        int result;
 
-       while (start < end) {
-               size_t mid = start + (end - start) / 2;
+       while (num > 0) {
+               pivot = base + (num >> 1) * size;
+               result = cmp(key, pivot);
 
-               result = cmp(key, base + mid * size);
-               if (result < 0)
-                       end = mid;
-               else if (result > 0)
-                       start = mid + 1;
-               else
-                       return (void *)base + mid * size;
+               if (result == 0)
+                       return (void *)pivot;
+
+               if (result > 0) {
+                       base = pivot + size;
+                       num--;
+               }
+               num >>= 1;
        }
 
        return NULL;