summary refs log tree commit diff
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2005-10-29 15:17:47 +1000
committerHerbert Xu <herbert@gondor.apana.org.au>2005-10-29 15:17:47 +1000
commit95325feb5a9ef900e1f6ea5233bc3dfa40354ce0 (patch)
tree22d60ffffbdb5d4ba2d5fbc864c574303de9a0e2
parentUse stat if stat64 does not exist (diff)
downloaddash-95325feb5a9ef900e1f6ea5233bc3dfa40354ce0.tar.gz
dash-95325feb5a9ef900e1f6ea5233bc3dfa40354ce0.zip
[SYSTEM] Added default implementation of bsearch
Added impelmentation of bsearch since klibc doesn't have it yet.
Diffstat (limited to '')
-rw-r--r--ChangeLog1
-rw-r--r--configure.ac2
-rw-r--r--src/exec.c1
-rw-r--r--src/system.c23
-rw-r--r--src/system.h5
5 files changed, 31 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 17c4f1d..59f81ff 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
diff --git a/configure.ac b/configure.ac
index 5c2c2d2..bb0e815 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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)
diff --git a/src/exec.c b/src/exec.c
index 9b1a8bf..417ba8a 100644
--- a/src/exec.c
+++ b/src/exec.c
@@ -67,6 +67,7 @@
 #include "show.h"
 #include "jobs.h"
 #include "alias.h"
+#include "system.h"
 
 
 #define CMDTABLESIZE 31		/* should be prime */
diff --git a/src/system.c b/src/system.c
index 7804b29..d375de0 100644
--- a/src/system.c
+++ b/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
diff --git a/src/system.h b/src/system.h
index cc64b79..d686024 100644
--- a/src/system.h
+++ b/src/system.h
@@ -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
ref='/catgirl/commit/ui.c?h=1.9&id=e20c64d5d72e341abf8dc3cb38d7cfec371faafc&follow=1'>Reorganize UI code for the umpteenth timeJune McEnroe It's actually in a good state now, I think. 2019-02-21Replace "view" with "window"June McEnroe I think originally I didn't want to use the same word as curses WINDOW but it's really much clearer for the user if they're just called windows. UI code probably needs yet another rewrite though. Still feels messy. 2019-02-21Remove ROT13June McEnroe It's just not convenient when it can only do the whole line... 2019-02-21Clean up man pageJune McEnroe 2019-01-26Draw UI before connectingJune McEnroe Otherwise the "Traveling" message isn't visible while connecting. 2019-01-25Avoid unused variable warnings with getyxJune McEnroe 2019-01-25Add GNU/Linux build instructionsJune McEnroe