summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@unitus.it>2002-11-18 21:03:52 +0100
committerPaolo Carlini <paolo@gcc.gnu.org>2002-11-18 20:03:52 +0000
commitd9d71657bddce08c4686c41cf2ea00b344bd47b6 (patch)
treee0fbd6ee779e2f0dfea99116014ed4f23ddeb579 /libstdc++-v3
parentc986baf631d89169f339f1d23014e62614d2e93e (diff)
downloadgcc-d9d71657bddce08c4686c41cf2ea00b344bd47b6.tar.gz
PR libstdc++/6745 (continued)
2002-11-18 Paolo Carlini <pcarlini@unitus.it> PR libstdc++/6745 (continued) * include/bits/streambuf.tcc (__copy_streambufs): Deal with interactive input by using isatty as in the fix for libstdc++/8399. From-SVN: r59229
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/include/bits/streambuf.tcc14
2 files changed, 19 insertions, 2 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 302f582f5e2..7934d74d515 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,10 @@
+2002-11-18 Paolo Carlini <pcarlini@unitus.it>
+
+ PR libstdc++/6745 (continued)
+ * include/bits/streambuf.tcc (__copy_streambufs):
+ Deal with interactive input by using isatty as in the
+ fix for libstdc++/8399.
+
2002-11-17 Jakub Jelinek <jakub@redhat.com>
* config/linker-map.gnu: Export _S_construct even if size_t is
diff --git a/libstdc++-v3/include/bits/streambuf.tcc b/libstdc++-v3/include/bits/streambuf.tcc
index c8084ee68ad..cdaab2e213b 100644
--- a/libstdc++-v3/include/bits/streambuf.tcc
+++ b/libstdc++-v3/include/bits/streambuf.tcc
@@ -37,6 +37,10 @@
#pragma GCC system_header
+#ifdef _GLIBCPP_HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
namespace std
{
template<typename _CharT, typename _Traits>
@@ -219,8 +223,14 @@ namespace std
}
else
{
- _CharT __buf[256];
- streamsize __charsread = __sbin->sgetn(__buf, sizeof(__buf));
+#ifdef _GLIBCPP_HAVE_ISATTY
+ size_t __size = isatty(0) ? 1 : static_cast<size_t>(BUFSIZ);
+#else
+ size_t __size = 1;
+#endif
+ _CharT* __buf =
+ static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __size));
+ streamsize __charsread = __sbin->sgetn(__buf, __size);
__xtrct = __sbout->sputn(__buf, __charsread);
__ret += __xtrct;
if (__xtrct != __charsread)