summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/lib/qsort.c
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1/dietlibc/lib/qsort.c')
-rw-r--r--mdk-stage1/dietlibc/lib/qsort.c22
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);
}