X-Git-Url: https://git.distorted.org.uk/~mdw/dvdrip/blobdiff_plain/f0e437bcf46d2537df214e4026fac1382c023f79..d935b4815a7e314cfe75f46ad6eb9bfb6f5f447b:/dvd-sector-copy.c diff --git a/dvd-sector-copy.c b/dvd-sector-copy.c index 908bbbc..177ce94 100644 --- a/dvd-sector-copy.c +++ b/dvd-sector-copy.c @@ -557,7 +557,7 @@ static ssize_t recovery_read(struct recoverybuf *r, } 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 @@ -577,7 +577,7 @@ static ssize_t recovery_read(struct recoverybuf *r, } 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 @@ -592,10 +592,10 @@ static ssize_t recovery_read(struct recoverybuf *r, #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; @@ -613,7 +613,7 @@ fflush(stdout); #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; @@ -628,7 +628,7 @@ fflush(stdout); end: #ifdef DEBUG - show_recovery_buffer_map(r, "done; return %ld", n); + show_recovery_buffer_map(r, "done; return %zd", n); #endif return (n); } @@ -661,7 +661,7 @@ static ssize_t find_good_sector(secaddr *pos_inout, secaddr end, 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) { @@ -685,7 +685,7 @@ static ssize_t find_good_sector(secaddr *pos_inout, secaddr end, 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; @@ -702,7 +702,7 @@ static ssize_t find_good_sector(secaddr *pos_inout, secaddr end, 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;