diff options
author | Patrick Georgi <patrick.georgi@secunet.com> | 2011-02-14 19:25:27 +0000 |
---|---|---|
committer | Patrick Georgi <patrick.georgi@coresystems.de> | 2011-02-14 19:25:27 +0000 |
commit | cd913bdf5c995fb3768aaaaeec364e7f5527e4e9 (patch) | |
tree | f929d9966f548530bbfb224ba50394dd4c28e80e | |
parent | a4a022c9418096ae7f6e8074dcd917ff68294e8e (diff) |
Stub out FILE*, stdout/stdin/stderr and implement fprintf on these
- Add FILE*
- Add stdout, stdin, stderr stubs
- Add fprintf that redirects to printf for stdout and stderr and fails otherwise
Signed-off-by: Patrick Georgi <patrick.georgi@secunet.com>
Acked-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@6358 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r-- | payloads/libpayload/include/stdio.h | 11 | ||||
-rw-r--r-- | payloads/libpayload/libc/printf.c | 14 |
2 files changed, 24 insertions, 1 deletions
diff --git a/payloads/libpayload/include/stdio.h b/payloads/libpayload/include/stdio.h index 73af2d18e6..fb40a0dc7e 100644 --- a/payloads/libpayload/include/stdio.h +++ b/payloads/libpayload/include/stdio.h @@ -32,6 +32,15 @@ #include <stddef.h> +struct _FILE { +} _stdout, _stdin, _stderr; + +typedef struct _FILE FILE; + +FILE *stdout = &_stdout; +FILE *stdin = &_stdin; +FILE *stderr = &_stderr; + /** * @defgroup printf Print functions * @{ @@ -39,6 +48,7 @@ int snprintf(char *str, size_t size, const char *fmt, ...); int sprintf(char *str, const char *fmt, ...); int printf(const char *fmt, ...); +int fprintf(FILE *file, const char *fmt, ...); /** @} */ void perror(const char *s); @@ -47,5 +57,4 @@ void perror(const char *s); #define SEEK_CUR 1 /**< The seek offset is against the current position. */ #define SEEK_END 2 /**< The seek offset is against the end of the file. */ - #endif diff --git a/payloads/libpayload/libc/printf.c b/payloads/libpayload/libc/printf.c index 04d39319bc..a1ebb14092 100644 --- a/payloads/libpayload/libc/printf.c +++ b/payloads/libpayload/libc/printf.c @@ -723,6 +723,20 @@ int sprintf(char *str, const char *fmt, ...) return ret; } +int fprintf(FILE *file, const char *fmt, ...) +{ + int ret; + if ((file == stdout) || (file == stderr)) { + va_list args; + va_start(args, fmt); + ret = vprintf(fmt, args); + va_end(args); + + return ret; + } + return -1; +} + struct vsnprintf_data { size_t size; /* Total space for string */ size_t len; /* Count of currently used characters */ |