aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libio/iofwide.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/libio/iofwide.c b/libio/iofwide.c
index 231cc56c34..2e2854aa62 100644
--- a/libio/iofwide.c
+++ b/libio/iofwide.c
@@ -36,6 +36,7 @@
# include <locale/localeinfo.h>
# include <wcsmbs/wcsmbsload.h>
# include <iconv/gconv_int.h>
+# include <shlib-compat.h>
#endif
@@ -96,9 +97,20 @@ _IO_fwide (fp, mode)
/* Normalize the value. */
mode = mode < 0 ? -1 : (mode == 0 ? 0 : 1);
- if (mode == 0 || fp->_mode != 0)
- /* The caller simply wants to know about the current orientation
- or the orientation already has been determined. */
+ if (mode == 0)
+ /* The caller simply wants to know about the current orientation. */
+ return fp->_mode;
+
+#if defined SHARED && defined _LIBC \
+ && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
+ if (__builtin_expect (&_IO_stdin_used == NULL, 0)
+ && (fp == _IO_stdin || fp == _IO_stdout || fp == _IO_stderr))
+ /* This is for a stream in the glibc 2.0 format. */
+ return -1;
+#endif
+
+ if (fp->_mode != 0)
+ /* The orientation already has been determined. */
return fp->_mode;
/* Set the orientation appropriately. */