DF-5696 / fix.diff
--- a/sys/libkern/qsort.c +++ b/sys/libkern/qsort.c @@ -38,7 +38,7 @@ typedef int cmp_t(const void *, const void *); #endif static __inline char *med3(char *, char *, char *, cmp_t *, void *); -static __inline void swapfunc(char *, char *, int, int); +static __inline void swapfunc(char *, char *, size_t, int); #define min(a, b) (a) < (b) ? (a) : (b) @@ -60,7 +60,7 @@ es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1; static __inline void -swapfunc(char *a, char *b, int n, int swaptype) +swapfunc(char *a, char *b, size_t n, int swaptype) { if(swaptype <= 1) swapcode(long, a, b, n) @@ -106,7 +106,8 @@ #endif { char *pa, *pb, *pc, *pd, *pl, *pm, *pn; - int d, r, swaptype, swap_cnt; + int r, swaptype, swap_cnt; + size_t d, r2; loop: SWAPINIT(a, es); swap_cnt = 0; @@ -166,20 +167,20 @@ } pn = (char *)a + n * es; - r = min(pa - (char *)a, pb - pa); - vecswap(a, pb - r, r); - r = min(pd - pc, pn - pd - es); - vecswap(pb, pn - r, r); - if ((r = pb - pa) > es) + r2 = min(pa - (char *)a, pb - pa); + vecswap(a, pb - r2, r2); + r2 = min(pd - pc, pn - pd - es); + vecswap(pb, pn - r2, r2); + if ((r2 = pb - pa) > es) #ifdef I_AM_KQSORT_R - kqsort_r(a, r / es, es, thunk, cmp); + kqsort_r(a, r2 / es, es, thunk, cmp); #else - kqsort(a, r / es, es, cmp); + kqsort(a, r2 / es, es, cmp); #endif - if ((r = pd - pc) > es) { + if ((r2 = pd - pc) > es) { /* Iterate rather than recurse to save stack space */ - a = pn - r; - n = r / es; + a = pn - r2; + n = r2 / es; goto loop; } } |