View | Details | Raw Unified | Return to bug 2434 | Differences between
and this patch

Collapse All | Expand All

(-)a/progressmeter.c (-9 / +27 lines)
Lines 75-80 static int bytes_per_second; /* current speed in bytes per second */ Link Here
75
static int win_size;		/* terminal window size */
75
static int win_size;		/* terminal window size */
76
static volatile sig_atomic_t win_resized; /* for window resizing */
76
static volatile sig_atomic_t win_resized; /* for window resizing */
77
77
78
static char displayname[2][MAX_WINSIZE];
79
static volatile sig_atomic_t displayname_num;
80
78
/* units for format_size */
81
/* units for format_size */
79
static const char unit[] = " KMGT";
82
static const char unit[] = " KMGT";
80
83
Lines 119-132 format_size(char *buf, int size, off_t bytes) Link Here
119
void
122
void
120
refresh_progress_meter(void)
123
refresh_progress_meter(void)
121
{
124
{
122
	char buf[MAX_WINSIZE + 1], displayname[MAX_WINSIZE];
125
	char buf[MAX_WINSIZE + 1];
123
	off_t transferred;
126
	off_t transferred;
124
	double elapsed, now;
127
	double elapsed, now;
125
	int percent;
128
	int percent;
126
	off_t bytes_left;
129
	off_t bytes_left;
127
	int cur_speed;
130
	int cur_speed;
128
	int hours, minutes, seconds;
131
	int hours, minutes, seconds;
129
	int file_len;
130
132
131
	transferred = *counter - (cur_pos ? cur_pos : start_pos);
133
	transferred = *counter - (cur_pos ? cur_pos : start_pos);
132
	cur_pos = *counter;
134
	cur_pos = *counter;
Lines 155-172 refresh_progress_meter(void) Link Here
155
	} else
157
	} else
156
		bytes_per_second = cur_speed;
158
		bytes_per_second = cur_speed;
157
159
158
	/* filename */
159
	file_len = win_size - 35;
160
	displayname[0] = '\0';
161
	if (file_len > 0)
162
		snprintf(displayname, file_len, "%*s ", file_len * -1, file);
163
164
	/* percent of transfer done */
160
	/* percent of transfer done */
165
	if (end_pos == 0 || cur_pos == end_pos)
161
	if (end_pos == 0 || cur_pos == end_pos)
166
		percent = 100;
162
		percent = 100;
167
	else
163
	else
168
		percent = ((float)cur_pos / end_pos) * 100;
164
		percent = ((float)cur_pos / end_pos) * 100;
169
	snprintf(buf, sizeof(buf), "\r%s %3d%% ", displayname, percent);
165
	snprintf(buf, sizeof(buf), "\r%s %3d%% ", displayname[displayname_num],
166
	    percent);
170
167
171
	/* amount transferred */
168
	/* amount transferred */
172
	format_size(buf + strlen(buf), win_size - strlen(buf),
169
	format_size(buf + strlen(buf), win_size - strlen(buf),
Lines 216-221 refresh_progress_meter(void) Link Here
216
	last_update = now;
213
	last_update = now;
217
}
214
}
218
215
216
void
217
update_progress_displayname(void)
218
{
219
	sig_atomic_t n = displayname_num ^ 1;
220
	int len, cols, file_len = win_size - 36;
221
	char buf[MAX_WINSIZE];
222
223
	displayname[n][0] = '\0';
224
	if (file_len > 0) {
225
		cols = file_len;
226
		if (snmprintf(displayname[n], sizeof displayname[0], &cols,
227
		    "%*s", file_len * -1, file) == -1) {
228
			strnvis(buf, file, sizeof buf, VIS_SAFE);
229
			snprintf(displayname[n], sizeof displayname[0], "%*s",
230
			    file_len * -1 , buf);
231
		}
232
	}
233
	displayname_num = n;
234
}
235
219
/*ARGSUSED*/
236
/*ARGSUSED*/
220
static void
237
static void
221
update_progress_meter(int ignore)
238
update_progress_meter(int ignore)
Lines 249-254 start_progress_meter(const char *f, off_t filesize, off_t *ctr) Link Here
249
	bytes_per_second = 0;
266
	bytes_per_second = 0;
250
267
251
	setscreensize();
268
	setscreensize();
269
	update_progress_displayname();
252
	if (can_output())
270
	if (can_output())
253
		refresh_progress_meter();
271
		refresh_progress_meter();
254
272
(-)a/progressmeter.h (+1 lines)
Lines 24-27 Link Here
24
 */
24
 */
25
25
26
void	start_progress_meter(const char *, off_t, off_t *);
26
void	start_progress_meter(const char *, off_t, off_t *);
27
void	update_progress_displayname(void);
27
void	stop_progress_meter(void);
28
void	stop_progress_meter(void);
(-)a/scp.c (+1 lines)
Lines 561-566 scpio(void *_cnt, size_t s) Link Here
561
	*cnt += s;
561
	*cnt += s;
562
	if (limit_kbps > 0)
562
	if (limit_kbps > 0)
563
		bandwidth_limit(&bwlimit, s);
563
		bandwidth_limit(&bwlimit, s);
564
	update_progress_displayname();
564
	return 0;
565
	return 0;
565
}
566
}
566
567
(-)a/sftp-client.c (-1 / +1 lines)
Lines 95-100 sftpio(void *_bwlimit, size_t amount) Link Here
95
	struct bwlimit *bwlimit = (struct bwlimit *)_bwlimit;
95
	struct bwlimit *bwlimit = (struct bwlimit *)_bwlimit;
96
96
97
	bandwidth_limit(bwlimit, amount);
97
	bandwidth_limit(bwlimit, amount);
98
	update_progress_displayname();
98
	return 0;
99
	return 0;
99
}
100
}
100
101
101
- 

Return to bug 2434