OSDN Git Service

Quick fix to make sure vfprintf always checks stream orientation when
authorManuel Novoa III <mjn3@codepoet.org>
Tue, 23 Sep 2003 22:49:24 +0000 (22:49 -0000)
committerManuel Novoa III <mjn3@codepoet.org>
Tue, 23 Sep 2003 22:49:24 +0000 (22:49 -0000)
wchar support is enabled.

libc/stdio/printf.c

index 1cc1212..bc184ee 100644 (file)
@@ -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;