summaryrefslogtreecommitdiff
path: root/src/stdlib/qsort.c
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2020-08-15 11:26:40 -0400
committerJakob Kaivo <jkk@ung.org>2020-08-15 11:26:40 -0400
commit3d38446f71e16735b2525f37dd1eb87d91c0e895 (patch)
tree491d0e896be22a01e600298853376eb23940b084 /src/stdlib/qsort.c
parent8306c893b485d1931d4055b0ae7d9f794ceaaaa8 (diff)
first draft of qsort()
Diffstat (limited to 'src/stdlib/qsort.c')
-rw-r--r--src/stdlib/qsort.c22
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);
+ }
}
/***