summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/lib/bsearch.c
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1/dietlibc/lib/bsearch.c')
-rw-r--r--mdk-stage1/dietlibc/lib/bsearch.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/mdk-stage1/dietlibc/lib/bsearch.c b/mdk-stage1/dietlibc/lib/bsearch.c
index d2f5c74b2..14605f1f6 100644
--- a/mdk-stage1/dietlibc/lib/bsearch.c
+++ b/mdk-stage1/dietlibc/lib/bsearch.c
@@ -1,20 +1,20 @@
+#include <assert.h>
#include <stdlib.h>
void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) {
- const char *v, *r;
- int res;
- r=base+(nmemb-1)*size;
- do {
- register int num=nmemb/2;
- v=base+num*size;
- if ((res=compar(key,v))<0) {
- r=v-size;
- nmemb=num;
- } else {
- if (res==0) return (void*)v;
- base=v+size;
- nmemb-=num;
- }
- } while ((char*)base<=r);
+ size_t m;
+ while (nmemb) {
+ int tmp;
+ void *p;
+ m=nmemb/2;
+ p=(void *) (((const char *) base) + (m * size));
+ if ((tmp=(*compar)(key,p))<0) {
+ nmemb=m;
+ } else if (tmp>0) {
+ base=p+size;
+ nmemb-=m+1;
+ } else
+ return p;
+ }
return 0;
}