userspace/libc: implement vfprintf function

Signed-off-by: EnderIce2 <enderice2@protonmail.com>
This commit is contained in:
EnderIce2 2025-02-12 02:47:45 +02:00
parent b05868d120
commit 8f7938a1e5
No known key found for this signature in database
GPG Key ID: 2EE20AF089811A5A
2 changed files with 27 additions and 2 deletions

View File

@ -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);

View File

@ -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);