aboutsummaryrefslogtreecommitdiff
path: root/src/base/io/vprint.c
diff options
context:
space:
mode:
authorNicholas Noll <nbnoll@eml.cc>2021-12-04 14:10:21 -0800
committerNicholas Noll <nbnoll@eml.cc>2021-12-04 14:10:21 -0800
commit12e09f9f85ac48ff891adf92f3b2c9a5fea27273 (patch)
tree60051793885e9978dadf6672ef85cdda216676a2 /src/base/io/vprint.c
parentb80a3d28ce42be4fdec451f74620b10ee75219dc (diff)
Chore(REMOVE): finished deprecation of old io functions.
The old methods were simple wrappers of C standard library functions. We've moved (painfully) over to a new interface that allows for files to live on the stack. All users of the functionality are ported over.
Diffstat (limited to 'src/base/io/vprint.c')
-rw-r--r--src/base/io/vprint.c34
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;
+}