[SYSTEM] Added default implementation of bsearch

Added impelmentation of bsearch since klibc doesn't have it yet.
This commit is contained in:
Herbert Xu 2005-10-29 15:17:47 +10:00
parent cee8660318
commit 95325feb5a
5 changed files with 31 additions and 1 deletions

View File

@ -7,6 +7,7 @@
* Use bsd_signal if it exists and signal does not.
* Stop using sysexits.h in commandcmd.
* Use stat if stat64 does not exist.
* Added default implementation of bsearch.
2005-10-26 Herbert Xu <herbert@gondor.apana.org.au>

View File

@ -23,7 +23,7 @@ dnl Checks for libraries.
dnl Checks for header files.
dnl Checks for library functions.
AC_CHECK_FUNCS(mempcpy sigsetmask stpcpy strchrnul strtoimax strtoumax)
AC_CHECK_FUNCS(bsearch mempcpy sigsetmask stpcpy strchrnul strtoimax strtoumax)
dnl Check for klibc signal.
AC_CHECK_FUNC(signal)

View File

@ -67,6 +67,7 @@
#include "show.h"
#include "jobs.h"
#include "alias.h"
#include "system.h"
#define CMDTABLESIZE 31 /* should be prime */

View File

@ -52,3 +52,26 @@ char *strchrnul(const char *s, int c)
return p;
}
#endif
#ifndef HAVE_BSEARCH
void *bsearch(const void *key, const void *base, size_t nmemb,
size_t size, int (*cmp)(const void *, const void *))
{
while (nmemb) {
size_t mididx = nmemb / 2;
const void *midobj = base + mididx * size;
int diff = cmp(key, midobj);
if (diff == 0)
return (void *)midobj;
if (diff > 0) {
base = midobj + size;
nmemb -= mididx + 1;
} else
nmemb = mididx;
}
return 0;
}
#endif

View File

@ -58,3 +58,8 @@ char *strchrnul(const char *, int);
#ifndef HAVE_STRTOUMAX
#define strtoumax strtoull
#endif
#ifndef HAVE_BSEARCH
void *bsearch(const void *, const void *, size_t, size_t,
int (*)(const void *, const void *));
#endif