diff options
Diffstat (limited to 'mdk-stage1/dietlibc/lib/qsort.c')
-rw-r--r-- | mdk-stage1/dietlibc/lib/qsort.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/mdk-stage1/dietlibc/lib/qsort.c b/mdk-stage1/dietlibc/lib/qsort.c index 2a8824bf3..62217e142 100644 --- a/mdk-stage1/dietlibc/lib/qsort.c +++ b/mdk-stage1/dietlibc/lib/qsort.c @@ -1,3 +1,4 @@ +#include <sys/cdefs.h> #include <stdlib.h> #include <assert.h> @@ -19,7 +20,7 @@ static inline void iswap(void *a,void *b,size_t size) { } static inline void swap(void *base,size_t size,size_t a,size_t b) { - iswap(base+a*size,base+b*size,size); + iswap((char*)base+a*size,(char*)base+b*size,size); } #if 0 @@ -30,18 +31,19 @@ void dumparray() { } #endif +void isort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); void isort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) { - int i; - while (nmemb>1) { + size_t i; + while (expect(nmemb>1,1)) { char *min=base; char *tmp=min+size; for (i=1; i<nmemb; ++i) { - if (compar(tmp,min)<0) + if (expect(compar(tmp,min)<0,0)) min=tmp; tmp+=size; } iswap(min,base,size); - base+=size; + (char*)base+=size; nmemb-=1; } } @@ -55,7 +57,7 @@ void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, co static int level=0; char* v; /* pivot */ char* mid, *max, *min; - int lmemb; + size_t lmemb; #if 0 int left,right; @@ -71,8 +73,8 @@ void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, co return isort(base,nmemb,size,compar); } { - mid=base+(nmemb/2)*size; - max=base+(nmemb-1)*size; + mid=(char*)base+(nmemb/2)*size; + max=(char*)base+(nmemb-1)*size; if (compar(base,max)<0) /* a[left] < a[right] */ if (compar(base,mid)<0) /* a[left] < a[med] */ @@ -97,8 +99,8 @@ void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, co v=max; min=base; lmemb=0; for (;;) { - while (compar(min,v)<0) { min+=size; ++lmemb; } - while (compar(max-=size,v)>0) ; + while (expect(compar(min,v)<0,1)) { min+=size; ++lmemb; } + while (expect(compar(max-=size,v)>0,1)) ; if (min>=max) break; iswap(min,max,size); } |