--- merge_b.c.orig 2008-05-21 02:51:18.000000000 -0700 +++ merge_b.c 2008-05-21 02:54:59.000000000 -0700 @@ -57,9 +57,9 @@ __FBSDID("$FreeBSD: src/lib/libc/stdlib/ #include <string.h> static void setup(u_char *, u_char *, size_t, size_t, - int (*)(const void *, const void *)); + int (^)(const void *, const void *)); static void insertionsort(u_char *, size_t, size_t, - int (*)(const void *, const void *)); + int (^)(const void *, const void *)); #define ISIZE sizeof(int) #define PSIZE sizeof(u_char *) @@ -95,11 +95,11 @@ static void insertionsort(u_char *, size * Arguments are as for qsort. */ int -mergesort(base, nmemb, size, cmp) +mergesort_b(base, nmemb, size, cmp) void *base; size_t nmemb; size_t size; - int (*cmp)(const void *, const void *); + int (^cmp)(const void *, const void *); { size_t i; int sense; @@ -141,7 +141,7 @@ mergesort(base, nmemb, size, cmp) p2 = *EVAL(p2); l2 = list1 + (p2 - list2); while (f1 < l1 && f2 < l2) { - if ((*cmp)(f1, f2) <= 0) { + if (cmp(f1, f2) <= 0) { q = f2; b = f1, t = l1; sense = -1; @@ -160,12 +160,12 @@ mergesort(base, nmemb, size, cmp) EXPONENTIAL: for (i = size; ; i <<= 1) if ((p = (b + i)) >= t) { if ((p = t - size) > b && - (*cmp)(q, p) <= sense) + cmp(q, p) <= sense) t = p; else b = p; break; - } else if ((*cmp)(q, p) <= sense) { + } else if (cmp(q, p) <= sense) { t = p; if (i == size) big = 0; @@ -174,14 +174,14 @@ EXPONENTIAL: for (i = size; ; i << b = p; while (t > b+size) { i = (((t - b) / size) >> 1) * size; - if ((*cmp)(q, p = b + i) <= sense) + if (cmp(q, p = b + i) <= sense) t = p; else b = p; } goto COPY; FASTCASE: while (i > size) - if ((*cmp)(q, + if (cmp(q, p = b + (i >>= 1)) <= sense) t = p; else @@ -261,10 +261,11 @@ COPY: b = t; void setup(list1, list2, n, size, cmp) size_t n, size; - int (*cmp)(const void *, const void *); + int (^cmp)(const void *, const void *); u_char *list1, *list2; { - int i, length, size2, tmp, sense; + size_t i, size2; + int length, tmp, sense; u_char *f1, *f2, *s, *l2, *last, *p2; size2 = size*2; @@ -336,7 +337,7 @@ static void insertionsort(a, n, size, cmp) u_char *a; size_t n, size; - int (*cmp)(const void *, const void *); + int (^cmp)(const void *, const void *); { u_char *ai, *s, *t, *u, tmp; int i;