summaryrefslogtreecommitdiffstats
path: root/src/lib/stdio.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/stdio.C')
-rw-r--r--src/lib/stdio.C44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/lib/stdio.C b/src/lib/stdio.C
new file mode 100644
index 000000000..2cdd23d85
--- /dev/null
+++ b/src/lib/stdio.C
@@ -0,0 +1,44 @@
+#include <stdint.h>
+#include <stdio.h>
+#include <util/sprintf.H>
+#include <util/functor.H>
+
+class SprintfBuffer
+{
+ public:
+ int putc(int c)
+ {
+ if ('\b' == c)
+ {
+ iv_pos--;
+ }
+ else
+ {
+ iv_buffer[iv_pos++] = c;
+ }
+ return c;
+ }
+
+ explicit SprintfBuffer(char* buf) : iv_pos(0), iv_buffer(buf) {};
+
+ private:
+ size_t iv_pos;
+ char * iv_buffer;
+};
+
+int sprintf(char *str, const char * format, ...)
+{
+ using Util::mem_ptr_fun;
+ using Util::vasprintf;
+
+ va_list args;
+ va_start(args, format);
+
+ SprintfBuffer console(str);
+ size_t count = vasprintf(mem_ptr_fun(console, &SprintfBuffer::putc),
+ format, args);
+
+ va_end(args);
+
+ return count;
+}
OpenPOWER on IntegriCloud