Coverage Report

Created: 2017-10-25 09:10

/root/src/xen/xen/common/bsearch.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * A generic implementation of binary search for the Linux kernel
3
 *
4
 * Copyright (C) 2008-2009 Ksplice, Inc.
5
 * Author: Tim Abbott <tabbott@ksplice.com>
6
 *
7
 * This program is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU General Public License as
9
 * published by the Free Software Foundation; version 2.
10
 */
11
12
#include <xen/lib.h>
13
14
/*
15
 * bsearch - binary search an array of elements
16
 * @key: pointer to item being searched for
17
 * @base: pointer to first element to search
18
 * @num: number of elements
19
 * @size: size of each element
20
 * @cmp: pointer to comparison function
21
 *
22
 * This function does a binary search on the given array.  The
23
 * contents of the array should already be in ascending sorted order
24
 * under the provided comparison function.
25
 *
26
 * Note that the key need not have the same type as the elements in
27
 * the array, e.g. key could be a string and the comparison function
28
 * could compare the string with the struct's name field.  However, if
29
 * the key and elements in the array are of the same type, you can use
30
 * the same comparison function for both sort() and bsearch().
31
 */
32
void *bsearch(const void *key, const void *base, size_t num, size_t size,
33
        int (*cmp)(const void *key, const void *elt))
34
0
{
35
0
  size_t start = 0, end = num;
36
0
  int result;
37
0
38
0
  while (start < end) {
39
0
    size_t mid = start + (end - start) / 2;
40
0
41
0
    result = cmp(key, base + mid * size);
42
0
    if (result < 0)
43
0
      end = mid;
44
0
    else if (result > 0)
45
0
      start = mid + 1;
46
0
    else
47
0
      return (void *)base + mid * size;
48
0
  }
49
0
50
0
  return NULL;
51
0
}