diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-06-18 18:52:54 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-06-18 18:52:54 +0200 |
commit | a1c1e00973b8799860db594e64a9dee231e325d1 (patch) | |
tree | 6a0f493a57f04ceaab2c6f3253cc92d77a3819cf /sys/src/cmd/upas/fs/plan9.c | |
parent | c3d372c3dae46dbf4657ded30dc3b2bf6c369f59 (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.c | 29 |
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); |