]> pd.if.org Git - pdclib/blobdiff - functions/stdlib/bsearch.c
Merged branch stdio_rewrite back into trunk.
[pdclib] / functions / stdlib / bsearch.c
index e8e4f3125f53ef61677defaf38787103269c50b4..ab93b94782284e7a1414aa9b5176a50203965a3c 100644 (file)
@@ -14,18 +14,19 @@ void * bsearch( const void * key, const void * base, size_t nmemb, size_t size,
 {
     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 )
         {