V9/libc/fio/fioinit.c

Compare this file to the similar file:
Show the results in this format:

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