13e12c5d1SDavid du Colombier #include <stdlib.h>
23e12c5d1SDavid du Colombier #include <stdio.h>
33e12c5d1SDavid du Colombier void*
bsearch(const void * key,const void * base,size_t nmemb,size_t size,int (* compar)(const void *,const void *))43e12c5d1SDavid du Colombier bsearch(const void* key, const void* base, size_t nmemb, size_t size,
53e12c5d1SDavid du Colombier int (*compar)(const void*, const void*))
63e12c5d1SDavid du Colombier {
7*219b2ee8SDavid du Colombier long i, bot, top, new;
8*219b2ee8SDavid du Colombier void *p;
93e12c5d1SDavid du Colombier
10*219b2ee8SDavid du Colombier bot = 0;
11*219b2ee8SDavid du Colombier top = bot + nmemb - 1;
12*219b2ee8SDavid du Colombier while(bot <= top){
13*219b2ee8SDavid du Colombier new = (top + bot)/2;
14*219b2ee8SDavid du Colombier p = (char *)base+new*size;
15*219b2ee8SDavid du Colombier i = (*compar)(key, p);
16*219b2ee8SDavid du Colombier if(i == 0)
17*219b2ee8SDavid du Colombier return p;
18*219b2ee8SDavid du Colombier if(i > 0)
19*219b2ee8SDavid du Colombier bot = new + 1;
203e12c5d1SDavid du Colombier else
21*219b2ee8SDavid du Colombier top = new - 1;
223e12c5d1SDavid du Colombier }
233e12c5d1SDavid du Colombier return 0;
243e12c5d1SDavid du Colombier }
25