From 326aad046922ca3802dc330123a2c050975fb12f Mon Sep 17 00:00:00 2001 From: Manuel Novoa III Date: Tue, 23 Sep 2003 22:49:24 +0000 Subject: Quick fix to make sure vfprintf always checks stream orientation when wchar support is enabled. --- libc/stdio/printf.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'libc/stdio/printf.c') diff --git a/libc/stdio/printf.c b/libc/stdio/printf.c index 1cc121212..bc184ee5f 100644 --- a/libc/stdio/printf.c +++ b/libc/stdio/printf.c @@ -75,6 +75,9 @@ * * Sep 5, 2003 * Implement *s*scanf for the non-buffered stdio case with old_vfprintf. + * + * Sep 23, 2003 + * vfprintf was not always checking for narrow stream orientation. */ /* TODO: @@ -3200,6 +3203,18 @@ int VFPRINTF (FILE * __restrict stream, count = 0; s = format; +#if defined(L_vfprintf) && defined(__UCLIBC_HAS_WCHAR__) + /* Sigh... I forgot that by calling _stdio_fwrite, vfprintf doesn't + * always check the stream's orientation. This is just a temporary + * fix until I rewrite the stdio core work routines. */ + if (stream->modeflags & __FLAG_WIDE) { + stream->modeflags |= __FLAG_ERROR; + count = -1; + goto DONE; + } + stream->modeflags |= __FLAG_NARROW; +#endif + if (_PPFS_init(&ppfs, format) < 0) { /* Bad format string. */ OUTNSTR(stream, (const FMT_TYPE *) ppfs.fmtpos, STRLEN((const FMT_TYPE *)(ppfs.fmtpos))); @@ -3245,6 +3260,10 @@ int VFPRINTF (FILE * __restrict stream, va_end(ppfs.arg); /* Need to clean up after va_copy! */ } +#if defined(L_vfprintf) && defined(__UCLIBC_HAS_WCHAR__) + DONE: +#endif + __STDIO_THREADUNLOCK(stream); return count; -- cgit v1.2.3