plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

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 }