diff options
author | Paolo Carlini <pcarlini@unitus.it> | 2002-11-18 21:03:52 +0100 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2002-11-18 20:03:52 +0000 |
commit | d9d71657bddce08c4686c41cf2ea00b344bd47b6 (patch) | |
tree | e0fbd6ee779e2f0dfea99116014ed4f23ddeb579 /libstdc++-v3 | |
parent | c986baf631d89169f339f1d23014e62614d2e93e (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/streambuf.tcc | 14 |
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) |