summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/include/bits/sstream.tcc29
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));
}
}