Browse Source

don't compare elements with themselves during qsort.

this is actually a workaround for a bug in gcc, whereby it asserts
inequality of the keys being compared...
rs-1.0
Rich Felker 15 years ago
parent
commit
b24bc15f5c
  1. 2
      src/stdlib/qsort.c

2
src/stdlib/qsort.c

@ -28,7 +28,7 @@ static void sift(char *base, size_t root, size_t nel, size_t width, int (*cmp)(c
max = 2*root; max = 2*root;
if (max < nel && cmp(base+max*width, base+(max+1)*width) < 0) if (max < nel && cmp(base+max*width, base+(max+1)*width) < 0)
max++; max++;
if (cmp(base+root*width, base+max*width) < 0) { if (max && cmp(base+root*width, base+max*width) < 0) {
swap(base+root*width, base+max*width, width); swap(base+root*width, base+max*width, width);
root = max; root = max;
} else break; } else break;

Loading…
Cancel
Save