Mes C Library: stdlib/qsort.c: Fix qswap segfault.
authorPaul Dersey <pdersey@gmail.com>
Fri, 22 Jan 2021 15:56:36 +0000 (10:56 -0500)
committerJan (janneke) Nieuwenhuizen <janneke@gnu.org>
Sat, 23 Jan 2021 07:43:05 +0000 (08:43 +0100)
* stdlib/qsort.c (qswap): Remove hard coded buffer size.  Allow
swapping of objects of arbitrary size.

lib/stdlib/qsort.c

index 4f3e61cb82558342fe19e0961447fde992ccfdb2..68352f5ce9b8e4984ba1977ba0f171779a040942 100644 (file)
@@ -1,6 +1,7 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
  * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ * Copyright © 2021 Paul Dersey <pdersey@gmail.com>
  *
  * This file is part of GNU Mes.
  *
 void
 qswap (void *a, void *b, size_t size)
 {
-  char *buf[8];
-  memcpy (buf, a, size);
-  memcpy (a, b, size);
-  memcpy (b, buf, size);
+  char *pa = a;
+  char *pb = b;
+  do
+  {
+    char tmp = *pa;
+    *pa++ = *pb;
+    *pb++ = tmp;
+  } while (--size > 0);
 }
 
 size_t