7 itemcmp(void *v1, void *v2)
9 char **d1 = v1, **d2 = v2;
11 return strcmp(*d1, *d2);
22 if ((fd = open(name, OREAD)) < 0) {
23 fprint(2, "%s: can't open %s: %r\n", argv0, name);
24 /* fake an empty directory */
25 cp = MALLOC(char*, 1);
31 if((n = dirreadall(fd, &db)) > 0){
33 cp = REALLOC(cp, char *, (nitems+1));
34 cp[nitems] = MALLOC(char, strlen((db+n)->name)+1);
35 strcpy(cp[nitems], (db+n)->name);
40 cp = REALLOC(cp, char*, (nitems+1));
43 qsort((char *)cp, nitems, sizeof(char*), itemcmp);
48 isdotordotdot(char *p)
53 if (p[1] == '.' && !p[2])
60 diffdir(char *f, char *t, int level)
62 char **df, **dt, **dirf, **dirt;
65 char fb[MAXPATHLEN+1], tb[MAXPATHLEN+1];
74 if (from && isdotordotdot(from)) {
78 if (to && isdotordotdot(to)) {
87 res = strcmp(from, to);
89 if (mode == 0 || mode == 'n')
90 Bprint(&stdout, "Only in %s: %s\n", f, from);
95 if (mode == 0 || mode == 'n')
96 Bprint(&stdout, "Only in %s: %s\n", t, to);
100 if (mkpathname(fb, f, from))
102 if (mkpathname(tb, t, to))
104 diff(fb, tb, level+1);
107 for (df = dirf; *df; df++)
109 for (dt = dirt; *dt; dt++)