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