about summary refs log tree commit diff
path: root/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/bsearch.c31
-rw-r--r--stdlib/stdlib.h4
2 files changed, 7 insertions, 28 deletions
diff --git a/stdlib/bsearch.c b/stdlib/bsearch.c
index 55b4f37527..4a357efeef 100644
--- a/stdlib/bsearch.c
+++ b/stdlib/bsearch.c
@@ -17,32 +17,7 @@
 
 #include <stdlib.h>
 
-
-/* Perform a binary search for KEY in BASE which has NMEMB elements
-   of SIZE bytes each.  The comparisons are done by (*COMPAR)().  */
-void *
-bsearch (const void *key, const void *base, size_t nmemb, size_t size,
-	 int (*compar) (const void *, const void *))
-{
-  size_t l, u, idx;
-  const void *p;
-  int comparison;
-
-  l = 0;
-  u = nmemb;
-  while (l < u)
-    {
-      idx = (l + u) / 2;
-      p = (void *) (((const char *) base) + (idx * size));
-      comparison = (*compar) (key, p);
-      if (comparison < 0)
-	u = idx;
-      else if (comparison > 0)
-	l = idx + 1;
-      else
-	return (void *) p;
-    }
-
-  return NULL;
-}
+#undef  __extern_inline
+#define __extern_inline /* Empty, so we get a normal definition.  */
+#include <bits/stdlib-bsearch.h>
 libc_hidden_def (bsearch)
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index b49a41cc5d..fa1175c028 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -756,6 +756,10 @@ extern void *bsearch (const void *__key, const void *__base,
 		      size_t __nmemb, size_t __size, __compar_fn_t __compar)
      __nonnull ((1, 2, 5)) __wur;
 
+#ifdef __USE_EXTERN_INLINES
+# include <bits/stdlib-bsearch.h>
+#endif
+
 /* Sort NMEMB elements of BASE, of SIZE bytes each,
    using COMPAR to perform the comparisons.  */
 extern void qsort (void *__base, size_t __nmemb, size_t __size,