streambuf.tcc (__copy_streambufs): Don't use _M_buf_size (synced input is now correct...
authorPaolo Carlini <pcarlini@unitus.it>
Mon, 28 Apr 2003 22:15:58 +0000 (00:15 +0200)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 28 Apr 2003 22:15:58 +0000 (22:15 +0000)
2003-04-28  Paolo Carlini  <pcarlini@unitus.it>

* include/bits/streambuf.tcc (__copy_streambufs): Don't use
_M_buf_size (synced input is now correctly dealt with
elsewhere); when the output buffer is full don't fall back
to a snextc-sputc loop, call overflow instead.

From-SVN: r66190

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/streambuf.tcc

index cc8ed88..853b8ac 100644 (file)
@@ -1,5 +1,12 @@
 2003-04-28  Paolo Carlini  <pcarlini@unitus.it>
 
+       * include/bits/streambuf.tcc (__copy_streambufs): Don't use
+       _M_buf_size (synced input is now correctly dealt with
+       elsewhere); when the output buffer is full don't fall back
+       to a snextc-sputc loop, call overflow instead.
+
+2003-04-28  Paolo Carlini  <pcarlini@unitus.it>
+
        * include/bits/sstream.tcc (pbackfail): Shorten a bit (6 lines)
        the innermost 'if' by factoring out some code.
 
index 05e5a65..1d1843f 100644 (file)
@@ -188,8 +188,6 @@ namespace std
       typedef typename _Traits::off_type       off_type;
 
       streamsize __ret = 0;
-      const off_type __buf_size =
-       __sbin->_M_buf_size > 0 ? __sbin->_M_buf_size : 1;
       try 
        {
          for (;;)
@@ -208,10 +206,9 @@ namespace std
              else 
                {
                  streamsize __charsread;
-                 const off_type __size = std::min(__buf_size,
-                                                  off_type(__sbout->_M_out_end
-                                                  - __sbout->_M_out_cur));
-                 if (__size > 1)
+                 const off_type __size = __sbout->_M_out_end
+                                         - __sbout->_M_out_cur;
+                 if (__size)
                    {
                      _CharT* __buf =
                        static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
@@ -224,15 +221,15 @@ namespace std
                  else
                    {
                      __xtrct = __charsread = 0;
-                     int_type __c = __sbin->sgetc();
-                     while (!_Traits::eq_int_type(__c, _Traits::eof()))
+                     const int_type __c = __sbin->sgetc();
+                     if (!_Traits::eq_int_type(__c, _Traits::eof()))
                        {
                          ++__charsread;
-                         if (_Traits::eq_int_type(__sbout->sputc(_Traits::to_char_type(__c)),
+                         if (_Traits::eq_int_type(__sbout->overflow(__c),
                                                   _Traits::eof()))
                            break;
                          ++__xtrct;
-                         __c = __sbin->snextc();
+                         __sbin->sbumpc();
                        }
                    }                 
                  __ret += __xtrct;