*
*/
-#define VERSION_NUMBER "0.6"
+#define VERSION_NUMBER "0.7"
#define _BSD_SOURCE
(ignore_dotfiles && name[0] == '.');
}
-void print_size_sum(size_sum_t s) {
- char tmp[100];
- char *a = tmp + sizeof(tmp)/sizeof(char);
- *(--a) = '\0';
- if(s) {
- while(s) {
- *(--a) = s%10 + '0';
- s /= 10;
- }
- } else {
- *(--a) = '0';
- }
- printf(a);
-}
-
/**********************************************************************/
struct file_with_size {
void print_file(struct file_with_size *node) {
char tmp[PATH_MAX + 1];
if(show_realpaths) {
- if(show_groups) {
- realpath(node->filename, tmp);
- printf("%d %s\n", node->group_id, tmp);
+ if(realpath(node->filename, tmp)) {
+ if(show_groups) {
+ printf("%d %s\n", node->group_id, tmp);
+ } else {
+ printf("%s\n", tmp);
+ }
} else {
- realpath(node->filename, tmp);
- printf("%s\n", tmp);
+ printf("Can not get the realpath of \"%s\": %s\n",
+ node->filename,
+ strerror(errno));
+ exit(EXIT_FAILURE);
}
} else {
if(show_groups) {
struct file_with_size *list1, *list2;
struct file_with_size *node1, *node2;
int not_in, found;
- int k, pp, l1, n;
+ int nb_groups, nb_nodes;
+ int list1_length, previous_progress;
char *buffer1 = safe_malloc(sizeof(char) * READ_BUFFER_SIZE);
char *buffer2 = safe_malloc(sizeof(char) * READ_BUFFER_SIZE);
fprintf(stderr, "done.\n");
}
- k = 0;
- pp = -1;
- n = 0;
- l1 = file_list_length(list1);
+ 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) {
- print_progress(l1, n, &pp);
- n++;
+ print_progress(list1_length, nb_nodes, &previous_progress);
+ nb_nodes++;
found = 0;
} else {
for(node1 = list1; node1; node1 = node1->next) {
- print_progress(l1, n, &pp);
- n++;
+ print_progress(list1_length, nb_nodes, &previous_progress);
+ nb_nodes++;
for(node2 = list2; node2; node2 = node2->next) {
if(node1->group_id < 0 || node2->group_id < 0) {
if(node2->group_id >= 0) {
node1->group_id = node2->group_id;
} else {
- node1->group_id = k;
+ node1->group_id = nb_groups;
node1->dir_id = 1;
- k++;
+ nb_groups++;
}
}
if(node2->group_id < 0) {
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");
fprintf(out, "\n");
- fprintf(out, " -h show this help\n");
- fprintf(out, " -d ignore dot files and directories\n");
- fprintf(out, " -0 ignore empty files\n");
- fprintf(out, " -c do not show which files in DIR2 corresponds to those in DIR1\n");
- fprintf(out, " -g do not show the file groups\n");
- fprintf(out, " -p show progress\n");
- fprintf(out, " -r show the real file paths\n");
- fprintf(out, " -i consider files with same inode as different\n");
+ fprintf(out, " -h, --help\n");
+ fprintf(out, " show this help\n");
+ fprintf(out, " -d, --ignore-dots\n");
+ fprintf(out, " ignore dot files and directories\n");
+ fprintf(out, " -0, --ignore-empty\n");
+ fprintf(out, " ignore empty files\n");
+ fprintf(out, " -c, --hide-matchings\n");
+ fprintf(out, " do not show which files in DIR2 corresponds to those in DIR1\n");
+ fprintf(out, " -g, --no-group-ids\n");
+ fprintf(out, " do not show the file groups\n");
+ fprintf(out, " -p, --show-progress\n");
+ fprintf(out, " show progress\n");
+ fprintf(out, " -r, --real-paths\n");
+ fprintf(out, " show the real file paths\n");
+ fprintf(out, " -i, --same-inodes-are-different\n");
+ fprintf(out, " consider files with same inode as different\n");
fprintf(out, "\n");
fprintf(out, "Report bugs and comments to <francois@fleuret.org>\n");
}
setlocale (LC_ALL, "");
while (1) {
- c = getopt(argc, argv, "hircgd0p");
+ int option_index = 0;
+ static struct option long_options[] = {
+ { "help", no_argument, 0, 'h' },
+ { "same-inodes-are-different", no_argument, 0, 'i' },
+ { "real-paths", no_argument, 0, 'r' },
+ { "hide-matchings", no_argument, 0, 'c' },
+ { "no-group-ids", no_argument, 0, 'g' },
+ { "ignore-dots", no_argument, 0, 'd' },
+ { "ignore-empty", no_argument, 0, '0' },
+ { "show-progress", no_argument, 0, 'p' },
+ { 0, 0, 0, 0 }
+ };
+
+ c = getopt_long(argc, argv, "hircgd0p",
+ long_options, &option_index);
if (c == -1)
break;