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

Collapse All | Expand All

(-)a/progressmeter.c (-19 / +26 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 165-176 refresh_progress_meter(int force_update) Link Here
165
		bytes_per_second = cur_speed;
165
		bytes_per_second = cur_speed;
166
166
167
	/* filename */
167
	/* filename */
168
	buf[0] = '\0';
168
	file_len = cols = win_size - 36;
169
	file_len = win_size - 36;
170
	if (file_len > 0) {
169
	if (file_len > 0) {
171
		buf[0] = '\r';
170
		snmprintf(buf, sizeof(buf), &cols, "%-*s", file_len, file);
172
		snmprintf(buf+1, sizeof(buf)-1, &file_len, "%-*s",
171
		/* If we used fewer columns than expected then pad */
173
		    file_len, file);
172
		if (cols < file_len) {
173
			snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
174
			    "%*s", file_len - cols, "");
175
		}
174
	}
176
	}
175
177
176
	/* percent of transfer done */
178
	/* percent of transfer done */
Lines 178-195 refresh_progress_meter(int force_update) Link Here
178
		percent = 100;
180
		percent = 100;
179
	else
181
	else
180
		percent = ((float)cur_pos / end_pos) * 100;
182
		percent = ((float)cur_pos / end_pos) * 100;
181
	snprintf(buf + strlen(buf), win_size - strlen(buf),
183
184
	snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
182
	    " %3d%% ", percent);
185
	    " %3d%% ", percent);
183
186
184
	/* amount transferred */
187
	/* amount transferred */
185
	format_size(buf + strlen(buf), win_size - strlen(buf),
188
	format_size(buf + strlen(buf), sizeof(buf) - strlen(buf),
186
	    cur_pos);
189
	    cur_pos);
187
	strlcat(buf, " ", win_size);
190
	strlcat(buf, " ", sizeof(buf));
188
191
189
	/* bandwidth usage */
192
	/* bandwidth usage */
190
	format_rate(buf + strlen(buf), win_size - strlen(buf),
193
	format_rate(buf + strlen(buf), sizeof(buf) - strlen(buf),
191
	    (off_t)bytes_per_second);
194
	    (off_t)bytes_per_second);
192
	strlcat(buf, "/s ", win_size);
195
	strlcat(buf, "/s ", sizeof(buf));
193
196
194
	/* ETA */
197
	/* ETA */
195
	if (!transferred)
198
	if (!transferred)
Lines 198-206 refresh_progress_meter(int force_update) Link Here
198
		stalled = 0;
201
		stalled = 0;
199
202
200
	if (stalled >= STALL_TIME)
203
	if (stalled >= STALL_TIME)
201
		strlcat(buf, "- stalled -", win_size);
204
		strlcat(buf, "- stalled -", sizeof(buf));
202
	else if (bytes_per_second == 0 && bytes_left)
205
	else if (bytes_per_second == 0 && bytes_left)
203
		strlcat(buf, "  --:-- ETA", win_size);
206
		strlcat(buf, "  --:-- ETA", sizeof(buf));
204
	else {
207
	else {
205
		if (bytes_left > 0)
208
		if (bytes_left > 0)
206
			seconds = bytes_left / bytes_per_second;
209
			seconds = bytes_left / bytes_per_second;
Lines 213-231 refresh_progress_meter(int force_update) Link Here
213
		seconds -= minutes * 60;
216
		seconds -= minutes * 60;
214
217
215
		if (hours != 0)
218
		if (hours != 0)
216
			snprintf(buf + strlen(buf), win_size - strlen(buf),
219
			snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
217
			    "%d:%02d:%02d", hours, minutes, seconds);
220
			    "%d:%02d:%02d", hours, minutes, seconds);
218
		else
221
		else
219
			snprintf(buf + strlen(buf), win_size - strlen(buf),
222
			snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
220
			    "  %02d:%02d", minutes, seconds);
223
			    "  %02d:%02d", minutes, seconds);
221
224
222
		if (bytes_left > 0)
225
		if (bytes_left > 0)
223
			strlcat(buf, " ETA", win_size);
226
			strlcat(buf, " ETA", sizeof(buf));
224
		else
227
		else
225
			strlcat(buf, "    ", win_size);
228
			strlcat(buf, "    ", sizeof(buf));
226
	}
229
	}
227
230
228
	atomicio(vwrite, STDOUT_FILENO, buf, win_size - 1);
231
	/* Finally, truncate string at window width */
232
	buf2[0] = '\r';
233
	cols = win_size;
234
	snmprintf(buf2 + 1, sizeof(buf2) - 1, &cols, "%s", buf);
235
	atomicio(vwrite, STDOUT_FILENO, buf2, strlen(buf2));
229
	last_update = now;
236
	last_update = now;
230
}
237
}
231
238

Return to bug 3534