tmbox.c - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tmbox.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 }