summaryrefslogtreecommitdiffstats
path: root/src/lib/stdio.C
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2011-03-05 10:01:45 -0600
committerPatrick Williams <iawillia@us.ibm.com>2011-03-05 10:01:45 -0600
commit706243ac48cf646d503a3f1ec9e6a28c916694bd (patch)
tree5d583486a145a9646eccb9d3c4bce4dad45a2a84 /src/lib/stdio.C
parent5c20d316d21e231daee6455f0a78d5940d59cf23 (diff)
downloadtalos-hostboot-706243ac48cf646d503a3f1ec9e6a28c916694bd.tar.gz
talos-hostboot-706243ac48cf646d503a3f1ec9e6a28c916694bd.zip
Merge of PowerHAL project up to commit:
dd45c30bd53d8e6c123165b83842d08117558a3c
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