Removed a crashing bug with the progress bar when only one file was present.
authorFrancois Fleuret <francois@fleuret.org>
Sun, 6 Jun 2010 21:29:24 +0000 (23:29 +0200)
committerFrancois Fleuret <francois@fleuret.org>
Sun, 6 Jun 2010 21:29:24 +0000 (23:29 +0200)
finddup.c

index 2ef91df..cb4b8ca 100644 (file)
--- 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);
       }