X-Git-Url: https://www.fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=finddup.c;h=197b82e48ec0de78e3012d67cdeb924f2b536329;hb=a9708cabb885bcf82b8e9cba86340c35b2e4ead2;hp=1ea54cec256ed09f7b8d0d4dd9143a82756f145c;hpb=0d200c3b81ec3672daea4cffd15551e4e3788d9d;p=finddup.git diff --git a/finddup.c b/finddup.c index 1ea54ce..197b82e 100644 --- a/finddup.c +++ b/finddup.c @@ -69,12 +69,9 @@ int show_groups = 1; /* 1 means to show the group IDs when printing file names */ int same_inodes_are_different = 0; /* 1 means that comparison between - two file with same inode will + 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) { @@ -410,8 +412,7 @@ void start(const char *dirname1, const char *dirname2) { struct file_node *node1, *node2; int not_in, found; int nb_groups, nb_nodes; - int list1_length, previous_progress; - struct winsize win; + int list1_length, list2_length, previous_progress; char *buffer1 = safe_malloc(sizeof(char) * READ_BUFFER_SIZE); char *buffer2 = safe_malloc(sizeof(char) * READ_BUFFER_SIZE); @@ -419,15 +420,13 @@ 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); } list1 = scan_directory(0, dirname1); + list1_length = file_list_length(list1); + if(dirname2) { if(strncmp(dirname2, "not:", 4) == 0) { not_in = 1; @@ -447,12 +446,21 @@ void start(const char *dirname1, const char *dirname2) { if(show_progress) { fprintf(stderr, "done.\n"); + fprintf(stderr, + "%s: %d file%s.\n", + dirname1, list1_length, (list1_length > 1 ? "s" : "")); + if(dirname2) { + list2_length = file_list_length(list2); + fprintf(stderr, + "%s: %d file%s.\n", + dirname2, list2_length, (list2_length > 1 ? "s" : "")); + } + fprintf(stderr, "Now looking for identical files.\n"); } nb_groups = 0; previous_progress = -1; nb_nodes = 0; - list1_length = file_list_length(list1); if(not_in) { for(node1 = list1; node1; node1 = node1->next) { @@ -520,7 +528,7 @@ void start(const char *dirname1, const char *dirname2) { free(buffer2); } -void print_help(FILE *out) { +void usage(FILE *out) { fprintf(out, "Usage: finddup [OPTION]... DIR1 [[and:|not:]DIR2]\n"); fprintf(out, "Version %s (%s)\n", VERSION_NUMBER, UNAME); fprintf(out, "Without DIR2, lists duplicated files found in DIR1. With DIR2, lists files common to both directories. With the not: prefix, lists files found in DIR1 which do not exist in DIR2. The and: prefix is the default and should be used only if you have a directory starting with 'not:'\n"); @@ -568,7 +576,7 @@ int main(int argc, char **argv) { switch (c) { case 'h': - print_help(stdout); + usage(stdout); exit(EXIT_SUCCESS); break; @@ -606,12 +614,14 @@ int main(int argc, char **argv) { use_md5 = 1; #else fprintf(stderr, - "finddup has not be compiled with MD5 hashing.\n"); + "finddup has not been compiled with MD5 hashing.\n"); + usage(stderr); exit(EXIT_FAILURE); #endif break; default: + usage(stderr); exit(EXIT_FAILURE); } } @@ -622,7 +632,7 @@ int main(int argc, char **argv) { same_inodes_are_different = 1; start(argv[optind], 0); } else { - print_help(stderr); + usage(stderr); exit(EXIT_FAILURE); }