home *** CD-ROM | disk | FTP | other *** search
- #ifdef __STDC__
- static char sccs_id[] = "@(#) bsearch.c 1.1 " __DATE__ " HJR";
- #else
- static char sccs_id[] = "@(#) bsearch.c 1.1 26/9/90 HJR";
- #endif
-
- /* bsearch.c (c) Copyright 1990 H.Rogers */
-
- #ifdef __STDC__
- #include <stddef.h>
- #include <stdlib.h>
- #else
- #include "sys/types.h"
- void *bsearch ();
- #endif
-
- #ifdef __STDC__
- void *
- bsearch (register const void *k, const void *v, register size_t n,
- register size_t z, register int (*c) (const void *, const void *))
- #else
- void *
- bsearch (k, v, n, z, c)
- register const void *k;
- const void *v;
- register size_t n;
- register size_t z;
- register int (*c) ();
- #endif
- {
- register char *b, *m;
- register int p;
-
- b = (char *) v;
-
- while (n)
- {
- m = b + ((n >> 1) * z);
- p = (*c) (k, m);
- if (!p)
- return (m);
- if (p > 0)
- b = m + z, n = n - (n >> 1) - 1;
- else
- n = (n >> 1);
- }
-
- return (0);
- }
-