xref: /plan9/sys/src/libbio/bvprint.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1*9a747e4fSDavid du Colombier #include	<u.h>
2*9a747e4fSDavid du Colombier #include	<libc.h>
3*9a747e4fSDavid du Colombier #include	<bio.h>
4*9a747e4fSDavid du Colombier 
5*9a747e4fSDavid du Colombier static int
fmtBflush(Fmt * f)6*9a747e4fSDavid du Colombier fmtBflush(Fmt *f)
7*9a747e4fSDavid du Colombier {
8*9a747e4fSDavid du Colombier 	Biobufhdr *bp;
9*9a747e4fSDavid du Colombier 
10*9a747e4fSDavid du Colombier 	bp = f->farg;
11*9a747e4fSDavid du Colombier 	bp->ocount = (char*)f->to - (char*)f->stop;
12*9a747e4fSDavid du Colombier 	if(Bflush(bp) < 0)
13*9a747e4fSDavid du Colombier 		return 0;
14*9a747e4fSDavid du Colombier 	f->stop = bp->ebuf;
15*9a747e4fSDavid du Colombier 	f->to = (char*)f->stop + bp->ocount;
16*9a747e4fSDavid du Colombier 	f->start = f->to;
17*9a747e4fSDavid du Colombier 	return 1;
18*9a747e4fSDavid du Colombier }
19*9a747e4fSDavid du Colombier 
20*9a747e4fSDavid du Colombier int
Bvprint(Biobufhdr * bp,char * fmt,va_list arg)21*9a747e4fSDavid du Colombier Bvprint(Biobufhdr *bp, char *fmt, va_list arg)
22*9a747e4fSDavid du Colombier {
23*9a747e4fSDavid du Colombier 	int n;
24*9a747e4fSDavid du Colombier 	Fmt f;
25*9a747e4fSDavid du Colombier 
26*9a747e4fSDavid du Colombier 	f.runes = 0;
27*9a747e4fSDavid du Colombier 	f.stop = bp->ebuf;
28*9a747e4fSDavid du Colombier 	f.start = (char*)f.stop + bp->ocount;
29*9a747e4fSDavid du Colombier 	f.to = f.start;
30*9a747e4fSDavid du Colombier 	f.flush = fmtBflush;
31*9a747e4fSDavid du Colombier 	f.farg = bp;
32*9a747e4fSDavid du Colombier 	f.nfmt = 0;
33*9a747e4fSDavid du Colombier 	f.args = arg;
34*9a747e4fSDavid du Colombier 	n = dofmt(&f, fmt);
35*9a747e4fSDavid du Colombier 	bp->ocount = (char*)f.to - (char*)f.stop;
36*9a747e4fSDavid du Colombier 	return n;
37*9a747e4fSDavid du Colombier }
38