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.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/mdk-stage1/dietlibc/lib/bsearch.c b/mdk-stage1/dietlibc/lib/bsearch.c
new file mode 100644
index 000000000..d2f5c74b2
--- /dev/null
+++ b/mdk-stage1/dietlibc/lib/bsearch.c
@@ -0,0 +1,20 @@
+#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);
+ return 0;
+}