author | Fangrui Song <i@maskray.me> | 2018年07月21日 17:34:00 -0700 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2018年07月23日 15:14:29 -0400 |
commit | 3d8322c7ad659210a4c8770ef455ca729ce7f395 (patch) | |
tree | 25de8d1283cf1945c34aa5ccf444c46846a846da /src/stdlib/bsearch.c | |
parent | f2c6dbe2442027ed8fe0fa869918e41f495534d8 (diff) | |
download | musl-3d8322c7ad659210a4c8770ef455ca729ce7f395.tar.gz |
-rw-r--r-- | src/stdlib/bsearch.c | 12 |
diff --git a/src/stdlib/bsearch.c b/src/stdlib/bsearch.c index 61d89367..fe050ea3 100644 --- a/src/stdlib/bsearch.c +++ b/src/stdlib/bsearch.c @@ -7,13 +7,13 @@ void *bsearch(const void *key, const void *base, size_t nel, size_t width, int ( while (nel > 0) { try = (char *)base + width*(nel/2); sign = cmp(key, try); - if (!sign) return try; - else if (nel == 1) break; - else if (sign < 0) + if (sign < 0) { nel /= 2; - else { - base = try; - nel -= nel/2; + } else if (sign > 0) { + base = (char *)try + width; + nel -= nel/2+1; + } else { + return try; } } return NULL; |