xref: /inferno-os/libbio/bputc.c (revision d0e1d143ef6f03c75c008c7ec648859dd260cbab)
1 #include	"lib9.h"
2 #include	<bio.h>
3 
4 int
5 Bputc(Biobuf *bp, int c)
6 {
7 	int i, j;
8 
9 loop:
10 	i = bp->ocount;
11 	j = i+1;
12 	if(i != 0) {
13 		bp->ocount = j;
14 		bp->ebuf[i] = c;
15 		return 0;
16 	}
17 	if(bp->state != Bwactive)
18 		return Beof;
19 	j = write(bp->fid, bp->bbuf, bp->bsize);
20 	if(j == bp->bsize) {
21 		bp->ocount = -bp->bsize;
22 		bp->offset += j;
23 		goto loop;
24 	}
25 	fprint(2, "Bputc: write error\n");
26 	bp->state = Binactive;
27 	bp->ocount = 0;
28 	return Beof;
29 }
30