:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / lib / msvcrt / stdlib / bsearch.c
1 /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
2 #include <msvcrt/stdlib.h>
3
4 void *
5 bsearch(const void *key, const void *base0, size_t nelem,
6         size_t size, int (*cmp)(const void *ck, const void *ce))
7 {
8   char *base = (char *)base0;
9   int lim, cmpval;
10   void *p;
11
12   for (lim = nelem; lim != 0; lim >>= 1)
13   {
14     p = base + (lim >> 1) * size;
15     cmpval = (*cmp)(key, p);
16     if (cmpval == 0)
17       return p;
18     if (cmpval > 0)
19     {                           /* key > p: move right */
20       base = (char *)p + size;
21       lim--;
22     } /* else move left */
23   }
24   return 0;
25 }