|
|
1.1 root 1: #define FIO_IMP
2: #include "fio.h"
3: #include <libc.h>
4:
5: void
6: Finit(fd, buf)
7: char *buf;
8: {
9: register Fbuffer *f;
10: static setfioexit = 1;
11: extern Fexit();
12:
13: if(setfioexit){
14: setfioexit = 0;
15: onexit(Fexit);
16: }
17: fd &= 0x7f;
18: if(buf)
19: Ffb[fd] = (Fbuffer *)buf;
20: else if(!Ffb[fd])
21: Ffb[fd] = (Fbuffer *)FIOMALLOC((COUNT)sizeof(Fbuffer));
22: f = Ffb[fd];
23: FIORESET(f);
24: f->offset = SEEK(fd, 0L, 1);
25: }
26:
27: #include <sys/param.h>
28:
29: Fbuffer *Ffb[NOFILE];
30:
31: Fexit()
32: {
33: register n;
34:
35: for(n = 0; n < NOFILE; n++)
36: if(Ffb[n] && (Ffb[n]->end == 0))
37: F_flush(Ffb[n], n);
38: }
39:
40: F_flush(f, fd)
41: register Fbuffer *f;
42: {
43: register COUNT n;
44:
45: f->end = 0; /* mark as writing */
46: if(f->next != f->buf){
47: n = f->next - f->buf;
48: if(write(fd, f->buf, n) != n)
49: return(1);
50: f->next = f->buf;
51: }
52: return(0);
53: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.