7 itemcmp(const void *v1, const void *v2)
9 char *const*d1 = v1, *const*d2 = v2;
11 return strcmp(*d1, *d2);
22 if ((fd = open(name, OREAD)) < 0)
23 panic(2, "can't open %s\n", name);
26 if((n = dirreadall(fd, &db)) > 0){
28 cp = REALLOC(cp, char *, (nitems+1));
29 cp[nitems] = MALLOC(char, strlen((db+n)->name)+1);
30 strcpy(cp[nitems], (db+n)->name);
35 cp = REALLOC(cp, char*, (nitems+1));
38 qsort((char *)cp, nitems, sizeof(char*), itemcmp);
43 isdotordotdot(char *p)
48 if (p[1] == '.' && !p[2])
55 diffdir(char *f, char *t, int level)
57 char **df, **dt, **dirf, **dirt;
60 char fb[MAXPATHLEN+1], tb[MAXPATHLEN+1];
69 if (from && isdotordotdot(from)) {
73 if (to && isdotordotdot(to)) {
82 res = strcmp(from, to);
84 if (mode == 0 || mode == 'n')
85 Bprint(&stdout, "Only in %s: %s\n", f, from);
90 if (mode == 0 || mode == 'n')
91 Bprint(&stdout, "Only in %s: %s\n", t, to);
95 if (mkpathname(fb, f, from))
97 if (mkpathname(tb, t, to))
99 diff(fb, tb, level+1);
102 for (df = dirf; *df; df++)
104 for (dt = dirt; *dt; dt++)