xref: /inferno-os/libbio/bflush.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include	"lib9.h"
2*37da2899SCharles.Forsyth #include	<bio.h>
3*37da2899SCharles.Forsyth 
4*37da2899SCharles.Forsyth int
Bflush(Biobuf * bp)5*37da2899SCharles.Forsyth Bflush(Biobuf *bp)
6*37da2899SCharles.Forsyth {
7*37da2899SCharles.Forsyth 	int n, c;
8*37da2899SCharles.Forsyth 
9*37da2899SCharles.Forsyth 	switch(bp->state) {
10*37da2899SCharles.Forsyth 	case Bwactive:
11*37da2899SCharles.Forsyth 		n = bp->bsize+bp->ocount;
12*37da2899SCharles.Forsyth 		if(n == 0)
13*37da2899SCharles.Forsyth 			return 0;
14*37da2899SCharles.Forsyth 		c = write(bp->fid, bp->bbuf, n);
15*37da2899SCharles.Forsyth 		if(n == c) {
16*37da2899SCharles.Forsyth 			bp->offset += n;
17*37da2899SCharles.Forsyth 			bp->ocount = -bp->bsize;
18*37da2899SCharles.Forsyth 			return 0;
19*37da2899SCharles.Forsyth 		}
20*37da2899SCharles.Forsyth 		bp->state = Binactive;
21*37da2899SCharles.Forsyth 		bp->ocount = 0;
22*37da2899SCharles.Forsyth 		break;
23*37da2899SCharles.Forsyth 
24*37da2899SCharles.Forsyth 	case Bracteof:
25*37da2899SCharles.Forsyth 		bp->state = Bractive;
26*37da2899SCharles.Forsyth 
27*37da2899SCharles.Forsyth 	case Bractive:
28*37da2899SCharles.Forsyth 		bp->icount = 0;
29*37da2899SCharles.Forsyth 		bp->gbuf = bp->ebuf;
30*37da2899SCharles.Forsyth 		return 0;
31*37da2899SCharles.Forsyth 	}
32*37da2899SCharles.Forsyth 	return Beof;
33*37da2899SCharles.Forsyth }
34