/* $Id$ */
-/* Release $Name$ */
-
/* bsearch( const void *, const void *, size_t, size_t, int(*)( const void *, const void * ) )
This file is part of the Public Domain C Library (PDCLib).
{
const void * pivot;
int rc;
- int corr;
+ size_t corr;
while ( nmemb )
{
/* algorithm needs -1 correction if remaining elements are an even number. */
- corr = ( nmemb % 2 ) - 1;
+ corr = nmemb % 2;
nmemb /= 2;
pivot = (const char *)base + (nmemb * size);
rc = compar( key, pivot );
if ( rc > 0 )
{
base = (const char *)pivot + size;
- nmemb += corr;
+ /* applying correction */
+ nmemb -= ( 1 - corr );
}
else if ( rc == 0 )
{
#ifdef TEST
#include <_PDCLIB_test.h>
-int compare( const void * left, const void * right )
+static int compare( const void * left, const void * right )
{
return *( (unsigned char *)left ) - *( (unsigned char *)right );
}
-int main()
+int main( void )
{
- BEGIN_TESTS;
TESTCASE( bsearch( "e", abcde, 4, 1, compare ) == NULL );
TESTCASE( bsearch( "e", abcde, 5, 1, compare ) == &abcde[4] );
TESTCASE( bsearch( "a", abcde + 1, 4, 1, compare ) == NULL );