From: ceriel Date: Tue, 29 Jan 1991 14:37:37 +0000 (+0000) Subject: fixed problem with qsort(): did not work for objects whose size did not X-Git-Tag: release-5-5~1276 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=48e0d9825a98a371472da739c32af750d9749d83;p=ack.git fixed problem with qsort(): did not work for objects whose size did not fit in an int --- diff --git a/lang/cem/libcc/gen/qsort.c b/lang/cem/libcc/gen/qsort.c index 0095702b0..4b4fb3972 100644 --- a/lang/cem/libcc/gen/qsort.c +++ b/lang/cem/libcc/gen/qsort.c @@ -9,7 +9,10 @@ qsort(base, nel, width, compar) int (*compar)(); { qcompar = compar; - qsort1(base, base + (nel - 1) * width, width); + if (sizeof(int) < sizeof(char *)) { + qsort1(base, base + (nel - 1) * (long) width, width); + } + else qsort1(base, base + (nel - 1) * width, width); } static @@ -25,7 +28,12 @@ qsort1(a1, a2, width) if (a2 <= a1) return; left = a1; right = a2; - lefteq = righteq = a1 + width * (((a2-a1)+width)/(2*width)); + if (sizeof(int) < sizeof(char *)) { + lefteq = righteq = a1 + width * + ((((long)a2-(long)a1)+width)/(2*width)); + } + else lefteq = righteq = a1 + width * + (((a2-a1)+width)/(2*width)); /* Pick an element in the middle of the array. We will collect the equals around it.