[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH] libc: Fixes fuer qsort



! libc: qsort muss auch null Objekte sortieren koennen (size_t ist
  unsigned, deswegen geht der Vergleich schief)
! libc: qsort kann ein temporaeres Objekt einfach auf dem Stack
  anzulegen anstatt malloc zu nehmen und dann zu leaken

Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
 src/lib/sort.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/src/lib/sort.c b/src/lib/sort.c
index bb813c4..8717c96 100644
--- a/src/lib/sort.c
+++ b/src/lib/sort.c
@@ -34,8 +34,14 @@ void qsort(void *base, size_t num, size_t size, int (*comparator)(const void *,
     //FIXME
     //Die Funktion heiÃ?t Qsort... Gnomesort tuts zwar meistens auch, ist aber
     //nicht Sinn der Sache, au�erdem bin ich grad zu müde für sowas :p
-    void *tmp = malloc(size);
+    unsigned char _tmp[size];
+    void* tmp = _tmp;
     int i = 0;
+
+    if (num == 0) {
+        return;
+    }
+
     while (i < (num - 1)) {
         if (comparator(base + i * size, base + (i + 1) * size) > 0) {
             memcpy(tmp, base + i * size, size);
-- 
1.6.0.2