xref: /inferno-os/libbio/bvprint.c (revision 86c8d15162050ac1bbb2de38961263da3a4b1f87)
172335078SCharles Forsyth #include	"lib9.h"
272335078SCharles Forsyth #include	<bio.h>
372335078SCharles Forsyth 
472335078SCharles Forsyth static int
fmtBflush(Fmt * f)572335078SCharles Forsyth fmtBflush(Fmt *f)
672335078SCharles Forsyth {
772335078SCharles Forsyth 	Biobuf *bp;
872335078SCharles Forsyth 
972335078SCharles Forsyth 	bp = f->farg;
1072335078SCharles Forsyth 	bp->ocount = (char*)f->to - (char*)f->stop;
1172335078SCharles Forsyth 	if(Bflush(bp) < 0)
1272335078SCharles Forsyth 		return 0;
1372335078SCharles Forsyth 	f->stop = bp->ebuf;
1472335078SCharles Forsyth 	f->to = (char*)f->stop + bp->ocount;
1572335078SCharles Forsyth 	f->start = f->to;
1672335078SCharles Forsyth 	return 1;
1772335078SCharles Forsyth }
1872335078SCharles Forsyth 
1972335078SCharles Forsyth int
Bvprint(Biobuf * bp,char * fmt,va_list arg)2072335078SCharles Forsyth Bvprint(Biobuf *bp, char *fmt, va_list arg)
2172335078SCharles Forsyth {
2272335078SCharles Forsyth 	int n;
2372335078SCharles Forsyth 	Fmt f;
2472335078SCharles Forsyth 
2572335078SCharles Forsyth 	f.runes = 0;
2672335078SCharles Forsyth 	f.stop = bp->ebuf;
2772335078SCharles Forsyth 	f.start = (char*)f.stop + bp->ocount;
2872335078SCharles Forsyth 	f.to = f.start;
2972335078SCharles Forsyth 	f.flush = fmtBflush;
3072335078SCharles Forsyth 	f.farg = bp;
3172335078SCharles Forsyth 	f.nfmt = 0;
32*86c8d151SCharles Forsyth #ifdef va_copy
33*86c8d151SCharles Forsyth 	va_copy(f.args, arg);
34*86c8d151SCharles Forsyth #else
3572335078SCharles Forsyth 	f.args = arg;
36*86c8d151SCharles Forsyth #endif
3772335078SCharles Forsyth 	n = dofmt(&f, fmt);
38*86c8d151SCharles Forsyth #ifdef va_copy
39*86c8d151SCharles Forsyth 	va_end(f.args);
40*86c8d151SCharles Forsyth #endif
4172335078SCharles Forsyth 	bp->ocount = (char*)f.to - (char*)f.stop;
4272335078SCharles Forsyth 	return n;
4372335078SCharles Forsyth }
44