diff options
Diffstat (limited to 'src/base/io/vprint.c')
-rw-r--r-- | src/base/io/vprint.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/base/io/vprint.c b/src/base/io/vprint.c new file mode 100644 index 0000000..6fa446e --- /dev/null +++ b/src/base/io/vprint.c @@ -0,0 +1,34 @@ +#include "internal.h" + +static int +flush(fmt·State *fmt) +{ + io·Header *io = fmt->file; + io->olen = fmt->buffer.cur - fmt->buffer.end; + if(io·flush(io)) + return 0; + + fmt->buffer.end = (char*)io->e; + fmt->buffer.cur = fmt->buffer.beg = fmt->buffer.end + io->olen; + return 1; +} + +int +io·vprint(io·Header *io, char *fmt, va_list args) +{ + int n; + fmt·State f; + + f.buffer.end = (char*)io->e; + f.buffer.beg = f.buffer.cur = (char*)(io->e + io->olen); + f.n = 0; + f.file = io; + f.flush = flush; + + va_copy(f.args,args); + n = fmt·do(&f, fmt); + va_end(f.args); + + io->olen = f.buffer.cur - f.buffer.beg; + return n; +} |