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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@63378
138bc75d-0d04-0410-961f-
82ee72b054a4
+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>
{
_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.
{
_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.
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
{
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();
test09();
test10();
test11();
+ test12();
return 0;
}