From 4c526d09602ab32b5412501b42b4fbe95e8148d2 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Wed, 18 Jun 2003 20:34:09 +0200 Subject: [PATCH] sstream.tcc (seekoff): We can't seek beyond _M_out_lim... 2003-06-18 Paolo Carlini * include/bits/sstream.tcc (seekoff): We can't seek beyond _M_out_lim, therefore _M_move_out_cur boils down to simply updating _M_out_cur. (seekpos): Likewise, clean up. From-SVN: r68162 --- libstdc++-v3/ChangeLog | 7 +++++++ libstdc++-v3/include/bits/sstream.tcc | 29 +++++++++------------------ 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index a77f7ec80119..fad6a0868edf 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2003-06-18 Paolo Carlini + + * include/bits/sstream.tcc (seekoff): We can't seek beyond + _M_out_lim, therefore _M_move_out_cur boils down to simply + updating _M_out_cur. + (seekpos): Likewise, clean up. + 2003-06-18 Nathan C. Myers Paolo Carlini diff --git a/libstdc++-v3/include/bits/sstream.tcc b/libstdc++-v3/include/bits/sstream.tcc index 49a5aa0106e6..764e2801d197 100644 --- a/libstdc++-v3/include/bits/sstream.tcc +++ b/libstdc++-v3/include/bits/sstream.tcc @@ -157,7 +157,7 @@ namespace std && __newoffo + __off >= 0 && this->_M_out_lim - __beg >= __newoffo + __off) { - _M_move_out_cur(__newoffo + __off - (this->_M_out_cur - __beg)); + this->_M_out_cur = __beg + __newoffo + __off; __ret = pos_type(__newoffo); } } @@ -174,34 +174,25 @@ namespace std if (_M_string.capacity()) { off_type __pos = __sp; // Use streamoff operator to do conversion. - char_type* __beg = NULL; - char_type* __end = NULL; const bool __testin = (ios_base::in & this->_M_mode & __mode) != 0; const bool __testout = (ios_base::out & this->_M_mode & __mode) != 0; + char_type* __beg = __testin ? this->_M_in_beg : this->_M_out_beg; // NB: Ordered. bool __testposi = false; bool __testposo = false; - if (__testin) - { - __beg = this->_M_in_beg; - __end = this->_M_in_end; - if (0 <= __pos && __pos <= __end - __beg) - __testposi = true; - } - if (__testout) - { - __beg = this->_M_out_beg; - __end = this->_M_out_lim; - if (0 <= __pos && __pos <= __end - __beg) - __testposo = true; - } + if (__testin && 0 <= __pos + && __pos <= this->_M_in_end - __beg) + __testposi = true; + if (__testout && 0 <= __pos + && __pos <= this->_M_out_lim - __beg) + __testposo = true; if (__testposi || __testposo) { if (__testposi) - this->_M_in_cur = this->_M_in_beg + __pos; + this->_M_in_cur = __beg + __pos; if (__testposo) - _M_move_out_cur((__pos) - (this->_M_out_cur - __beg)); + this->_M_out_cur = __beg + __pos; __ret = pos_type(off_type(__pos)); } } -- 2.47.3