From 91eed516671e1e2c5f1a65dc56fd3796ef7782a7 Mon Sep 17 00:00:00 2001 From: Francois Fleuret Date: Sun, 6 Jun 2010 23:29:24 +0200 Subject: [PATCH] Removed a crashing bug with the progress bar when only one file was present. --- finddup.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/finddup.c b/finddup.c index 2ef91df..cb4b8ca 100644 --- a/finddup.c +++ b/finddup.c @@ -354,15 +354,17 @@ struct progress_state { }; void print_progress(struct progress_state *state) { - int position, k; + int position, k, normalizer; struct winsize win; char buffer[PROGRESS_BUFFER_SIZE]; char *s; + normalizer = (state->nb_values > 1 ? state->nb_values - 1 : 1); + if(show_progress) { /* We use the previous bar_width to compute the position, so that we avoid doing too many ioctls */ - position = (state->bar_width * state->value) / (state->nb_values - 1); + position = (state->bar_width * state->value) / normalizer; if(state->bar_width <= 0 || position != state->last_position) { if(!ioctl (STDERR_FILENO, TIOCGWINSZ, (char *) &win)) { /* Something weird is going on if the previous test is wrong */ @@ -371,7 +373,7 @@ void print_progress(struct progress_state *state) { } else { state->bar_width = win.ws_col - 7; } - position = (state->bar_width * state->value) / (state->nb_values - 1); + position = (state->bar_width * state->value) / normalizer; state->last_position = position; s = buffer; for(k = 0; k < position; k++) { @@ -383,7 +385,7 @@ void print_progress(struct progress_state *state) { /* We need four % because of the fprintf that follows */ sprintf(s, " [%3d%%%%]\r", - (100 * state->value) / (state->nb_values - 1)); + (100 * state->value) / normalizer); fprintf(stderr, buffer); } -- 2.20.1