home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- *
- * $Source: /unixb/home/unixlib/source/unixlib37/src/c/RCS/bsearch,v $
- * $Date: 1996/04/19 21:26:42 $
- * $Revision: 1.1 $
- * $State: Rel $
- * $Author: simon $
- *
- * $Log: bsearch,v $
- * Revision 1.1 1996/04/19 21:26:42 simon
- * Initial revision
- *
- ***************************************************************************/
-
- static const char rcs_id[] = "$Id: bsearch,v 1.1 1996/04/19 21:26:42 simon Rel $";
-
- #include <sys/syslib.h>
- #include <stddef.h>
- #include <stdlib.h>
-
- void *
- bsearch (register const void *k, const void *v, register size_t n,
- register size_t z, register int (*c) (const void *, const void *))
-
- {
- register char *b, *m;
- register int p;
-
- b = (char *) v;
-
- while (n)
- {
- m = b + ((n >> 1) * z);
- p = __funcall ((*c), (k, m));
- if (!p)
- return (m);
- if (p > 0)
- b = m + z, n = n - (n >> 1) - 1;
- else
- n = (n >> 1);
- }
-
- return (0);
- }
-