From d55e13964916af6a083be881bffdb493af287c1d Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 11 Feb 2011 18:56:13 +0100 Subject: progress meter: move file name to bb_progress_t. +20 bytes We were doing expensive unicode conversion on every update Signed-off-by: Denys Vlasenko --- libbb/progress.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) (limited to 'libbb/progress.c') diff --git a/libbb/progress.c b/libbb/progress.c index 1062e9a0d..1d260dd08 100644 --- a/libbb/progress.c +++ b/libbb/progress.c @@ -52,12 +52,17 @@ static unsigned int get_tty2_width(void) return width; } -void FAST_FUNC bb_progress_init(bb_progress_t *p) +void FAST_FUNC bb_progress_init(bb_progress_t *p, const char *curfile) { +#if ENABLE_UNICODE_SUPPORT + init_unicode(); + p->curfile = unicode_conv_to_printable_fixedwidth(/*NULL,*/ curfile, 20); +#else + p->curfile = curfile; +#endif p->start_sec = monotonic_sec(); p->lastupdate_sec = p->start_sec; p->lastsize = 0; - p->inited = 1; } /* File already had beg_size bytes. @@ -68,7 +73,6 @@ void FAST_FUNC bb_progress_init(bb_progress_t *p) * If totalsize == 0, then it is unknown. */ void FAST_FUNC bb_progress_update(bb_progress_t *p, - const char *curfile, uoff_t beg_size, uoff_t transferred, uoff_t totalsize) @@ -130,16 +134,10 @@ void FAST_FUNC bb_progress_update(bb_progress_t *p, beg_and_transferred = beg_size + transferred; ratio = 100 * beg_and_transferred / totalsize; -#if ENABLE_UNICODE_SUPPORT - init_unicode(); - { - char *buf = unicode_conv_to_printable_fixedwidth(/*NULL,*/ curfile, 20); - fprintf(stderr, "\r%s%4u%% ", buf, ratio); - free(buf); - } -#else - fprintf(stderr, "\r%-20.20s%4u%% ", curfile, ratio); -#endif + if (ENABLE_UNICODE_SUPPORT) + fprintf(stderr, "\r%s%4u%% ", p->curfile, ratio); + else + fprintf(stderr, "\r%-20.20s%4u%% ", p->curfile, ratio); barlength = get_tty2_width() - 49; if (barlength > 0) { -- cgit v1.2.3