On Tue, 03 Jan 2017 21:51:12 +0100, Alexander Bluhm wrote:

> I think it would be nicer to keep the char * a variable and remove
> the (char *) casts instead.

How about this?

 - todd

Index: lib/libc/stdlib/qsort.c
===================================================================
RCS file: /cvs/src/lib/libc/stdlib/qsort.c,v
retrieving revision 1.13
diff -u -p -u -r1.13 qsort.c
--- lib/libc/stdlib/qsort.c     13 Sep 2015 08:31:47 -0000      1.13
+++ lib/libc/stdlib/qsort.c     3 Jan 2017 23:39:24 -0000
@@ -90,16 +90,16 @@ qsort(void *aa, size_t n, size_t es, int
 
 loop:  SWAPINIT(a, es);
        if (n < 7) {
-               for (pm = (char *)a + es; pm < (char *) a + n * es; pm += es)
-                       for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
+               for (pm = a + es; pm < a + n * es; pm += es)
+                       for (pl = pm; pl > a && cmp(pl - es, pl) > 0;
                             pl -= es)
                                swap(pl, pl - es);
                return;
        }
-       pm = (char *)a + (n / 2) * es;
+       pm = a + (n / 2) * es;
        if (n > 7) {
-               pl = (char *)a;
-               pn = (char *)a + (n - 1) * es;
+               pl = a;
+               pn = a + (n - 1) * es;
                if (n > 40) {
                        d = (n / 8) * es;
                        pl = med3(pl, pl + d, pl + 2 * d, cmp);
@@ -109,9 +109,9 @@ loop:       SWAPINIT(a, es);
                pm = med3(pl, pm, pn, cmp);
        }
        swap(a, pm);
-       pa = pb = (char *)a + es;
+       pa = pb = a + es;
 
-       pc = pd = (char *)a + (n - 1) * es;
+       pc = pd = a + (n - 1) * es;
        for (;;) {
                while (pb <= pc && (cmp_result = cmp(pb, a)) <= 0) {
                        if (cmp_result == 0) {
@@ -134,8 +134,8 @@ loop:       SWAPINIT(a, es);
                pc -= es;
        }
 
-       pn = (char *)a + n * es;
-       r = min(pa - (char *)a, pb - pa);
+       pn = a + n * es;
+       r = min(pa - a, pb - pa);
        vecswap(a, pb - r, r);
        r = min(pd - pc, pn - pd - es);
        vecswap(pb, pn - r, r);

Reply via email to