#include "a.h" | |
Mailbox *hash[123]; | |
Mailbox **box; | |
uint nbox; | |
static void | |
markboxes(int mark) | |
{ | |
Mailbox *b; | |
for(i=0; i<nbox; i++) | |
if(box[i]) | |
box[i]->mark = mark; | |
} | |
static void | |
sweepboxes(void) | |
{ | |
Mailbox *b; | |
for(i=0; i<nbox; i++) | |
if(box[i] && box[i]->mark){ | |
freembox(box[i]); | |
box[i] = nil; | |
} | |
} | |
static Mailbox* | |
mboxbyname(char *name) | |
{ | |
int i; | |
for(i=0; i<nbox; i++) | |
if(box[i] && strcmp(box[i]->name, name) == 0) | |
return box[i]; | |
return nil; | |
} | |
static Mailbox* | |
mboxbyid(int id) | |
{ | |
if(id < 0 || id >= nbox) | |
return nil; | |
return box[id]; | |
} | |
static Mailbox* | |
mboxcreate(char *name) | |
{ | |
Mailbox *b; | |
b = emalloc(sizeof *b); | |
b->name = estrdup(name); | |
if(nbox%64 == 0) | |
box = erealloc(box, (nbox+64)*sizeof box[0]); | |
box[nbox++] = b; | |
return b; | |
} | |
void | |
mboxupdate(void) | |
{ | |
markboxes(); | |
if(imapcmd("LIST \"\" *") < 0) | |
return; | |
sweepboxes(); | |
} |