21int rename(
const char *,
const char *);
34#define WHO "maildir2mbox"
36static void die_nomem() { logmsg(
WHO,111,FATAL,
"out of memory"); }
51 mbox = env_get(
"MAIL");
52 if (!
mbox) logmsg(
WHO,111,FATAL,
"MAIL not set");
54 if (!
mboxtmp) logmsg(
WHO,111,FATAL,
"MAILTMP not set");
57 logmsg(
WHO,110,FATAL,
"Can't changet maildir");
60 logmsg(
WHO,112,FATAL,
"Can't read maidir");
64 fdlock = open_append(
mbox);
66 logmsg(
WHO,111,FATAL,B(
"unable to lock: ",
mbox));
67 if (lock_ex(fdlock) == -1)
68 logmsg(
WHO,111,FATAL,B(
"unable to lock: ",
mbox));
70 fdoldmbox = open_read(
mbox);
72 logmsg(
WHO,112,FATAL,B(
"unable to read: ",
mbox));
74 fdnewmbox = open_trunc(
mboxtmp);
76 logmsg(
WHO,112,FATAL,B(
"unable to create: ",
mboxtmp));
81 switch (buffer_copy(&
bo,&
bi)) {
82 case -2: logmsg(
WHO,112,FATAL,B(
"unable to read: ",
mbox));
83 case -3: logmsg(
WHO,112,FATAL,B(
"unable to write to: ",
mboxtmp));
92 logmsg(
WHO,112,FATAL,B(
"unable to read: $MAILDIR/",
filenames.s + pe.
id));
96 logmsg(
WHO,112,FATAL,B(
"unable to read: $MAILDIR/",
filenames.s + pe.
id));
100 if (stralloc_starts(&
line,
"Return-Path: <")) {
101 if (
line.s[14] ==
'>') {
108 for (i = 14;i <
line.len - 2;++i)
109 if ((
line.s[i] ==
' ') || (
line.s[i] ==
'\t'))
118 logmsg(
WHO,112,FATAL,B(
"unable to write to: ",
mboxtmp));
122 if (buffer_puts(&
bo,
">") == -1)
123 logmsg(
WHO,112,FATAL,B(
"unable to write to: ",
mboxtmp));
125 logmsg(
WHO,112,FATAL,B(
"unable to write to: ",
mboxtmp));
127 if (buffer_puts(&
bo,
"\n") == -1)
128 logmsg(
WHO,112,FATAL,B(
"unable to write to: ",
mboxtmp));
132 logmsg(
WHO,112,FATAL,B(
"unable to read: $MAILDIR/",
filenames.s + pe.
id));
134 if (buffer_puts(&
bo,
"\n"))
135 logmsg(
WHO,112,FATAL,B(
"unable to write to: ",
mboxtmp));
140 if (buffer_flush(&
bo) == -1)
141 logmsg(
WHO,112,FATAL,B(
"unable to write to: ",
mboxtmp));
142 if (fsync(fdnewmbox) == -1)
143 logmsg(
WHO,112,FATAL,B(
"unable to write to: ",
mboxtmp));
144 if (close(fdnewmbox) == -1)
145 logmsg(
WHO,112,FATAL,B(
"unable to write to: ",
mboxtmp));
152 logmsg(
WHO,0,WARN,B(
"$MAILDIR/",
filenames.s + pe.
id,
" will be delivered twice; unable to unlink"));
int stralloc_copys(stralloc *, char const *)
int gfrom(char *s, int len)
char inbuf[BUFFER_INSIZE]
int rename(const char *, const char *)
char outbuf[BUFFER_OUTSIZE]
int maildir_scan(prioq *, stralloc *, int, int)
void maildir_clean(stralloc *)
char * myctime(datetime_sec)
struct prioq_elt *int prioq_min(prioq *, struct prioq_elt *)
void prioq_delmin(prioq *)