dvd-sector-copy.c (main): Use `last' to track final event for fixup.
authorMark Wooding <mdw@distorted.org.uk>
Sat, 9 Apr 2022 16:51:43 +0000 (17:51 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 9 Apr 2022 16:51:43 +0000 (17:51 +0100)
The `start' variable was doing double-duty, resulting in a possibly
erroneous value if the last event is `EV_WRITE', and a possibly
erroneous count of sectors.  Use `last' instead, because nothing else is
using this.

dvd-sector-copy.c

index 27ec397..4a5d0bc 100644 (file)
@@ -1115,19 +1115,19 @@ int main(int argc, char *argv[])
 #ifdef DEBUG
   dump_eventq("initial");
 #endif
-  for (i = 0, f &= ~f_write, start = 0; i < eventq.n; i++) {
+  for (i = 0, f &= ~f_write, start = last = 0; i < eventq.n; i++) {
     ev = &eventq.v[i];
     if (ev->ev == EV_WRITE) { start = ev->pos; f |= f_write; }
     if (ev->pos >= limit) break;
     if (ev->ev == EV_STOP) { nsectors += ev->pos - start; f &= ~f_write; }
-    if (f&f_fixup) start = ev->pos;
+    if (f&f_fixup) last = ev->pos;
   }
   eventq.n = i;
 #ifdef DEBUG
   dump_eventq("trimmed");
 #endif
   if (f&f_fixup) {
-    put_event(EV_WRITE, 0, start);
+    put_event(EV_WRITE, 0, last);
     f |= f_write;
   }
   if (f&f_write) {