summaryrefslogtreecommitdiff
path: root/linux/printbuf_userspace.c
diff options
context:
space:
mode:
Diffstat (limited to 'linux/printbuf_userspace.c')
-rw-r--r--linux/printbuf_userspace.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/linux/printbuf_userspace.c b/linux/printbuf_userspace.c
new file mode 100644
index 00000000..84187f1f
--- /dev/null
+++ b/linux/printbuf_userspace.c
@@ -0,0 +1,20 @@
+
+#include <stdio.h>
+#include <linux/printbuf.h>
+
+void prt_printf(struct printbuf *out, const char *fmt, ...)
+{
+ va_list args;
+ int len;
+
+ do {
+ va_start(args, fmt);
+ len = vsnprintf(out->buf + out->pos, printbuf_remaining(out), fmt, args);
+ va_end(args);
+ } while (len + 1 >= printbuf_remaining(out) &&
+ !printbuf_make_room(out, len + 1));
+
+ len = min_t(size_t, len,
+ printbuf_remaining(out) ? printbuf_remaining(out) - 1 : 0);
+ out->pos += len;
+}