xref: /plan9/sys/src/ape/lib/ap/gen/bsearch.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1 #include <stdlib.h>
2 #include <stdio.h>
3 void*
bsearch(const void * key,const void * base,size_t nmemb,size_t size,int (* compar)(const void *,const void *))4 bsearch(const void* key, const void* base, size_t nmemb, size_t size,
5 		int (*compar)(const void*, const void*))
6 {
7 	long i, bot, top, new;
8 	void *p;
9 
10 	bot = 0;
11 	top = bot + nmemb - 1;
12 	while(bot <= top){
13 		new = (top + bot)/2;
14 		p = (char *)base+new*size;
15 		i = (*compar)(key, p);
16 		if(i == 0)
17 			return p;
18 		if(i > 0)
19 			bot = new + 1;
20 		else
21 			top = new - 1;
22 	}
23 	return 0;
24 }
25