Blob
1 #include "a.h"3 Mailbox *hash[123];4 Mailbox **box;5 uint nbox;7 static void8 markboxes(int mark)9 {10 Mailbox *b;12 for(i=0; i<nbox; i++)13 if(box[i])14 box[i]->mark = mark;15 }17 static void18 sweepboxes(void)19 {20 Mailbox *b;22 for(i=0; i<nbox; i++)23 if(box[i] && box[i]->mark){24 freembox(box[i]);25 box[i] = nil;26 }27 }29 static Mailbox*30 mboxbyname(char *name)31 {32 int i;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 }40 static Mailbox*41 mboxbyid(int id)42 {43 if(id < 0 || id >= nbox)44 return nil;45 return box[id];46 }48 static Mailbox*49 mboxcreate(char *name)50 {51 Mailbox *b;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 }61 void62 mboxupdate(void)63 {64 markboxes();65 if(imapcmd("LIST \"\" *") < 0)66 return;67 sweepboxes();68 }