From bf6f276b01d364d1fe300732d39a56f4a6f4ee34 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Wed, 15 May 2002 12:27:29 +0200 Subject: [PATCH] re PR libstdc++/6648 (Problems with cin.getline (interactive)) 2002-05-15 Paolo Carlini PR libstdc++/6648 * include/bits/istream.tcc (istream::getline, ignore): Upon __idelim (__delim) call sbumpc() not snextc(). * testsuite/27_io/narrow_stream_objects.cc: Add test08 and test09. From-SVN: r53481 --- libstdc++-v3/ChangeLog | 8 ++++++++ libstdc++-v3/include/bits/istream.tcc | 4 ++-- .../testsuite/27_io/narrow_stream_objects.cc | 19 +++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 52007d5fdc3..d6fc09814d2 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2002-05-15 Paolo Carlini + + PR libstdc++/6648 + * include/bits/istream.tcc (istream::getline, ignore): + Upon __idelim (__delim) call sbumpc() not snextc(). + * testsuite/27_io/narrow_stream_objects.cc: + Add test08 and test09. + 2002-05-13 Benjamin Kosnik * testsuite/22_locale/ctype_scan_char.cc: Tweak. diff --git a/libstdc++-v3/include/bits/istream.tcc b/libstdc++-v3/include/bits/istream.tcc index 636a7386359..f7f8d697789 100644 --- a/libstdc++-v3/include/bits/istream.tcc +++ b/libstdc++-v3/include/bits/istream.tcc @@ -679,7 +679,7 @@ namespace std { if (__c == __idelim) { - __sb->snextc(); + __sb->sbumpc(); ++_M_gcount; } else @@ -726,7 +726,7 @@ namespace std this->setstate(ios_base::eofbit); else if (__c == __delim) { - __sb->snextc(); + __sb->sbumpc(); ++_M_gcount; } } diff --git a/libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc b/libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc index 016a982c8ef..f767b724871 100644 --- a/libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc +++ b/libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc @@ -175,6 +175,23 @@ void test07() VERIFY( s == "test" ); } +// libstdc++/6648 +// Interactive tests: each one (run alone) must terminate upon a single '\n'. +void test08() +{ + bool test = true; + char buff[2048]; + std::cout << "Enter name: "; + std::cin.getline(buff, 2048); +} + +void test09() +{ + bool test = true; + std::cout << "Enter name: "; + std::cin.ignore(2048, '\n'); +} + int main() { @@ -186,5 +203,7 @@ main() // test05(); // test06(); // test07(); + // test08(); + // test09(); return 0; }