/*
- * Sherlock Library -- Universal Sorter
+ * UCW Library -- Universal Sorter
*
* (c) 2001--2004 Martin Mares <mj@ucw.cz>
* (c) 2004 Robert Spalek <robert@ucw.cz>
struct fastbuf *tbuf;
uns buf_items = sorter_presort_bufsize / sizeof(SORT_KEY);
uns run_count = 0;
- SORT_KEY last_out, *array;
+ SORT_KEY last_out = { }, *array;
ASSERT(!*fb2);
if (buf_items < 2)
{
run_count++;
#ifdef SORT_UP_TO
- if (sorter_presort_bufsize < SORT_UP_TO)
+ if (sorter_presort_bufsize < (uns) SORT_UP_TO)
#endif
SWAP(out1, out2, tbuf);
if (!out1)
do P(pass)(&fb1, &fb2); while (fb1 && fb2);
#else
{
- sh_off_t run_count = ~0U, max_run_count = 0;
+ sh_off_t run_count, max_run_count = 0;
if (fb1)
max_run_count += bfilesize(fb1);
if (fb2)
max_run_count += bfilesize(fb2);
+#ifdef SORT_PRESORT
+ run_count = max_run_count / sorter_presort_bufsize;
+#else
+ run_count = max_run_count;
+#endif
if (SORT_UP_TO)
max_run_count /= SORT_UP_TO;
do
- run_count = P(pass)(&fb1, &fb2, run_count < max_run_count);
+ run_count = P(pass)(&fb1, &fb2, (run_count+1)/2 <= max_run_count);
while (fb1 && fb2);
}
#endif