re PR libstdc++/9825 (filebuf::sputbackc breaks sbumpc)
2003-02-24 Paolo Carlini <pcarlini@unitus.it> PR libstdc++/9825 * src/fstream.cc (basic_filebuf<char/wchar_t>::_M_underflow_common): When __bump is true (uflow), always increment the read pointer (_M_in_cur) before returning successfully. * testsuite/27_io/filebuf_virtuals.cc (test12): Add. From-SVN: r63378
This commit is contained in:
parent
2bac97f7e7
commit
57df94c8f6
@ -1,3 +1,12 @@
|
||||
2003-02-24 Paolo Carlini <pcarlini@unitus.it>
|
||||
|
||||
PR libstdc++/9825
|
||||
* src/fstream.cc
|
||||
(basic_filebuf<char/wchar_t>::_M_underflow_common): When
|
||||
__bump is true (uflow), always increment the read pointer
|
||||
(_M_in_cur) before returning successfully.
|
||||
* testsuite/27_io/filebuf_virtuals.cc (test12): Add.
|
||||
|
||||
2003-02-24 Paolo Carlini <pcarlini@unitus.it>
|
||||
Nathan Myers <ncm@cantrip.org>
|
||||
|
||||
|
@ -53,7 +53,12 @@ namespace std
|
||||
{
|
||||
_M_pback_destroy();
|
||||
if (_M_in_cur < _M_in_end)
|
||||
return traits_type::to_int_type(*_M_in_cur);
|
||||
{
|
||||
__ret = traits_type::to_int_type(*_M_in_cur);
|
||||
if (__bump)
|
||||
_M_in_cur_move(1);
|
||||
return __ret;
|
||||
}
|
||||
}
|
||||
|
||||
// Sync internal and external buffers.
|
||||
@ -128,7 +133,12 @@ namespace std
|
||||
{
|
||||
_M_pback_destroy();
|
||||
if (_M_in_cur < _M_in_end)
|
||||
return traits_type::to_int_type(*_M_in_cur);
|
||||
{
|
||||
__ret = traits_type::to_int_type(*_M_in_cur);
|
||||
if (__bump)
|
||||
_M_in_cur_move(1);
|
||||
return __ret;
|
||||
}
|
||||
}
|
||||
|
||||
// Sync internal and external buffers.
|
||||
|
@ -73,6 +73,7 @@ const char name_02[] = "filebuf_virtuals-2.txt"; // empty file, need to create
|
||||
const char name_03[] = "filebuf_virtuals-3.txt"; // empty file, need to create
|
||||
const char name_04[] = "filebuf_virtuals-4.txt"; // empty file, need to create
|
||||
const char name_05[] = "filebuf_virtuals-5.txt"; // empty file, need to create
|
||||
const char name_06[] = "filebuf_virtuals-6.txt"; // empty file, need to create
|
||||
|
||||
class derived_filebuf: public std::filebuf
|
||||
{
|
||||
@ -681,6 +682,28 @@ void test11()
|
||||
dfbuf_02.close();
|
||||
}
|
||||
|
||||
// libstdc++/9825
|
||||
void test12()
|
||||
{
|
||||
using namespace std;
|
||||
bool test = true;
|
||||
|
||||
filebuf fbuf;
|
||||
|
||||
fbuf.open(name_06, ios_base::in|ios_base::out|ios_base::trunc);
|
||||
fbuf.sputn("crazy bees!", 11);
|
||||
fbuf.pubseekoff(0, ios_base::beg);
|
||||
fbuf.sbumpc();
|
||||
fbuf.sputbackc('x');
|
||||
filebuf::int_type c = fbuf.sbumpc();
|
||||
VERIFY( c == 'x' );
|
||||
c = fbuf.sbumpc();
|
||||
VERIFY( c == 'r' );
|
||||
c = fbuf.sbumpc();
|
||||
VERIFY( c == 'a' );
|
||||
fbuf.close();
|
||||
}
|
||||
|
||||
main()
|
||||
{
|
||||
test01();
|
||||
@ -696,5 +719,6 @@ main()
|
||||
test09();
|
||||
test10();
|
||||
test11();
|
||||
test12();
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user