| #include "a.h" |
| |
| Mailbox *hash[123]; |
| Mailbox **box; |
| uint nbox; |
| |
| static void |
| markboxes(int mark) |
| { |
| Mailbox *b; |
| |
| for(i=0; i<nbox; i++) |
| if(box[i]) |
| box[i]->mark = mark; |
| } |
| |
| static void |
| sweepboxes(void) |
| { |
| Mailbox *b; |
| |
| for(i=0; i<nbox; i++) |
| if(box[i] && box[i]->mark){ |
| freembox(box[i]); |
| box[i] = nil; |
| } |
| } |
| |
| static Mailbox* |
| mboxbyname(char *name) |
| { |
| int i; |
| |
| for(i=0; i<nbox; i++) |
| if(box[i] && strcmp(box[i]->name, name) == 0) |
| return box[i]; |
| return nil; |
| } |
| |
| static Mailbox* |
| mboxbyid(int id) |
| { |
| if(id < 0 || id >= nbox) |
| return nil; |
| return box[id]; |
| } |
| |
| static Mailbox* |
| mboxcreate(char *name) |
| { |
| Mailbox *b; |
| |
| b = emalloc(sizeof *b); |
| b->name = estrdup(name); |
| if(nbox%64 == 0) |
| box = erealloc(box, (nbox+64)*sizeof box[0]); |
| box[nbox++] = b; |
| return b; |
| } |
| |
| void |
| mboxupdate(void) |
| { |
| markboxes(); |
| if(imapcmd("LIST \"\" *") < 0) |
| return; |
| sweepboxes(); |
| } |