12 struct strerr maildir_chdir_err
;
13 struct strerr maildir_scan_err
;
18 maildir
= env_get("MAILDIR");
20 STRERR(-1,maildir_chdir_err
,"MAILDIR not set")
21 if (chdir(maildir
) == -1)
22 STRERR_SYS3(-1,maildir_chdir_err
,"unable to chdir to ",maildir
,": ")
26 void maildir_clean(tmpname
)
39 while (d
= readdir(dir
))
41 if (d
->d_name
[0] == '.') continue;
42 if (!stralloc_copys(tmpname
,"tmp/")) break;
43 if (!stralloc_cats(tmpname
,d
->d_name
)) break;
44 if (!stralloc_0(tmpname
)) break;
45 if (stat(tmpname
->s
,&st
) == 0)
46 if (time
> st
.st_atime
+ 129600)
52 static int append(pq
,filenames
,subdir
,time
)
64 dir
= opendir(subdir
);
66 STRERR_SYS3(-1,maildir_scan_err
,"unable to scan $MAILDIR/",subdir
,": ")
68 while (d
= readdir(dir
))
70 if (d
->d_name
[0] == '.') continue;
72 if (!stralloc_cats(filenames
,subdir
)) break;
73 if (!stralloc_cats(filenames
,"/")) break;
74 if (!stralloc_cats(filenames
,d
->d_name
)) break;
75 if (!stralloc_0(filenames
)) break;
76 if (stat(filenames
->s
+ pos
,&st
) == 0)
77 if (st
.st_mtime
< time
) /* don't want to mix up the order */
81 if (!prioq_insert(pq
,&pe
)) break;
86 if (d
) STRERR_SYS3(-1,maildir_scan_err
,"unable to read $MAILDIR/",subdir
,": ")
90 int maildir_scan(pq
,filenames
,flagnew
,flagcur
)
100 if (!stralloc_copys(filenames
,"")) return 0;
101 while (prioq_min(pq
,&pe
)) prioq_delmin(pq
);
105 if (flagnew
) if (append(pq
,filenames
,"new",time
) == -1) return -1;
106 if (flagcur
) if (append(pq
,filenames
,"cur",time
) == -1) return -1;