Commit ff5d863f by Paolo Carlini Committed by Paolo Carlini

re PR libstdc++/9563 (ostream::sentry returns true after a failed preparation)

2003-02-12  Paolo Carlini  <pcarlini@unitus.it>

	PR libstdc++/9563
	* include/bits/ostream.tcc (sentry::sentry): Check
	the state of the stream after the preparation.
	* testsuite/27_io/ostream_sentry.cc (test02): Add.

From-SVN: r62779
parent 55ae46b1
2003-02-12 Paolo Carlini <pcarlini@unitus.it>
PR libstdc++/9563
* include/bits/ostream.tcc (sentry::sentry): Check
the state of the stream after the preparation.
* testsuite/27_io/ostream_sentry.cc (test02): Add.
2003-02-11 Benjamin Kosnik <bkoz@redhat.com> 2003-02-11 Benjamin Kosnik <bkoz@redhat.com>
* include/Makefile.am (stamp-std-precompile): Add rule. * include/Makefile.am (stamp-std-precompile): Add rule.
......
...@@ -41,11 +41,19 @@ namespace std ...@@ -41,11 +41,19 @@ namespace std
template<typename _CharT, typename _Traits> template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>::sentry:: basic_ostream<_CharT, _Traits>::sentry::
sentry(basic_ostream<_CharT,_Traits>& __os) sentry(basic_ostream<_CharT,_Traits>& __os)
: _M_ok(__os.good()), _M_os(__os) : _M_os(__os)
{ {
// XXX MT // XXX MT
if (_M_ok && __os.tie()) if (__os.good() && __os.tie())
__os.tie()->flush(); __os.tie()->flush();
if (__os.good())
_M_ok = true;
else
{
_M_ok = false;
__os.setstate(ios_base::failbit);
}
} }
template<typename _CharT, typename _Traits> template<typename _CharT, typename _Traits>
......
...@@ -46,8 +46,40 @@ test01() ...@@ -46,8 +46,40 @@ test01()
VERIFY( bool(sentry1) == true ); VERIFY( bool(sentry1) == true );
} }
// libstdc++/9563
struct buf: std::streambuf
{
std::ios *io_;
buf (std::ios *io): io_ (io) { }
virtual int sync ()
{
io_->setstate (std::ios::failbit);
return 0;
}
};
void
test02()
{
bool test = true;
buf b(0);
std::ostream strm(&b);
buf tb(&strm);
std::ostream tied(&tb);
strm.tie(&tied);
std::ostream::sentry s(strm);
VERIFY( !s );
}
int main() int main()
{ {
test01(); test01();
test02();
return 0; return 0;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment