V9/libc/fio/fioinit.c
#define FIO_IMP
#include "fio.h"
#include <libc.h>
void
Finit(fd, buf)
char *buf;
{
register Fbuffer *f;
static setfioexit = 1;
extern Fexit();
if(setfioexit){
setfioexit = 0;
onexit(Fexit);
}
fd &= 0x7f;
if(buf)
Ffb[fd] = (Fbuffer *)buf;
else if(!Ffb[fd])
Ffb[fd] = (Fbuffer *)FIOMALLOC((COUNT)sizeof(Fbuffer));
f = Ffb[fd];
FIORESET(f);
f->offset = SEEK(fd, 0L, 1);
}
#include <sys/param.h>
Fbuffer *Ffb[NOFILE];
Fexit()
{
register n;
for(n = 0; n < NOFILE; n++)
if(Ffb[n] && (Ffb[n]->end == 0))
F_flush(Ffb[n], n);
}
F_flush(f, fd)
register Fbuffer *f;
{
register COUNT n;
f->end = 0; /* mark as writing */
if(f->next != f->buf){
n = f->next - f->buf;
if(write(fd, f->buf, n) != n)
return(1);
f->next = f->buf;
}
return(0);
}