mbox.c (868B)
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 }