X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=finddup.c;h=f1e3cf0f007327d1d0ab56eac803f334348a0c73;hb=f34775663d2b9b3a3cea95b0954e2e62dad1410e;hp=a8847f5be4c4ac0602a510841b263807d5183ab0;hpb=1621d18b51827a5c12b939f8e2573de58175d70f;p=finddup.git diff --git a/finddup.c b/finddup.c index a8847f5..f1e3cf0 100644 --- a/finddup.c +++ b/finddup.c @@ -112,7 +112,7 @@ struct file_with_size { size_t size; ino_t inode; struct file_with_size *next; - int group_id; + int group_id, dir_id; }; void file_list_delete(struct file_with_size *head) { @@ -237,6 +237,7 @@ struct file_with_size *scan_directory(struct file_with_size *tail, tmp->size = sb.st_size; tmp->inode = sb.st_ino; tmp->group_id = -1; + tmp->dir_id = -1; tail = tmp; } } @@ -276,7 +277,13 @@ int compare_nodes(const void *x1, const void *x2) { } else if((*f1)->group_id > (*f2)->group_id) { return 1; } else { - return 0; + if((*f1)->dir_id < (*f2)->dir_id) { + return -1; + } else if((*f1)->dir_id > (*f2)->dir_id) { + return 1; + } else { + return 0; + } } } @@ -343,6 +350,9 @@ void start(const char *dirname1, const char *dirname2) { if(dirname2) { if(strncmp(dirname2, "not:", 4) == 0) { not_in = 1; + /* We should show groups even in that mode. However they are not + properly calculated for now, so we force it off. */ + show_groups = 0; dirname2 += 4; } if(show_progress) { @@ -409,11 +419,13 @@ void start(const char *dirname1, const char *dirname2) { node1->group_id = node2->group_id; } else { node1->group_id = k; + node1->dir_id = 1; k++; } } if(node2->group_id < 0) { node2->group_id = node1->group_id; + node2->dir_id = 2; } } } @@ -459,7 +471,7 @@ int main(int argc, char **argv) { setlocale (LC_ALL, ""); while (1) { - c = getopt(argc, argv, "hrcgd0p"); + c = getopt(argc, argv, "hircgd0p"); if (c == -1) break;