qsort patch from Paul Eggert

svn: r2252
This commit is contained in:
Matthew Flatt 2006-02-16 02:59:36 +00:00
parent 047b1e8f48
commit 73fb3d2bac

View File

@ -1,25 +1,31 @@
#if defined(sparc) || defined(__sparc) || defined(__sparc__) #if defined(sun) || defined(__sun) || defined(__sun__)
/* Sun's qsort() is broken. */ /* Sun's qsort() is broken. */
#define MAXSTACK 100 #define MAXSTACK 100
static void exchange(void *a, void *b, size_t size) { static void exchange(void *a, void *b, size_t size) {
size_t i; size_t i;
int *ai = (int *) a;
int *bi = (int *) b;
char *ac;
char *bc;
/****************** /******************
* exchange a,b * * exchange a,b *
******************/ ******************/
for (i = sizeof(int); i <= size; i += sizeof(int)) { for (i = sizeof(int); i <= size; i += sizeof(int)) {
int t = *((int *)a); int t = *ai;
*(((int *)a)++) = *((int *)b); *ai++ = *bi;
*(((int *)b)++) = t; *bi++ = t;
} }
ac = (char *) ai;
bc = (char *) bi;
for (i = i - sizeof(int) + 1; i <= size; i++) { for (i = i - sizeof(int) + 1; i <= size; i++) {
char t = *((char *)a); char t = *ac;
*(((char *)a)++) = *((char *)b); *ac++ = *bc;
*(((char *)b)++) = t; *bc++ = t;
} }
} }