4 #define deprint(...) /* eprint(__VA_ARGS__) */
6 extern int dirskip(Dir*, uvlong*);
14 fd = open(path, OREAD);
18 if(read(fd, buf, sizeof buf) < 28 + 5)
20 else if(strncmp(buf, "From ", 5))
31 p = strrchr(d->name, '.');
34 if(strcmp(p, ".idx") || strcmp(p, ".imp"))
40 idiotcheck(char *path, Dir *d, int getindex)
46 if(strncmp(d->name, "L.", 2) == 0)
48 if(getindex && isindex(d))
50 if(!dirskip(d, &v) || ismbox(path))
58 deprint("rm %s\n", buf);
63 rm(char *dir, int flags, int level)
66 int i, n, r, fd, isdir, rflag;
70 isdir = d->mode & DMDIR;
74 fd = open(dir, OREAD);
77 n = dirreadall(fd, &d);
80 rflag = flags & Rrecur;
81 for(i = 0; i < n; i++){
82 snprint(buf, sizeof buf, "%s/%s", dir, d[i].name);
84 r |= rm(buf, flags, level + 1);
85 if(idiotcheck(buf, d + i, level + rflag) == -1)
95 rmidx(char *buf, int flags)
99 snprint(buf2, sizeof buf2, "%s.idx", buf);
101 if((flags & Rtrunc) == 0){
102 snprint(buf2, sizeof buf2, "%s.imp", buf);
108 localremove(Mailbox *mb, int flags)
113 static char err[2*Pathlen];
116 if((d = dirstat(path)) == 0){
117 snprint(err, sizeof err, "%s: doesn't exist\n", path);
120 isdir = d->mode & DMDIR;
125 deprint("%s: %s\n", msg, path);
127 /* must match folder.c:/^openfolder */
128 r = rm(path, flags, 0);
129 if((flags & Rtrunc) == 0)
132 close(r = open(path, OWRITE|OTRUNC));
137 snprint(err, sizeof err, "%s: can't %s\n", path, msg);