blob: 5f90f0a21a51743e9a2a0e7023531b4719ccd284 [file] [log] [blame]
rsc941e1712006-02-15 12:39:09 +00001#include "a.h"
2
3Mailbox *hash[123];
4Mailbox **box;
5uint nbox;
6
7static void
8markboxes(int mark)
9{
10 Mailbox *b;
11
12 for(i=0; i<nbox; i++)
13 if(box[i])
14 box[i]->mark = mark;
15}
16
17static void
18sweepboxes(void)
19{
20 Mailbox *b;
21
22 for(i=0; i<nbox; i++)
23 if(box[i] && box[i]->mark){
24 freembox(box[i]);
25 box[i] = nil;
26 }
27}
28
29static Mailbox*
30mboxbyname(char *name)
31{
32 int i;
33
34 for(i=0; i<nbox; i++)
35 if(box[i] && strcmp(box[i]->name, name) == 0)
36 return box[i];
37 return nil;
38}
39
40static Mailbox*
41mboxbyid(int id)
42{
43 if(id < 0 || id >= nbox)
44 return nil;
45 return box[id];
46}
47
48static Mailbox*
49mboxcreate(char *name)
50{
51 Mailbox *b;
52
53 b = emalloc(sizeof *b);
54 b->name = estrdup(name);
55 if(nbox%64 == 0)
56 box = erealloc(box, (nbox+64)*sizeof box[0]);
57 box[nbox++] = b;
58 return b;
59}
60
61void
62mboxupdate(void)
63{
64 markboxes();
65 if(imapcmd("LIST \"\" *") < 0)
66 return;
67 sweepboxes();
68}