xref: /plan9-contrib/sys/src/libbio/bflush.c (revision 59cc4ca53493a3c6d2349fe2b7f7c40f7dce7294)
13e12c5d1SDavid du Colombier #include	<u.h>
23e12c5d1SDavid du Colombier #include	<libc.h>
33e12c5d1SDavid du Colombier #include	<bio.h>
43e12c5d1SDavid du Colombier 
53e12c5d1SDavid du Colombier int
Bflush(Biobufhdr * bp)63e12c5d1SDavid du Colombier Bflush(Biobufhdr *bp)
73e12c5d1SDavid du Colombier {
83e12c5d1SDavid du Colombier 	int n, c;
93e12c5d1SDavid du Colombier 
10bd389b36SDavid du Colombier 	switch(bp->state) {
11bd389b36SDavid du Colombier 	case Bwactive:
123e12c5d1SDavid du Colombier 		n = bp->bsize+bp->ocount;
133e12c5d1SDavid du Colombier 		if(n == 0)
143e12c5d1SDavid du Colombier 			return 0;
153e12c5d1SDavid du Colombier 		c = write(bp->fid, bp->bbuf, n);
163e12c5d1SDavid du Colombier 		if(n == c) {
173e12c5d1SDavid du Colombier 			bp->offset += n;
183e12c5d1SDavid du Colombier 			bp->ocount = -bp->bsize;
193e12c5d1SDavid du Colombier 			return 0;
203e12c5d1SDavid du Colombier 		}
213e12c5d1SDavid du Colombier 		bp->state = Binactive;
223e12c5d1SDavid du Colombier 		bp->ocount = 0;
23bd389b36SDavid du Colombier 		break;
24bd389b36SDavid du Colombier 
25bd389b36SDavid du Colombier 	case Bracteof:
26bd389b36SDavid du Colombier 		bp->state = Bractive;
27bd389b36SDavid du Colombier 
28bd389b36SDavid du Colombier 	case Bractive:
29bd389b36SDavid du Colombier 		bp->icount = 0;
30*219b2ee8SDavid du Colombier 		bp->gbuf = bp->ebuf;
31bd389b36SDavid du Colombier 		return 0;
323e12c5d1SDavid du Colombier 	}
333e12c5d1SDavid du Colombier 	return Beof;
343e12c5d1SDavid du Colombier }
35