summaryrefslogtreecommitdiff
path: root/sys/src/cmd/upas/fs/plan9.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2017-06-18 18:52:54 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2017-06-18 18:52:54 +0200
commita1c1e00973b8799860db594e64a9dee231e325d1 (patch)
tree6a0f493a57f04ceaab2c6f3253cc92d77a3819cf /sys/src/cmd/upas/fs/plan9.c
parentc3d372c3dae46dbf4657ded30dc3b2bf6c369f59 (diff)
upas/fs: work in progress...
get plumbing logic out of mailbox drivers, all handled from syncmbox() now. avoid reentrancy in syncmbox(). store attachment filename in index, so that we can return it in mail info without fetching headers. (used to return blank filename when read out of the index messing up attachments in nedmail). maintain Message.size for attachments. get rid of string "refs" and just have a simple string intern table (only used for Message.type and Message.charset). Message.replyto and Message.filename are owned by the index, so don't free in delmessage().
Diffstat (limited to 'sys/src/cmd/upas/fs/plan9.c')
-rw-r--r--sys/src/cmd/upas/fs/plan9.c29
1 files changed, 8 insertions, 21 deletions
diff --git a/sys/src/cmd/upas/fs/plan9.c b/sys/src/cmd/upas/fs/plan9.c
index 91358a4c9..c9ca0d283 100644
--- a/sys/src/cmd/upas/fs/plan9.c
+++ b/sys/src/cmd/upas/fs/plan9.c
@@ -179,17 +179,15 @@ readmessage(Mailbox *mb, Message *m, Inbuf *b)
int
purgedeleted(Mailbox *mb)
{
- Message *m, *next;
+ Message *m;
int newdels;
/* forget about what's no longer in the mailbox */
newdels = 0;
- for(m = mb->root->part; m != nil; m = next){
- next = m->next;
- if(m->deleted && m->refs == 0){
- if(m->inmbox)
- newdels++;
- delmessage(mb, m);
+ for(m = mb->root->part; m != nil; m = m->next){
+ if(m->deleted && m->inmbox){
+ newdels++;
+ m->inmbox = 0;
}
}
return newdels;
@@ -217,10 +215,9 @@ mergemsg(Message *m, Message *x)
* read in the mailbox and parse into messages.
*/
static char*
-readmbox(Mailbox *mb, int doplumb, int *new, Mlock *lk)
+readmbox(Mailbox *mb, Mlock *lk)
{
char *p, *x, buf[Pathlen];
- int nnew;
Biobuf *in;
Dir *d;
Inbuf b;
@@ -256,7 +253,6 @@ retry:
}
if(mb->d != nil){
if(d->qid.path == mb->d->qid.path && d->qid.vers == mb->d->qid.vers){
- *new = 0;
Bterm(in);
free(d);
return nil;
@@ -276,7 +272,6 @@ retry:
/* read new messages */
logmsg(nil, "reading %s", mb->path);
- nnew = 0;
for(;;){
if(lk != nil)
syslockrefresh(lk);
@@ -306,8 +301,6 @@ retry:
} else {
/* old mail no longer in box, mark deleted */
logmsg(*l, "disappeared");
- if(doplumb)
- mailplumb(mb, *l, 1);
(*l)->inmbox = 0;
(*l)->deleted = Disappear;
l = &(*l)->next;
@@ -324,9 +317,6 @@ retry:
parse(mb, m, 0, 0);
if(m != *l && m->deleted != Dup){
logmsg(m, "new");
- newcachehash(mb, m, doplumb);
- putcache(mb, m);
- nnew++;
}
/* chain in */
*l = m;
@@ -336,15 +326,12 @@ retry:
/* whatever is left has been removed from the mbox, mark deleted */
while(*l != nil){
- if(doplumb)
- mailplumb(mb, *l, 1);
(*l)->inmbox = 0;
(*l)->deleted = Deleted;
l = &(*l)->next;
}
Bterm(in);
- *new = nnew;
return nil;
}
@@ -408,7 +395,7 @@ writembox(Mailbox *mb, Mlock *lk)
}
char*
-plan9syncmbox(Mailbox *mb, int doplumb, int *new)
+plan9syncmbox(Mailbox *mb)
{
char *rv;
Mlock *lk;
@@ -420,7 +407,7 @@ plan9syncmbox(Mailbox *mb, int doplumb, int *new)
return "can't lock mailbox";
}
- rv = readmbox(mb, doplumb, new, lk); /* interpolate */
+ rv = readmbox(mb, lk); /* interpolate */
if(purgedeleted(mb) > 0)
writembox(mb, lk);