diff options
Diffstat (limited to 'src/stdlib/qsort.c')
| -rw-r--r-- | src/stdlib/qsort.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/stdlib/qsort.c b/src/stdlib/qsort.c index da4c5c15..f0ccba33 100644 --- a/src/stdlib/qsort.c +++ b/src/stdlib/qsort.c @@ -1,11 +1,29 @@ #include <stdlib.h> +#include "_qsort.h" /** sort an array **/ void qsort(void * base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) { - (void)base; (void)nmemb; (void)size; (void)compar; - /* TODO */ + struct __qs qs = { + base, + size, + compar, + { 0 }, + NULL, + }; + + if (size <= sizeof(qs.buf)) { + qs.swap = qs.buf; + } else { + qs.swap = malloc(size); + } + + __qsort(&qs, 0, nmemb); + + if (qs.swap != qs.buf) { + free(qs.swap); + } } /*** |
