summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--payloads/libpayload/include/stdio.h11
-rw-r--r--payloads/libpayload/libc/printf.c14
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 */