mirror of
https://salsa.debian.org/debian/dash.git
synced 2026-01-26 15:39:05 +00:00
[SYSTEM] Added default implementation of bsearch
Added impelmentation of bsearch since klibc doesn't have it yet.
This commit is contained in:
parent
cee8660318
commit
95325feb5a
@ -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>
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -67,6 +67,7 @@
|
||||
#include "show.h"
|
||||
#include "jobs.h"
|
||||
#include "alias.h"
|
||||
#include "system.h"
|
||||
|
||||
|
||||
#define CMDTABLESIZE 31 /* should be prime */
|
||||
|
||||
23
src/system.c
23
src/system.c
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user