Now refreshes properly the progress bar if the tty width changes.
authorFrancois Fleuret <francois@fleuret.org>
Mon, 22 Mar 2010 07:56:05 +0000 (08:56 +0100)
committerFrancois Fleuret <francois@fleuret.org>
Mon, 22 Mar 2010 07:56:05 +0000 (08:56 +0100)
finddup.c

index f196f59..87ae90e 100644 (file)
--- a/finddup.c
+++ b/finddup.c
@@ -72,9 +72,6 @@ int same_inodes_are_different = 0; /* 1 means that comparison between
                                       two files with same inode will
                                       always be false */
 
-int tty_width = -1; /* Positive value means what width to use to show
-                       the progress bar */
-
 #ifdef WITH_MD5
 int use_md5 = 0; /* 1 means we keep an MD5 signature for each file */
 #endif
@@ -387,8 +384,13 @@ void print_result(struct file_node *list1, struct file_node *list2) {
 
 void print_progress(int max, int n, int *pp) {
   int p, k;
-  int width;
-  if(show_progress && tty_width > 0) {
+  int width, tty_width;
+  struct winsize win;
+
+  if(show_progress &&
+     isatty(STDOUT_FILENO) &&
+     !ioctl (STDOUT_FILENO, TIOCGWINSZ, (char *) &win)) {
+    tty_width = win.ws_col;
     width = tty_width - 7;
     p = (width * n) / (max - 1);
     if(p > *pp) {
@@ -411,7 +413,6 @@ void start(const char *dirname1, const char *dirname2) {
   int not_in, found;
   int nb_groups, nb_nodes;
   int list1_length, previous_progress;
-  struct winsize win;
 
   char *buffer1 = safe_malloc(sizeof(char) * READ_BUFFER_SIZE);
   char *buffer2 = safe_malloc(sizeof(char) * READ_BUFFER_SIZE);
@@ -419,10 +420,6 @@ void start(const char *dirname1, const char *dirname2) {
   not_in = 0;
 
   if(show_progress) {
-    if(isatty(STDOUT_FILENO) &&
-       !ioctl (STDOUT_FILENO, TIOCGWINSZ, (char *) &win)) {
-      tty_width = win.ws_col;
-    }
     fprintf(stderr, "Scanning %s ... ", dirname1);
   }