X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=finddup.c;h=87ae90e53bca65257b8016760da20900092eba5b;hb=e19b97832c28af4781084bffa6bb31553624aa51;hp=3edfd611dd59c44ef8f13379c1b2e1ce6c8f1689;hpb=e4133d06373b48e8509afd0811bb0a726d74f8a8;p=finddup.git diff --git a/finddup.c b/finddup.c index 3edfd61..87ae90e 100644 --- a/finddup.c +++ b/finddup.c @@ -68,11 +68,9 @@ int show_hits = 1; /* 1 means to show the files from dir2 int show_groups = 1; /* 1 means to show the group IDs when printing file names */ -int ignore_same_inode = 0; /* 1 means that comparison between two file - with same inode will always be false */ - -int tty_width = -1; /* Positive value means what width to use to show - the progress bar */ +int same_inodes_are_different = 0; /* 1 means that comparison between + two files with same inode will + always be false */ #ifdef WITH_MD5 int use_md5 = 0; /* 1 means we keep an MD5 signature for each file */ @@ -235,9 +233,10 @@ int same_content(struct file_node *f1, struct file_node *f2, int same_files(struct file_node *f1, struct file_node *f2, char *buffer1, char *buffer2) { - if(ignore_same_inode && f1->inode == f2->inode) { + if(same_inodes_are_different && f1->inode == f2->inode) { return 0; } + return f1->size == f2->size && same_content(f1, f2, buffer1, buffer2); } @@ -385,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) { @@ -409,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); @@ -417,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); } @@ -518,7 +517,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"); @@ -566,7 +565,7 @@ int main(int argc, char **argv) { switch (c) { case 'h': - print_help(stdout); + usage(stdout); exit(EXIT_SUCCESS); break; @@ -584,7 +583,7 @@ int main(int argc, char **argv) { break; case 'i': - ignore_same_inode = 1; + same_inodes_are_different = 1; break; case 'g': @@ -604,12 +603,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); } } @@ -617,10 +618,10 @@ int main(int argc, char **argv) { if(optind + 2 == argc) { start(argv[optind], argv[optind + 1]); } else if(optind + 1 == argc) { - ignore_same_inode = 1; + same_inodes_are_different = 1; start(argv[optind], 0); } else { - print_help(stderr); + usage(stderr); exit(EXIT_FAILURE); }