From 00c36da743aaefbec9722e876ba63eed19fac1c8 Mon Sep 17 00:00:00 2001 From: das Date: Mon, 14 Jan 2008 09:21:34 +0000 Subject: 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. --- lib/libc/stdlib/qsort.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'lib/libc/stdlib/qsort.c') 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; -- cgit v1.1