diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index bb81cae1558..5d19ef5a039 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2002-08-08 Danny Smith + Benjamin Kosnik + + * include/bits/istream.tcc (basic_istream::ignore): Use sbumpc, + not snextc. + * testsuite/27_io/narrow_stream_objects.cc (test10): Add. + 2002-08-07 John David Anglin * libsupc++/Makefile.am (LTCOMPILE): Add LIBSUPCXX_PICFLAGS. diff --git a/libstdc++-v3/include/bits/istream.tcc b/libstdc++-v3/include/bits/istream.tcc index 798fd332b90..58e2caf02cd 100644 --- a/libstdc++-v3/include/bits/istream.tcc +++ b/libstdc++-v3/include/bits/istream.tcc @@ -722,23 +722,18 @@ namespace std { const int_type __eof = traits_type::eof(); __streambuf_type* __sb = this->rdbuf(); - int_type __c = __sb->sgetc(); + int_type __c; __n = min(__n, numeric_limits::max()); while (_M_gcount < __n - && !traits_type::eq_int_type(__c, __eof) - && !traits_type::eq_int_type(__c, __delim)) + && !traits_type::eq_int_type(__c = __sb->sbumpc(), __eof)) { - __c = __sb->snextc(); ++_M_gcount; + if (traits_type::eq_int_type(__c, __delim)) + break; } if (traits_type::eq_int_type(__c, __eof)) this->setstate(ios_base::eofbit); - else if (traits_type::eq_int_type(__c, __delim)) - { - __sb->sbumpc(); - ++_M_gcount; - } } catch(exception& __fail) { diff --git a/libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc b/libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc index f767b724871..0ee1fce5bfa 100644 --- a/libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc +++ b/libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc @@ -66,7 +66,8 @@ #include #include #include -#include +//#include +#define VERIFY(x) x // Include iostream last, just to make is as difficult as possible to // properly initialize the standard iostream objects. @@ -116,19 +117,20 @@ void test03() // Interactive test, to be exercised as follows: // assign stderr to stdout in shell command line, // pipe stdout to cat process and/or redirect stdout to file. -// "hello fine world\n" should be written to stdout in proper order. -// This is a version of the scott snyder test taken from: -// http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00108.html +// a.out >& output +// "hello fine world\n" should be written to stdout, and output, in +// proper order. This is a version of the scott snyder test taken +// from: http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00108.html void test04() { using namespace std; cout << "hello "; - cout.flush (); + cout.flush(); cerr << "fine "; - cerr.flush (); + cerr.flush(); cout << "world" << endl; - cout.flush (); + cout.flush(); } // Interactive test, to be exercised as follows: @@ -138,7 +140,7 @@ void test04() // depending upon buffering mode enforced. void test05() { - std::cout << "hello" << ' ' << "world" <> s; @@ -169,7 +171,7 @@ void test06() void test07() { bool test = true; - std::cout << "Please, enter 'test':"; + std::cout << "Enter 'test':"; std::string s; std::getline(std::cin, s, '\n'); VERIFY( s == "test" ); @@ -188,10 +190,21 @@ void test08() void test09() { bool test = true; - std::cout << "Enter name: "; + std::cout << "Enter favorite beach: "; std::cin.ignore(2048, '\n'); } +// http://gcc.gnu.org/ml/libstdc++/2002-08/msg00060.html +// Should only have to hit enter once. +void +test10() +{ + using namespace std; + cout << "Press ENTER once\n"; + cin.ignore(1); + cout << "_M_gcount: "<< cin.gcount() << endl; +} + int main() { @@ -205,5 +218,6 @@ main() // test07(); // test08(); // test09(); + // test10(); return 0; }