int Bvlprint(Biobuf *bp, const char *fmt, va_list args) { Fmt f; Rune buf[256]; int res; if(utf8locale()) return Bvprint(bp, fmt, args); f.runes = 1; f.start = (char*)buf; f.to = (char*)buf; f.stop = (char*)(buf + nelem(buf) - 1); f.flush = fmtBlflush; f.farg = bp; f.nfmt = 0; va_copy(f.args, args); res = dofmt(&f, fmt); va_end(f.args); if(res > 0 && fmtBlflush(&f) == 0) return -1; return res; }
int Bprint(Biobuf *bp, char *fmt, ...) { va_list arg; int n; va_start(arg, fmt); n = Bvprint(bp, fmt, arg); va_end(arg); return n; }
void xprint(char *fmt, ...) { va_list arglist; va_start(arglist, fmt); if(Bvprint(&bout, fmt, arglist)<0){ fprint(2, "xd: i/o error\n"); exits("i/o error"); } va_end(arglist); }