diff options
Diffstat (limited to 'libc/stdlib/bsearch.c')
-rw-r--r-- | libc/stdlib/bsearch.c | 56 |
1 files changed, 26 insertions, 30 deletions
diff --git a/libc/stdlib/bsearch.c b/libc/stdlib/bsearch.c index 72ba2617a..04d5ab68b 100644 --- a/libc/stdlib/bsearch.c +++ b/libc/stdlib/bsearch.c @@ -10,37 +10,33 @@ */ #include <stdio.h> -static int _bsearch; /* index of element found, or where to - * insert */ +static int _bsearch; /* index of element found, or where to -char * -bsearch(key, base, num, size, cmp) -register char *key; /* item to search for */ -register char *base; /* base address */ -int num; /* number of elements */ -register int size; /* element size in bytes */ -register int (*cmp) (); /* comparison function */ + * insert */ + +char *bsearch(key, base, num, size, cmp) +register char *key; /* item to search for */ +register char *base; /* base address */ +int num; /* number of elements */ +register int size; /* element size in bytes */ +register int (*cmp) (); /* comparison function */ { - register int a, b, c, dir; + register int a, b, c, dir; - a = 0; - b = num - 1; - while (a <= b) - { - c = (a + b) >> 1; /* == ((a + b) / 2) */ - if ((dir = (*cmp) ((base + (c * size)), key))) - { - if (dir > 0) - b = c - 1; - else /* (dir < 0) */ - a = c + 1; - } - else - { - _bsearch = c; - return (base + (c * size)); - } - } - _bsearch = b; - return (NULL); + a = 0; + b = num - 1; + while (a <= b) { + c = (a + b) >> 1; /* == ((a + b) / 2) */ + if ((dir = (*cmp) ((base + (c * size)), key))) { + if (dir > 0) + b = c - 1; + else /* (dir < 0) */ + a = c + 1; + } else { + _bsearch = c; + return (base + (c * size)); + } + } + _bsearch = b; + return (NULL); } |