#include <stdlib.h>
#include <string.h>
-#define MEMCPY(dst, src, s) \
- ((s) == sizeof (int) \
- ? *(int *) (dst) = *(int *) (src) \
+#define MEMCPY(dst, src, s) \
+ ((s) == sizeof (int) \
+ ? (*(int *) (dst) = *(int *) (src), (dst)) \
: memcpy (dst, src, s))
static void
DEFUN(msort_with_tmp, (b, n, s, t),
- PTR b AND size_t n AND size_t s AND __compar_fn_t cmp AND char *t);
+ PTR b AND size_t n AND size_t s AND __compar_fn_t cmp AND char *t)
{
char *tmp;
char *b1, *b2;
n1 = n / 2;
n2 = n - n1;
b1 = b;
- b2 = &b[n1 * s];
+ b2 = (char *) b + (n1 * s);
msort_with_tmp (b1, n1, s, cmp, t);
msort_with_tmp (b2, n2, s, cmp, t);
while (n1 > 0 && n2 > 0)
{
- if (cmp (b1, b2) <= 0)
+ if ((*cmp) (b1, b2) <= 0)
{
MEMCPY (tmp, b1, s);
+ b1 += s;
--n1;
}
else
{
MEMCPY (tmp, b2, s);
+ b2 += s;
--n2;
}
- b1 += s;
tmp += s;
}
- if (n1 > 0)4)
+ if (n1 > 0)
memcpy (tmp, b1, n1 * s);
memcpy (b, t, (n - n2) * s);
}
void
DEFUN(msort, (b, n, s),
- PTR b AND size_t n AND size_t s AND __compar_fn_t cmp);
+ PTR b AND size_t n AND size_t s AND __compar_fn_t cmp)
{
msort_with_tmp (b, n, s, cmp, __alloca (n * s));
}