diff options
author | cheloha <cheloha@cvs.openbsd.org> | 2017-12-23 20:04:24 +0000 |
---|---|---|
committer | cheloha <cheloha@cvs.openbsd.org> | 2017-12-23 20:04:24 +0000 |
commit | 9dba6024ec66fc3aad30ed0feae3e5776ed99355 (patch) | |
tree | 0a574f2a8bbaa4838ce06eb8ff67bacb2c55beef /usr.bin | |
parent | 00bea8ece88020d0bb61456f0f92929e65b73d51 (diff) |
Use the monotonic clock for logging progress in cdio(1) and ftp(1).
Keeps the progress log from blipping or stalling if, e.g., the
system time is changed in the midst of a rip or a transfer.
ok tb@ jca@
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/cdio/mmc.c | 18 | ||||
-rw-r--r-- | usr.bin/cdio/rip.c | 18 | ||||
-rw-r--r-- | usr.bin/ftp/util.c | 28 |
3 files changed, 34 insertions, 30 deletions
diff --git a/usr.bin/cdio/mmc.c b/usr.bin/cdio/mmc.c index 2866d805064..4136815241a 100644 --- a/usr.bin/cdio/mmc.c +++ b/usr.bin/cdio/mmc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mmc.c,v 1.30 2015/01/16 06:40:06 deraadt Exp $ */ +/* $OpenBSD: mmc.c,v 1.31 2017/12/23 20:04:23 cheloha Exp $ */ /* * Copyright (c) 2006 Michael Coulter <mjc@openbsd.org> * @@ -16,6 +16,7 @@ */ #include <sys/limits.h> +#include <sys/time.h> #include <sys/types.h> #include <sys/scsiio.h> #include <sys/param.h> /* setbit, isset */ @@ -27,6 +28,7 @@ #include <fcntl.h> #include <stdio.h> #include <string.h> +#include <time.h> #include <unistd.h> #include "extern.h" @@ -433,7 +435,7 @@ writetao(struct track_head *thp) int writetrack(struct track_info *tr, int track) { - struct timeval tv, otv, atv; + struct timespec ts, ots, ats; u_char databuf[65536], nblk; u_int end_lba, lba, tmp; scsireq_t scr; @@ -451,9 +453,9 @@ writetrack(struct track_info *tr, int track) scr.senselen = SENSEBUFLEN; scr.flags = SCCMD_ESCAPE|SCCMD_WRITE; - timerclear(&otv); - atv.tv_sec = 1; - atv.tv_usec = 0; + timespecclear(&ots); + ats.tv_sec = 1; + ats.tv_nsec = 0; if (get_nwa(&lba) != SCCMD_OK) { warnx("cannot get next writable address"); @@ -500,13 +502,13 @@ again: } lba += nblk; - gettimeofday(&tv, NULL); - if (lba == end_lba || timercmp(&tv, &otv, >)) { + clock_gettime(CLOCK_MONOTONIC, &ts); + if (lba == end_lba || timespeccmp(&ts, &ots, >)) { fprintf(stderr, "\rtrack %02d '%c' %08u/%08u %3d%%", track, tr->type, lba, end_lba, 100 * lba / end_lba); - timeradd(&tv, &atv, &otv); + timespecadd(&ts, &ats, &ots); } tmp = htobe32(lba); /* update lba in cdb */ memcpy(&scr.cmd[2], &tmp, sizeof(tmp)); diff --git a/usr.bin/cdio/rip.c b/usr.bin/cdio/rip.c index 64c8d1e6656..cd637c2afeb 100644 --- a/usr.bin/cdio/rip.c +++ b/usr.bin/cdio/rip.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rip.c,v 1.16 2015/08/20 22:32:41 deraadt Exp $ */ +/* $OpenBSD: rip.c,v 1.17 2017/12/23 20:04:23 cheloha Exp $ */ /* * Copyright (c) 2007 Alexey Vatchenko <av@bsdua.org> @@ -23,6 +23,7 @@ #include <sys/ioctl.h> #include <sys/scsiio.h> #include <sys/stat.h> +#include <sys/time.h> #include <scsi/scsi_all.h> #include <scsi/scsi_disk.h> @@ -37,6 +38,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <time.h> #include <unistd.h> #include "extern.h" @@ -362,7 +364,7 @@ read_data_sector(u_int32_t lba, u_char *sec, u_int32_t secsize) int read_track(struct track *ti) { - struct timeval tv, otv, atv; + struct timespec ts, ots, ats; u_int32_t i, blksize, n_sec; u_char *sec; int error; @@ -373,18 +375,18 @@ read_track(struct track *ti) if (sec == NULL) return (-1); - timerclear(&otv); - atv.tv_sec = 1; - atv.tv_usec = 0; + timespecclear(&ots); + ats.tv_sec = 1; + ats.tv_nsec = 0; for (i = 0; i < n_sec; ) { - gettimeofday(&tv, NULL); - if (timercmp(&tv, &otv, >)) { + clock_gettime(CLOCK_MONOTONIC, &ts); + if (timespeccmp(&ts, &ots, >)) { fprintf(stderr, "\rtrack %u '%c' %08u/%08u %3u%%", ti->track, (ti->isaudio) ? 'a' : 'd', i, n_sec, 100 * i / n_sec); - timeradd(&tv, &atv, &otv); + timespecadd(&ts, &ats, &ots); } error = read_data_sector(i + ti->start_lba, sec, blksize); diff --git a/usr.bin/ftp/util.c b/usr.bin/ftp/util.c index 8fa6c1b05a0..1c82f3fb478 100644 --- a/usr.bin/ftp/util.c +++ b/usr.bin/ftp/util.c @@ -1,4 +1,4 @@ -/* $OpenBSD: util.c,v 1.85 2017/09/05 05:37:35 jca Exp $ */ +/* $OpenBSD: util.c,v 1.86 2017/12/23 20:04:23 cheloha Exp $ */ /* $NetBSD: util.c,v 1.12 1997/08/18 10:20:27 lukem Exp $ */ /*- @@ -744,7 +744,7 @@ updateprogressmeter(int signo) * with flag = 0 * - After the transfer, call with flag = 1 */ -static struct timeval start; +static struct timespec start; char *action; @@ -757,21 +757,21 @@ progressmeter(int flag, const char *filename) */ static const char prefixes[] = " KMGTP"; - static struct timeval lastupdate; + static struct timespec lastupdate; static off_t lastsize; static char *title = NULL; - struct timeval now, td, wait; + struct timespec now, td, wait; off_t cursize, abbrevsize; double elapsed; int ratio, barlength, i, remaining, overhead = 30; char buf[512]; if (flag == -1) { - (void)gettimeofday(&start, NULL); + clock_gettime(CLOCK_MONOTONIC, &start); lastupdate = start; lastsize = restart_point; } - (void)gettimeofday(&now, NULL); + clock_gettime(CLOCK_MONOTONIC, &now); if (!progress || filesize < 0) return; cursize = bytes + restart_point; @@ -851,19 +851,19 @@ progressmeter(int flag, const char *filename) " %5lld %c%c ", (long long)abbrevsize, prefixes[i], prefixes[i] == ' ' ? ' ' : 'B'); - timersub(&now, &lastupdate, &wait); + timespecsub(&now, &lastupdate, &wait); if (cursize > lastsize) { lastupdate = now; lastsize = cursize; if (wait.tv_sec >= STALLTIME) { /* fudge out stalled time */ start.tv_sec += wait.tv_sec; - start.tv_usec += wait.tv_usec; + start.tv_nsec += wait.tv_nsec; } wait.tv_sec = 0; } - timersub(&now, &start, &td); - elapsed = td.tv_sec + (td.tv_usec / 1000000.0); + timespecsub(&now, &start, &td); + elapsed = td.tv_sec + (td.tv_nsec / 1000000000.0); if (flag == 1) { i = (int)elapsed / 3600; @@ -921,7 +921,7 @@ progressmeter(int flag, const char *filename) void ptransfer(int siginfo) { - struct timeval now, td; + struct timespec now, td; double elapsed; off_t bs; int meg, remaining, hh; @@ -930,9 +930,9 @@ ptransfer(int siginfo) if (!verbose && !siginfo) return; - (void)gettimeofday(&now, NULL); - timersub(&now, &start, &td); - elapsed = td.tv_sec + (td.tv_usec / 1000000.0); + clock_gettime(CLOCK_MONOTONIC, &now); + timespecsub(&now, &start, &td); + elapsed = td.tv_sec + (td.tv_nsec / 1000000000.0); bs = bytes / (elapsed == 0.0 ? 1 : elapsed); meg = 0; if (bs > (1024 * 1024)) |