68 lines
872 B
C
68 lines
872 B
C
#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();
|
|
}
|