ref: a9ca97f3154d7cf8951a4e80940e623952722a1a
dir: /buffer.c/
#include <u.h>
#include <libc.h>
#include <fcall.h>
#include <thread.h>
#include <9p.h>
#include "alt.h"
static void
bufferFree(Buffer *match)
{
if(match->name)
free(match->name);
free(match);
}
char *
bufferDrop(Buffer *base, char *name)
{
Buffer *mp, *bp;
for(bp = base; bp->next; bp = bp->next){
mp = bp->next;
if(strcmp(bp->next->name, name) == 0){
if(mp && mp->next)
bp->next = mp->next;
else
bp->next = nil;
if(mp)
bufferFree(mp);
}
}
return nil;
}
char *
bufferPush(Buffer *base, char *name)
{
Buffer *b, *ep;
for(ep = base; ep->next; ep = ep->next){
if(ep && strcmp(ep->name, name) == 0)
return "buffer exists";
if(ep->next == nil)
break;
}
b = emalloc(sizeof(*b));
b->name = estrdup(name);
b->notify = nil;
b->input = base->input;
ep->next = b;
return nil;
}
Buffer *
bufferSearch(Buffer *base, char *name)
{
Buffer *sp;
for(sp = base; sp; sp = sp->next)
if(strcmp(sp->name, name) == 0)
return sp;
return nil;
}
Buffer*
bufferCreate(void (*input)(char*), char *(*ctl)(char*, char*))
{
Buffer *b;
b = emalloc(sizeof(*b));
b->name = "root";
b->input = input;
b->ctl = ctl;
b->notify = nil;
b->next = nil;
return b;
}