فهرست منبع

Quick fix to make sure vfprintf always checks stream orientation when
wchar support is enabled.

Manuel Novoa III 21 سال پیش
والد
کامیت
326aad0469
1فایلهای تغییر یافته به همراه19 افزوده شده و 0 حذف شده
  1. 19 0
      libc/stdio/printf.c

+ 19 - 0
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;