diff options
Diffstat (limited to 'progress.c')
| -rw-r--r-- | progress.c | 11 | 
1 files changed, 8 insertions, 3 deletions
| diff --git a/progress.c b/progress.c index d19f80c0bb..55a8687ad1 100644 --- a/progress.c +++ b/progress.c @@ -241,16 +241,21 @@ void stop_progress_msg(struct progress **p_progress, const char *msg)  	*p_progress = NULL;  	if (progress->last_value != -1) {  		/* Force the last update */ -		char buf[strlen(msg) + 5]; +		char buf[128], *bufp; +		size_t len = strlen(msg) + 5;  		struct throughput *tp = progress->throughput; + +		bufp = (len < sizeof(buf)) ? buf : xmalloc(len + 1);  		if (tp) {  			unsigned int rate = !tp->avg_misecs ? 0 :  					tp->avg_bytes / tp->avg_misecs;  			throughput_string(tp, tp->curr_total, rate);  		}  		progress_update = 1; -		sprintf(buf, ", %s.\n", msg); -		display(progress, progress->last_value, buf); +		sprintf(bufp, ", %s.\n", msg); +		display(progress, progress->last_value, bufp); +		if (buf != bufp) +			free(bufp);  	}  	clear_progress_signal();  	free(progress->throughput); | 
