diff --git a/Userspace/libc/include/stdio.h b/Userspace/libc/include/stdio.h index 0ebab822..1fa695f4 100644 --- a/Userspace/libc/include/stdio.h +++ b/Userspace/libc/include/stdio.h @@ -141,7 +141,7 @@ extern "C" char *tmpnam(char *); int ungetc(int, FILE *); int vdprintf(int, const char *restrict, va_list); - int vfprintf(FILE *restrict, const char *restrict, va_list); + int vfprintf(FILE *restrict stream, const char *restrict format, va_list ap); int vfscanf(FILE *restrict, const char *restrict, va_list); int vprintf(const char *restrict, va_list); int vscanf(const char *restrict, va_list); diff --git a/Userspace/libc/src/std/stdio.c b/Userspace/libc/src/std/stdio.c index 59a5d731..4b4e0a21 100644 --- a/Userspace/libc/src/std/stdio.c +++ b/Userspace/libc/src/std/stdio.c @@ -412,7 +412,32 @@ export FILE *tmpfile(void); export char *tmpnam(char *); export int ungetc(int, FILE *); export int vdprintf(int, const char *restrict, va_list); -export int vfprintf(FILE *restrict, const char *restrict, va_list); + +export int vfprintf(FILE *restrict stream, const char *restrict format, va_list ap) +{ + if (!stream || !(stream->flags & _i_WRITE)) + return EOF; + + int ret = vprintf_(format, ap); + if (ret < 0) + { + stream->error = 1; + return EOF; + } + + const char *p = format; + while (*p) + { + if (fputc(*p++, stream) == EOF) + { + stream->error = 1; + return EOF; + } + } + + return ret; +} + export int vfscanf(FILE *restrict, const char *restrict, va_list); export int vprintf(const char *restrict, va_list); export int vscanf(const char *restrict, va_list);