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
This commit is contained in:
parent
55ae46b15f
commit
ff5d863fc2
3 changed files with 51 additions and 4 deletions
|
@ -1,3 +1,10 @@
|
|||
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>
|
||||
|
||||
* include/Makefile.am (stamp-std-precompile): Add rule.
|
||||
|
|
|
@ -41,11 +41,19 @@ namespace std
|
|||
template<typename _CharT, typename _Traits>
|
||||
basic_ostream<_CharT, _Traits>::sentry::
|
||||
sentry(basic_ostream<_CharT,_Traits>& __os)
|
||||
: _M_ok(__os.good()), _M_os(__os)
|
||||
: _M_os(__os)
|
||||
{
|
||||
// XXX MT
|
||||
if (_M_ok && __os.tie())
|
||||
__os.tie()->flush();
|
||||
// XXX MT
|
||||
if (__os.good() && __os.tie())
|
||||
__os.tie()->flush();
|
||||
|
||||
if (__os.good())
|
||||
_M_ok = true;
|
||||
else
|
||||
{
|
||||
_M_ok = false;
|
||||
__os.setstate(ios_base::failbit);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename _CharT, typename _Traits>
|
||||
|
|
|
@ -46,8 +46,40 @@ test01()
|
|||
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()
|
||||
{
|
||||
test01();
|
||||
test02();
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue