diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2011-03-05 10:01:45 -0600 |
---|---|---|
committer | Patrick Williams <iawillia@us.ibm.com> | 2011-03-05 10:01:45 -0600 |
commit | 706243ac48cf646d503a3f1ec9e6a28c916694bd (patch) | |
tree | 5d583486a145a9646eccb9d3c4bce4dad45a2a84 /src/lib/stdio.C | |
parent | 5c20d316d21e231daee6455f0a78d5940d59cf23 (diff) | |
download | talos-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.C | 44 |
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; +} |