From: Mark Wooding Date: Fri, 18 Feb 2022 18:58:47 +0000 (+0000) Subject: dvd-sector-copy.c: Extract the post-recovery code into a function. X-Git-Url: https://git.distorted.org.uk/~mdw/dvdrip/commitdiff_plain/2ac5af0308a3b9ac69d57317f25cc2db7d0f341b?ds=sidebyside dvd-sector-copy.c: Extract the post-recovery code into a function. The `goto' is ugly. --- diff --git a/dvd-sector-copy.c b/dvd-sector-copy.c index ff4e54a..d663c0b 100644 --- a/dvd-sector-copy.c +++ b/dvd-sector-copy.c @@ -466,6 +466,29 @@ static void report_bad_blocks_progress(secaddr lo, secaddr hi, int err) fflush(stdout); } +static void recovered(secaddr bad_lo, secaddr bad_hi) +{ + clear_progress(); + moan("skipping %"PRIuSEC" bad sectors (%"PRIuSEC" .. %"PRIuSEC")", + bad_hi - bad_lo, bad_lo, bad_hi); + if (mapfile) { + if (!mapfp) { + mapfp = fopen(mapfile, "w"); + if (!mapfp) + bail_syserr(errno, "failed to open bad-sector map file `%s'", + optarg); + fprintf(mapfp, "## bad sector map\n\n"); + } + fprintf(mapfp, "%"PRIuSEC" %"PRIuSEC"\n", bad_lo, bad_hi); + fflush(mapfp); + if (ferror(mapfp)) + bail_syserr(errno, "error writing bad-sector map file"); + } + if (lseek(outfd, (off_t)(bad_hi - bad_lo)*SECTORSZ, SEEK_CUR) < 0) + bail_syserr(errno, "failed to seek past bad sectors"); + status = 1; +} + static ssize_t find_good_sector(secaddr *pos_inout, secaddr end, unsigned char *buf, secaddr sz) { @@ -480,7 +503,7 @@ static ssize_t find_good_sector(secaddr *pos_inout, secaddr end, clear_progress(); moan("sector %"PRIuSEC" read ok after retry", pos); bad_lo = bad_hi = pos; - goto recovered; + return (n); } } @@ -490,7 +513,7 @@ static ssize_t find_good_sector(secaddr *pos_inout, secaddr end, if (bad_hi >= end) { clear_progress(); moan("giving up on this extent"); - n = 0; goto recovered; + recovered(bad_lo, end); *pos_inout = end; return (0); } step *= 2; if (step > end - bad_lo) step = end - bad_lo; @@ -508,29 +531,7 @@ static ssize_t find_good_sector(secaddr *pos_inout, secaddr end, if (n > 0) good = pos; else bad_hi = pos + 1; } -recovered: - if (bad_hi > bad_lo) { - clear_progress(); - moan("skipping %"PRIuSEC" bad sectors (%"PRIuSEC" .. %"PRIuSEC")", - bad_hi - bad_lo, bad_lo, bad_hi); - if (mapfile) { - if (!mapfp) { - mapfp = fopen(mapfile, "w"); - if (!mapfp) - bail_syserr(errno, "failed to open bad-sector map file `%s'", - optarg); - fprintf(mapfp, "## bad sector map\n\n"); - } - fprintf(mapfp, "%"PRIuSEC" %"PRIuSEC"\n", bad_lo, bad_hi); - fflush(mapfp); - if (ferror(mapfp)) - bail_syserr(errno, "error writing bad-sector map file"); - } - if (lseek(outfd, (off_t)(bad_hi - bad_lo)*SECTORSZ, SEEK_CUR) < 0) - bail_syserr(errno, "failed to seek past bad sectors"); - status = 1; - } - *pos_inout = bad_hi; + recovered(bad_lo, bad_hi); *pos_inout = good; return (n); }