#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();
}