diff options
Diffstat (limited to 'src/libbio/bprint.c')
-rw-r--r-- | src/libbio/bprint.c | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/src/libbio/bprint.c b/src/libbio/bprint.c index 81e71e5e..2b66605c 100644 --- a/src/libbio/bprint.c +++ b/src/libbio/bprint.c @@ -4,25 +4,17 @@ int Bprint(Biobuf *bp, char *fmt, ...) { - va_list ap; - char *ip, *ep, *out; + va_list args; + Fmt f; int n; - ep = (char*)bp->ebuf; - ip = ep + bp->ocount; - va_start(ap, fmt); - out = vseprint(ip, ep, fmt, ap); - va_end(ap); - if(out == 0 || out >= ep-5) { - Bflush(bp); - ip = ep + bp->ocount; - va_start(ap, fmt); - out = vseprint(ip, ep, fmt, ap); - va_end(ap); - if(out >= ep-5) - return Beof; - } - n = out-ip; - bp->ocount += n; + if(Bfmtinit(&f, bp) < 0) + return -1; + va_start(args, fmt); + f.args = args; + n = dofmt(&f, fmt); + va_end(args); + if(n > 0 && Bfmtflush(&f) < 0) + return -1; return n; } |