#include "lib.h"
-static int status = 0;
-
static void usage(FILE *fp)
{
fprintf(fp,
if (!mapfile) return;
open_file_on_demand(mapfile, &mapfp, "bad-sector region map");
- fprintf(mapfp, "%"PRIuSEC" %"PRIuSEC"", bad_lo, bad_hi);
+ fprintf(mapfp, "%"PRIuSEC" %"PRIuSEC" # %"PRIuSEC" sectors",
+ bad_lo, bad_hi, bad_hi - bad_lo);
if (file && id_kind(file->id) != RAW) {
store_filename(fn, file->id);
- fprintf(mapfp, " # `%s' %"PRIuSEC" .. %"PRIuSEC" of %"PRIuSEC"",
+ fprintf(mapfp, "; `%s' %"PRIuSEC" .. %"PRIuSEC" of %"PRIuSEC"",
fn, bad_lo - file->start, bad_hi - file->start,
file->end - file->start);
}
ev = &eventq.v[i];
switch (ev->ev) {
case EV_WRITE: start = ev->pos; f |= f_write; break;
- case EV_STOP:
- nsectors += ev->pos - start; f &= ~f_write; break;
+ case EV_STOP: nsectors += ev->pos - start; f &= ~f_write; break;
}
if (ev->pos >= limit) break;
if (f&f_fixup) start = ev->pos;
copy_progress.render = render_copy_progress;
progress_additem(&progress, ©_progress);
- if (nsectors != limit) {
+ if (nsectors == limit - start)
+ { ndone = start; nsectors = limit; }
+ else {
disc_progress.render = render_disc_progress;
progress_additem(&progress, &disc_progress);
}
if (f&f_stats) {
gettimeofday(&tv1, 0); t = tvdiff(&tv0, &tv1);
+ if (nsectors == limit - start) { ndone -= start; nsectors -= start; }
tot = scale_bytes((double)nsectors*SECTORSZ, &totunit);
rate = scale_bytes((double)nsectors*SECTORSZ/t, &rateunit);
moan("all done: %.1f %sB in %s -- %.1f %sB/s",
#undef f_stats
#undef f_write
- return (status);
+ return (0);
}