summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authordas <das@FreeBSD.org>2008-01-14 09:21:34 +0000
committerdas <das@FreeBSD.org>2008-01-14 09:21:34 +0000
commit00c36da743aaefbec9722e876ba63eed19fac1c8 (patch)
tree3137383c3994f8c968e34bf433390de9341541f0 /lib
parentbd332c3c416401f6fead22280b41ba21f28f143c (diff)
downloadFreeBSD-src-00c36da743aaefbec9722e876ba63eed19fac1c8.zip
FreeBSD-src-00c36da743aaefbec9722e876ba63eed19fac1c8.tar.gz
Changing 'r' to a size_t in the previous commit turned quicksort
into slowsort for some sequences because different parts of the code used 'r' to store two different things, one of which was signed. Clean things up by splitting 'r' into two variables, and use a more meaningful name.
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/stdlib/qsort.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/libc/stdlib/qsort.c b/lib/libc/stdlib/qsort.c
index 0958cd3..3687b05 100644
--- a/lib/libc/stdlib/qsort.c
+++ b/lib/libc/stdlib/qsort.c
@@ -112,6 +112,7 @@ qsort(void *a, size_t n, size_t es, cmp_t *cmp)
{
char *pa, *pb, *pc, *pd, *pl, *pm, *pn;
size_t d, r;
+ int cmp_result;
int swaptype, swap_cnt;
loop: SWAPINIT(a, es);
@@ -141,16 +142,16 @@ loop: SWAPINIT(a, es);
pc = pd = (char *)a + (n - 1) * es;
for (;;) {
- while (pb <= pc && (r = CMP(thunk, pb, a)) <= 0) {
- if (r == 0) {
+ while (pb <= pc && (cmp_result = CMP(thunk, pb, a)) <= 0) {
+ if (cmp_result == 0) {
swap_cnt = 1;
swap(pa, pb);
pa += es;
}
pb += es;
}
- while (pb <= pc && (r = CMP(thunk, pc, a)) >= 0) {
- if (r == 0) {
+ while (pb <= pc && (cmp_result = CMP(thunk, pc, a)) >= 0) {
+ if (cmp_result == 0) {
swap_cnt = 1;
swap(pc, pd);
pd -= es;
OpenPOWER on IntegriCloud