dvd-sector-copy.c: Check `n' nonnegative before comparing with unsigned.
[dvdrip] / dvd-sector-copy.c
index 908bbbc..177ce94 100644 (file)
@@ -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;