2 week bump.

--
Scott Cheloha

> On Aug 19, 2017, at 9:40 AM, Scott Cheloha <scottchel...@gmail.com> wrote:
> 
> Hi,
> 
> Same deal here as in dd(1).  We're displaying an elapsed time
> so we want a monotonic clock.
> 
> Because everything printed is derived from elapsed, this one
> was relatively simple.
> 
> Light testing shows this fixes the corner case where the host
> time is wound backward mid-transfer.
> 
> Feedback?
> 
> --
> Scott Cheloha
> 
> Index: usr.bin/ftp/util.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/ftp/util.c,v
> retrieving revision 1.84
> diff -u -p -r1.84 util.c
> --- usr.bin/ftp/util.c        21 Jan 2017 08:33:07 -0000      1.84
> +++ usr.bin/ftp/util.c        19 Aug 2017 14:24:44 -0000
> @@ -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 *file
>        */
>       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;
> @@ -849,19 +849,19 @@ progressmeter(int flag, const char *file
>           " %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;
> @@ -919,7 +919,7 @@ progressmeter(int flag, const char *file
> void
> ptransfer(int siginfo)
> {
> -     struct timeval now, td;
> +     struct timespec now, td;
>       double elapsed;
>       off_t bs;
>       int meg, remaining, hh;
> @@ -928,9 +928,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))

Reply via email to