} else {
if (r->end + diff > r->sz) r->end = r->sz - diff;
rearrange_sectors(r, r->start + diff, r->start, r->end - r->start);
- r->start += diff; r->end += diff;
+ r->pos -= diff; r->start += diff; r->end += diff;
#ifdef DEBUG
show_recovery_buffer_map(r, "shifted up by %"PRIuSEC"", diff);
#endif
} else {
if (r->start < diff) r->start = diff;
rearrange_sectors(r, r->start - diff, r->start, r->end - r->start);
- r->start -= diff; r->end -= diff;
+ r->pos += diff; r->start -= diff; r->end -= diff;
#ifdef DEBUG
show_recovery_buffer_map(r, "shifted down by %"PRIuSEC"", diff);
#endif
#endif
n = recovery_read_sectors(r, pos, pp, nn);
#ifdef DEBUG
- printf(" -> %ld\n", n);
+ printf(" -> %zd\n", n);
#endif
if (n != nn) {
- if (n > want) n = want;
+ if (n >= 0 && n > want) n = want;
goto end;
}
r->start = pp;
#endif
n = recovery_read_sectors(r, pos, pp, nn);
#ifdef DEBUG
- printf(" -> %ld\n", n);
+ printf(" -> %zd\n", n);
#endif
if (n > 0) {
r->end += n;
end:
#ifdef DEBUG
- show_recovery_buffer_map(r, "done; return %ld", n);
+ show_recovery_buffer_map(r, "done; return %zd", n);
#endif
return (n);
}
n = recovery_read(&r, pos, want);
#ifdef DEBUG
clear_progress();
- printf(";; [retry] try reading %"PRIuSEC" .. %"PRIuSEC" -> %ld\n",
+ printf(";; [retry] try reading %"PRIuSEC" .. %"PRIuSEC" -> %zd\n",
pos, pos + want, n);
#endif
if (n > 0) {
n = recovery_read(&r, pos, want);
#ifdef DEBUG
clear_progress();
- printf(";; [bound] try reading %"PRIuSEC" .. %"PRIuSEC" -> %ld\n",
+ printf(";; [bound] try reading %"PRIuSEC" .. %"PRIuSEC" -> %zd\n",
pos, pos + want, n);
#endif
if (n == want) break;
n = recovery_read(&r, pos, want);
#ifdef DEBUG
clear_progress();
- printf(";; [limit] try reading %"PRIuSEC" .. %"PRIuSEC" -> %ld\n",
+ printf(";; [limit] try reading %"PRIuSEC" .. %"PRIuSEC" -> %zd\n",
pos, pos + want, n);
#endif
if (n < 0) n = 0;