diff options
author | Simon Glass <sjg@chromium.org> | 2016-05-14 20:02:53 (GMT) |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2016-05-27 02:48:44 (GMT) |
commit | 5c411d88be8df5f6a8a1ea0c961f7c35ba82c064 (patch) | |
tree | 149a59fc9d4a86c098c24914c5b6f1791a818f5f | |
parent | 1fb67608b309bd7f49842fbdfb1dc2b18a250965 (diff) | |
download | u-boot-fsl-qoriq-5c411d88be8df5f6a8a1ea0c961f7c35ba82c064.tar.xz |
tiny-printf: Support snprintf()
Add a simple version of this function for SPL. It does not check the buffer
size as this would add to the code size.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Stefan Roese <sr@denx.de>
-rw-r--r-- | lib/tiny-printf.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/lib/tiny-printf.c b/lib/tiny-printf.c index fbd5368..4b70263 100644 --- a/lib/tiny-printf.c +++ b/lib/tiny-printf.c @@ -16,6 +16,9 @@ static char *bf; static char zs; +/* Current position in sprintf() output string */ +static char *outstr; + static void out(char c) { *bf++ = c; @@ -40,7 +43,7 @@ static void div_out(unsigned int *num, unsigned int div) out_dgt(dgt); } -int vprintf(const char *fmt, va_list va) +int _vprintf(const char *fmt, va_list va, void (*putc)(const char ch)) { char ch; char *p; @@ -133,8 +136,28 @@ int printf(const char *fmt, ...) int ret; va_start(va, fmt); - ret = vprintf(fmt, va); + ret = _vprintf(fmt, va, putc); + va_end(va); + + return ret; +} + +static void putc_outstr(char ch) +{ + *outstr++ = ch; +} + +/* Note that size is ignored */ +int snprintf(char *buf, size_t size, const char *fmt, ...) +{ + va_list va; + int ret; + + va_start(va, fmt); + outstr = buf; + ret = _vprintf(fmt, va, putc_outstr); va_end(va); + *outstr = '\0'; return ret; } |