rsc | 941e171 | 2006-02-15 12:39:09 +0000 | [diff] [blame] | 1 | #include "a.h" |
2 | |||||
3 | Mailbox *hash[123]; | ||||
4 | Mailbox **box; | ||||
5 | uint nbox; | ||||
6 | |||||
7 | static void | ||||
8 | markboxes(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 | |||||
17 | static void | ||||
18 | sweepboxes(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 | |||||
29 | static Mailbox* | ||||
30 | mboxbyname(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 | |||||
40 | static Mailbox* | ||||
41 | mboxbyid(int id) | ||||
42 | { | ||||
43 | if(id < 0 || id >= nbox) | ||||
44 | return nil; | ||||
45 | return box[id]; | ||||
46 | } | ||||
47 | |||||
48 | static Mailbox* | ||||
49 | mboxcreate(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 | |||||
61 | void | ||||
62 | mboxupdate(void) | ||||
63 | { | ||||
64 | markboxes(); | ||||
65 | if(imapcmd("LIST \"\" *") < 0) | ||||
66 | return; | ||||
67 | sweepboxes(); | ||||
68 | } |