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

Collapse All | Expand All

(-)a/progressmeter.c (-20 / +33 lines)
Lines 119-132 format_size(char *buf, int size, off_t bytes) Link Here
119
void
119
void
120
refresh_progress_meter(int force_update)
120
refresh_progress_meter(int force_update)
121
{
121
{
122
	char buf[MAX_WINSIZE + 1];
122
	char buf[MAX_WINSIZE + 1], buf2[MAX_WINSIZE + 1];
123
	off_t transferred;
123
	off_t transferred;
124
	double elapsed, now;
124
	double elapsed, now;
125
	int percent;
125
	int percent;
126
	off_t bytes_left;
126
	off_t bytes_left;
127
	int cur_speed;
127
	int cur_speed;
128
	int hours, minutes, seconds;
128
	int hours, minutes, seconds;
129
	int file_len;
129
	int file_len, cols;
130
130
131
	if ((!force_update && !alarm_fired && !win_resized) || !can_output())
131
	if ((!force_update && !alarm_fired && !win_resized) || !can_output())
132
		return;
132
		return;
Lines 164-176 refresh_progress_meter(int force_update) Link Here
164
	} else
164
	} else
165
		bytes_per_second = cur_speed;
165
		bytes_per_second = cur_speed;
166
166
167
	last_update = now;
168
169
	/* Don't bother if we can't even display the percentage complete */
170
	if (win_size < 4)
171
		return;
172
167
	/* filename */
173
	/* filename */
168
	buf[0] = '\0';
174
	*buf = '\0';
169
	file_len = win_size - 36;
175
	file_len = cols = win_size - 36;
170
	if (file_len > 0) {
176
	if (file_len > 0) {
171
		buf[0] = '\r';
177
		snmprintf(buf, sizeof(buf), &cols, "%-*s", file_len, file);
172
		snmprintf(buf+1, sizeof(buf)-1, &file_len, "%-*s",
178
		/* If we used fewer columns than expected then pad */
173
		    file_len, file);
179
		if (cols < file_len) {
180
			snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
181
			    "%*s", file_len - cols, "");
182
		}
174
	}
183
	}
175
184
176
	/* percent of transfer done */
185
	/* percent of transfer done */
Lines 178-195 refresh_progress_meter(int force_update) Link Here
178
		percent = 100;
187
		percent = 100;
179
	else
188
	else
180
		percent = ((float)cur_pos / end_pos) * 100;
189
		percent = ((float)cur_pos / end_pos) * 100;
181
	snprintf(buf + strlen(buf), win_size - strlen(buf),
190
191
	snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
182
	    " %3d%% ", percent);
192
	    " %3d%% ", percent);
183
193
184
	/* amount transferred */
194
	/* amount transferred */
185
	format_size(buf + strlen(buf), win_size - strlen(buf),
195
	format_size(buf + strlen(buf), sizeof(buf) - strlen(buf),
186
	    cur_pos);
196
	    cur_pos);
187
	strlcat(buf, " ", win_size);
197
	strlcat(buf, " ", sizeof(buf));
188
198
189
	/* bandwidth usage */
199
	/* bandwidth usage */
190
	format_rate(buf + strlen(buf), win_size - strlen(buf),
200
	format_rate(buf + strlen(buf), sizeof(buf) - strlen(buf),
191
	    (off_t)bytes_per_second);
201
	    (off_t)bytes_per_second);
192
	strlcat(buf, "/s ", win_size);
202
	strlcat(buf, "/s ", sizeof(buf));
193
203
194
	/* ETA */
204
	/* ETA */
195
	if (!transferred)
205
	if (!transferred)
Lines 198-206 refresh_progress_meter(int force_update) Link Here
198
		stalled = 0;
208
		stalled = 0;
199
209
200
	if (stalled >= STALL_TIME)
210
	if (stalled >= STALL_TIME)
201
		strlcat(buf, "- stalled -", win_size);
211
		strlcat(buf, "- stalled -", sizeof(buf));
202
	else if (bytes_per_second == 0 && bytes_left)
212
	else if (bytes_per_second == 0 && bytes_left)
203
		strlcat(buf, "  --:-- ETA", win_size);
213
		strlcat(buf, "  --:-- ETA", sizeof(buf));
204
	else {
214
	else {
205
		if (bytes_left > 0)
215
		if (bytes_left > 0)
206
			seconds = bytes_left / bytes_per_second;
216
			seconds = bytes_left / bytes_per_second;
Lines 213-232 refresh_progress_meter(int force_update) Link Here
213
		seconds -= minutes * 60;
223
		seconds -= minutes * 60;
214
224
215
		if (hours != 0)
225
		if (hours != 0)
216
			snprintf(buf + strlen(buf), win_size - strlen(buf),
226
			snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
217
			    "%d:%02d:%02d", hours, minutes, seconds);
227
			    "%d:%02d:%02d", hours, minutes, seconds);
218
		else
228
		else
219
			snprintf(buf + strlen(buf), win_size - strlen(buf),
229
			snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
220
			    "  %02d:%02d", minutes, seconds);
230
			    "  %02d:%02d", minutes, seconds);
221
231
222
		if (bytes_left > 0)
232
		if (bytes_left > 0)
223
			strlcat(buf, " ETA", win_size);
233
			strlcat(buf, " ETA", sizeof(buf));
224
		else
234
		else
225
			strlcat(buf, "    ", win_size);
235
			strlcat(buf, "    ", sizeof(buf));
226
	}
236
	}
227
237
228
	atomicio(vwrite, STDOUT_FILENO, buf, win_size - 1);
238
	/* Finally, truncate string at window width */
229
	last_update = now;
239
	buf2[0] = '\r';
240
	cols = win_size - 1;
241
	snmprintf(buf2 + 1, sizeof(buf2) - 1, &cols, "%s", buf);
242
	atomicio(vwrite, STDOUT_FILENO, buf2, strlen(buf2));
230
}
243
}
231
244
232
/*ARGSUSED*/
245
/*ARGSUSED*/

Return to bug 3534