upstream commit

Improve precision of progressmeter for sftp and scp by
 storing sub-second timestamps.  Pointed out by mmcc@, ok deraadt@ markus@

Upstream-ID: 38fd83a3d83dbf81c8ff7b5d1302382fe54970ab
diff --git a/progressmeter.c b/progressmeter.c
index 319b747..3a45540 100644
--- a/progressmeter.c
+++ b/progressmeter.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: progressmeter.c,v 1.41 2015/01/14 13:54:13 djm Exp $ */
+/* $OpenBSD: progressmeter.c,v 1.42 2016/03/02 22:42:40 dtucker Exp $ */
 /*
  * Copyright (c) 2003 Nils Nordman.  All rights reserved.
  *
@@ -63,8 +63,8 @@
 /* signal handler for updating the progress meter */
 static void update_progress_meter(int);
 
-static time_t start;		/* start progress */
-static time_t last_update;	/* last progress update */
+static double start;		/* start progress */
+static double last_update;	/* last progress update */
 static const char *file;	/* name of the file being transferred */
 static off_t start_pos;		/* initial position of transfer */
 static off_t end_pos;		/* ending position of transfer */
@@ -120,9 +120,8 @@
 refresh_progress_meter(void)
 {
 	char buf[MAX_WINSIZE + 1];
-	time_t now;
 	off_t transferred;
-	double elapsed;
+	double elapsed, now;
 	int percent;
 	off_t bytes_left;
 	int cur_speed;
@@ -132,7 +131,7 @@
 
 	transferred = *counter - (cur_pos ? cur_pos : start_pos);
 	cur_pos = *counter;
-	now = monotime();
+	now = monotime_double();
 	bytes_left = end_pos - cur_pos;
 
 	if (bytes_left > 0)
@@ -250,7 +249,7 @@
 void
 start_progress_meter(const char *f, off_t filesize, off_t *ctr)
 {
-	start = last_update = monotime();
+	start = last_update = monotime_double();
 	file = f;
 	start_pos = *ctr;
 	end_pos = filesize;