+2001-10-25 Benjamin Kosnik <bkoz@redhat.com>
+
+ libstdc++/4545
+ * include/bits/ostream.tcc (ostream::operator<<(streambuf*)): Fix
+ exceptions.
+ * include/bits/istream.tcc (istream::operator>>(streambuf*): Make
+ consistent, where possible.
+ * include/bits/streambuf.tcc: Tweak.
+
+2001-10-25 Brendan Kehoe <brendan@zen.org>
+
+ libstdc++/4536
+ * bits/ostream.tcc (seekp): Scope use as ios_base::failbit.
+ * bits/istream.tcc (seekg): Likewise.
+
2001-10-25 Benjamin Kosnik <bkoz@redhat.com>
Peter Schmid <schmid@snake.iap.physik.tu-darmstadt.de>
Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
basic_istream<_CharT, _Traits>::
operator>>(__streambuf_type* __sbout)
{
- streamsize __xtrct = 0;
- __streambuf_type* __sbin = this->rdbuf();
- sentry __cerb(*this, false);
- if (__sbout && __cerb)
- __xtrct = __copy_streambufs(*this, __sbin, __sbout);
- if (!__sbout || !__xtrct)
- this->setstate(ios_base::failbit);
- return *this;
+ sentry __cerb(*this, false);
+ if (__cerb)
+ {
+ try
+ {
+ streamsize __xtrct = 0;
+ if (__sbout)
+ {
+ __streambuf_type* __sbin = this->rdbuf();
+ __xtrct = __copy_streambufs(*this, __sbin, __sbout);
+ }
+ if (!__sbout || !__xtrct)
+ this->setstate(ios_base::failbit);
+ }
+ catch(exception& __fail)
+ {
+ // 27.6.2.5.1 Common requirements.
+ // Turn this on without causing an ios::failure to be thrown.
+ this->setstate(ios_base::badbit);
+ if ((this->exceptions() & ios_base::badbit) != 0)
+ __throw_exception_again;
+ }
+ }
+ return *this;
}
template<typename _CharT, typename _Traits>
// 129. Need error indication from seekp() and seekg()
if (__err == pos_type(off_type(-1)))
- this->setstate(failbit);
+ this->setstate(ios_base::failbit);
#endif
}
catch(exception& __fail)
// 129. Need error indication from seekp() and seekg()
if (__err == pos_type(off_type(-1)))
- this->setstate(failbit);
+ this->setstate(ios_base::failbit);
#endif
}
catch(exception& __fail)
return *this;
}
+ template<typename _CharT, typename _Traits>
+ basic_ostream<_CharT, _Traits>&
+ basic_ostream<_CharT, _Traits>::operator<<(__streambuf_type* __sbin)
+ {
+ sentry __cerb(*this);
+ if (__cerb)
+ {
+ try
+ {
+ streamsize __xtrct = 0;
+ if (__sbin)
+ {
+ __streambuf_type* __sbout = this->rdbuf();
+ __xtrct = __copy_streambufs(*this, __sbin, __sbout);
+ }
+ else
+ this->setstate(ios_base::badbit);
+ if (!__xtrct)
+ this->setstate(ios_base::failbit);
+ }
+ catch(exception& __fail)
+ {
+ // 27.6.2.5.1 Common requirements.
+ // Turn this on without causing an ios::failure to be thrown.
+ this->setstate(ios_base::badbit);
+ if ((this->exceptions() & ios_base::badbit) != 0)
+ __throw_exception_again;
+ }
+ }
+ return *this;
+ }
+
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::operator<<(bool __n)
return *this;
}
- template<typename _CharT, typename _Traits>
- basic_ostream<_CharT, _Traits>&
- basic_ostream<_CharT, _Traits>::operator<<(__streambuf_type* __sbin)
- {
- streamsize __xtrct = 0;
- __streambuf_type* __sbout = this->rdbuf();
- sentry __cerb(*this);
- if (__sbin && __cerb)
- __xtrct = __copy_streambufs(*this, __sbin, __sbout);
- if (!__sbin || !__xtrct)
- this->setstate(ios_base::failbit);
- return *this;
- }
-
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::put(char_type __c)
// 129. Need error indication from seekp() and seekg()
if (__err == pos_type(off_type(-1)))
- this->setstate(failbit);
+ this->setstate(ios_base::failbit);
#endif
}
return *this;
// 129. Need error indication from seekp() and seekg()
if (__err == pos_type(off_type(-1)))
- this->setstate(failbit);
+ this->setstate(ios_base::failbit);
}
#endif
return *this;
// Local Variables:
// mode:C++
// End:
-
streamsize __bufsize = __sbin->in_avail();
streamsize __xtrct;
bool __testput = __sbout->_M_mode & ios_base::out;
- try {
- while (__testput && __bufsize != -1)
- {
- __xtrct = __sbout->sputn(__sbin->gptr(), __bufsize);
- __ret += __xtrct;
- __sbin->_M_in_cur_move(__xtrct);
- if (__xtrct == __bufsize)
- {
- if (__sbin->sgetc() == _Traits::eof())
- break;
- __bufsize = __sbin->in_avail();
- }
- else
- break;
- }
- }
- catch(exception& __fail) {
- if ((__ios.exceptions() & ios_base::failbit) != 0)
- __throw_exception_again;
- }
+ try
+ {
+ while (__testput && __bufsize != -1)
+ {
+ __xtrct = __sbout->sputn(__sbin->gptr(), __bufsize);
+ __ret += __xtrct;
+ __sbin->_M_in_cur_move(__xtrct);
+ if (__xtrct == __bufsize)
+ {
+ if (__sbin->sgetc() == _Traits::eof())
+ break;
+ __bufsize = __sbin->in_avail();
+ }
+ else
+ break;
+ }
+ }
+ catch(exception& __fail)
+ {
+ __ios.setstate(ios_base::failbit);
+ if ((__ios.exceptions() & ios_base::failbit) != 0)
+ __throw_exception_again;
+ }
return __ret;
}
} // namespace std
#endif // _CPP_BITS_STREAMBUF_TCC
-