diff options
Diffstat (limited to 'progressmeter.c')
-rw-r--r-- | progressmeter.c | 8 |
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); | |||
66 | static time_t start; /* start progress */ | 66 | static time_t start; /* start progress */ |
67 | static time_t last_update; /* last progress update */ | 67 | static time_t last_update; /* last progress update */ |
68 | static char *file; /* name of the file being transferred */ | 68 | static char *file; /* name of the file being transferred */ |
69 | static off_t start_pos; /* initial position of transfer */ | ||
69 | static off_t end_pos; /* ending position of transfer */ | 70 | static off_t end_pos; /* ending position of transfer */ |
70 | static off_t cur_pos; /* transfer position as of last refresh */ | 71 | static off_t cur_pos; /* transfer position as of last refresh */ |
71 | static volatile off_t *counter; /* progress counter */ | 72 | static 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; |