Patchwork [3/4] libpayload: Stub out FILE*, stdout/stdin/stderr and implement fprintf on these

login
register
about
Submitter Patrick Georgi
Date 2011-02-11 09:57:16
Message ID <1297436253.7802.2.camel@linux-0a8x.site>
Download mbox | patch
Permalink /patch/2625/
State Accepted
Commit r6358
Headers show

Comments

Patrick Georgi - 2011-02-11 09:57:16
- 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>
---
 payloads/libpayload/include/stdio.h |   11 ++++++++++-
 payloads/libpayload/libc/printf.c   |   14 ++++++++++++++
 2 files changed, 24 insertions(+), 1 deletions(-)
Stefan Reinauer - 2011-02-11 18:04:15
On 11.02.2011, at 01:57, Patrick Georgi <Patrick.Georgi@secunet.com> wrote:

> - 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> 

> ---
> payloads/libpayload/include/stdio.h |   11 ++++++++++-
> 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 73af2d1..fb40a0d 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 04d3931..a1ebb14 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 */
> -- 
> 1.7.1
> 
> 
> -- 
> coreboot mailing list: coreboot@coreboot.org
> http://www.coreboot.org/mailman/listinfo/coreboot
>

Patch

diff --git a/payloads/libpayload/include/stdio.h b/payloads/libpayload/include/stdio.h
index 73af2d1..fb40a0d 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 04d3931..a1ebb14 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 */