aboutsummaryrefslogtreecommitdiff
path: root/src/libbio/bprint.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libbio/bprint.c')
-rw-r--r--src/libbio/bprint.c28
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;
}