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
3 changed files with 45 additions and 2 deletions
|
@ -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>
|
2003-02-24 Paolo Carlini <pcarlini@unitus.it>
|
||||||
Nathan Myers <ncm@cantrip.org>
|
Nathan Myers <ncm@cantrip.org>
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,12 @@ namespace std
|
||||||
{
|
{
|
||||||
_M_pback_destroy();
|
_M_pback_destroy();
|
||||||
if (_M_in_cur < _M_in_end)
|
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.
|
// Sync internal and external buffers.
|
||||||
|
@ -128,7 +133,12 @@ namespace std
|
||||||
{
|
{
|
||||||
_M_pback_destroy();
|
_M_pback_destroy();
|
||||||
if (_M_in_cur < _M_in_end)
|
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.
|
// 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_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_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_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
|
class derived_filebuf: public std::filebuf
|
||||||
{
|
{
|
||||||
|
@ -681,6 +682,28 @@ void test11()
|
||||||
dfbuf_02.close();
|
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()
|
main()
|
||||||
{
|
{
|
||||||
test01();
|
test01();
|
||||||
|
@ -696,5 +719,6 @@ main()
|
||||||
test09();
|
test09();
|
||||||
test10();
|
test10();
|
||||||
test11();
|
test11();
|
||||||
|
test12();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue