summaryrefslogtreecommitdiff
path: root/progressmeter.c
diff options
context:
space:
mode:
authorDarren Tucker <dtucker@zip.com.au>2013-10-10 10:25:09 +1100
committerDarren Tucker <dtucker@zip.com.au>2013-10-10 10:25:09 +1100
commit5d80e4522d6238bdefe9d0c634f0e6d35a241e41 (patch)
tree5c01ec0b38427443df83177e36dd3cce38e63139 /progressmeter.c
parentad92df7e5ed26fea85adfb3f95352d6cd8e86344 (diff)
- djm@cvs.openbsd.org 2013/09/19 00:24:52
[progressmeter.c] store the initial file offset so the progress meter doesn't freak out when resuming sftp transfers. bz#2137; patch from Iain Morgan; ok dtucker@
Diffstat (limited to 'progressmeter.c')
-rw-r--r--progressmeter.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/progressmeter.c b/progressmeter.c
index 332bd3c99..bbbc7066b 100644
--- a/progressmeter.c
+++ b/progressmeter.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: progressmeter.c,v 1.39 2013/06/02 13:33:05 dtucker Exp $ */ 1/* $OpenBSD: progressmeter.c,v 1.40 2013/09/19 00:24:52 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2003 Nils Nordman. All rights reserved. 3 * Copyright (c) 2003 Nils Nordman. All rights reserved.
4 * 4 *
@@ -66,6 +66,7 @@ static void update_progress_meter(int);
66static time_t start; /* start progress */ 66static time_t start; /* start progress */
67static time_t last_update; /* last progress update */ 67static time_t last_update; /* last progress update */
68static char *file; /* name of the file being transferred */ 68static char *file; /* name of the file being transferred */
69static off_t start_pos; /* initial position of transfer */
69static off_t end_pos; /* ending position of transfer */ 70static off_t end_pos; /* ending position of transfer */
70static off_t cur_pos; /* transfer position as of last refresh */ 71static off_t cur_pos; /* transfer position as of last refresh */
71static volatile off_t *counter; /* progress counter */ 72static volatile off_t *counter; /* progress counter */
@@ -129,7 +130,7 @@ refresh_progress_meter(void)
129 int i, len; 130 int i, len;
130 int file_len; 131 int file_len;
131 132
132 transferred = *counter - cur_pos; 133 transferred = *counter - (cur_pos ? cur_pos : start_pos);
133 cur_pos = *counter; 134 cur_pos = *counter;
134 now = monotime(); 135 now = monotime();
135 bytes_left = end_pos - cur_pos; 136 bytes_left = end_pos - cur_pos;
@@ -139,7 +140,7 @@ refresh_progress_meter(void)
139 else { 140 else {
140 elapsed = now - start; 141 elapsed = now - start;
141 /* Calculate true total speed when done */ 142 /* Calculate true total speed when done */
142 transferred = end_pos; 143 transferred = end_pos - start_pos;
143 bytes_per_second = 0; 144 bytes_per_second = 0;
144 } 145 }
145 146
@@ -251,6 +252,7 @@ start_progress_meter(char *f, off_t filesize, off_t *ctr)
251{ 252{
252 start = last_update = monotime(); 253 start = last_update = monotime();
253 file = f; 254 file = f;
255 start_pos = *ctr;
254 end_pos = filesize; 256 end_pos = filesize;
255 cur_pos = 0; 257 cur_pos = 0;
256 counter = ctr; 258 counter = ctr;