diff options
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | 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 a77f7ec8011..fad6a0868ed 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2003-06-18 Paolo Carlini <pcarlini@unitus.it> + + * 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 <ncm-nospam@cantrip.org> Paolo Carlini <pcarlini@unitus.it> diff --git a/libstdc++-v3/include/bits/sstream.tcc b/libstdc++-v3/include/bits/sstream.tcc index 49a5aa0106e..764e2801d19 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)); } } |