]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[multiple changes]
authorBenjamin Kosnik <bkoz@gcc.gnu.org>
Thu, 15 Aug 2002 22:25:10 +0000 (22:25 +0000)
committerBenjamin Kosnik <bkoz@gcc.gnu.org>
Thu, 15 Aug 2002 22:25:10 +0000 (22:25 +0000)
2002-08-15  Danny Smith  <dannysmith@users.sourceforge.net>
            Benjamin Kosnik  <bkoz@redhat.com>

* include/bits/istream.tcc (basic_istream::ignore): Use sbumpc,
not snextc.
* testsuite/27_io/narrow_stream_objects.cc (test10): Add.

2002-08-15  Danny Smith  <dannysmith@users.sourceforge.net>

* config/os/newlib/ctype_inline.h (is): Don't offset _M_table.
(scan_is): Use this->is.
(scan_not): Likewise.

2002-08-15  Rick Danos  <rdanos@hotmail.com>

PR libstdc++/7461
* config/os/newlib/ctype_noninline.h (classic_table): Add offset.
* config/os/newlib/ctype_inline.h (is): Use static_cast.

From-SVN: r56364

libstdc++-v3/ChangeLog
libstdc++-v3/config/os/newlib/bits/ctype_inline.h
libstdc++-v3/config/os/newlib/bits/ctype_noninline.h
libstdc++-v3/include/bits/istream.tcc
libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc

index 375b54e8a9d72c4ed8940ce26516b209e6cc5c90..a4414c30d17b4b82380cac61c8c1a8901378bae9 100644 (file)
@@ -1,3 +1,22 @@
+2002-08-15  Danny Smith  <dannysmith@users.sourceforge.net>
+            Benjamin Kosnik  <bkoz@redhat.com>
+       
+       * include/bits/istream.tcc (basic_istream::ignore): Use sbumpc,
+       not snextc.
+       * testsuite/27_io/narrow_stream_objects.cc (test10): Add.
+
+2002-08-15  Danny Smith  <dannysmith@users.sourceforge.net>
+
+       * config/os/newlib/ctype_inline.h (is): Don't offset _M_table.
+       (scan_is): Use this->is.
+       (scan_not): Likewise.
+       
+2002-08-15  Rick Danos  <rdanos@hotmail.com>
+
+       PR libstdc++/7461
+       * config/os/newlib/ctype_noninline.h (classic_table): Add offset.
+       * config/os/newlib/ctype_inline.h (is): Use static_cast.
+
 2002-08-14  Release Manager
 
        * GCC 3.2 Released.
index cddffedaa4447ed3d635ef88327d03cb91548020..8381aced9cd3399bd19d034ab442ff73d71f4490 100644 (file)
@@ -1,6 +1,6 @@
 // Locale support -*- C++ -*-
 
-// Copyright (C) 2000 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
   bool
   ctype<char>::
   is(mask __m, char __c) const
-  { return (_M_table + 1)[(unsigned char)(__c)] & __m; }
+  { return _M_table[static_cast<unsigned char>(__c)] & __m; }
 
   const char*
   ctype<char>::
   is(const char* __low, const char* __high, mask* __vec) const
   {
     while (__low < __high)
-      *__vec++ = (_M_table + 1)[(unsigned char) (*__low++)];
+      *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
     return __high;
   }
 
@@ -52,7 +52,7 @@
   ctype<char>::
   scan_is(mask __m, const char* __low, const char* __high) const 
   {
-    while (__low < __high && !((_M_table + 1)[(unsigned char)(*__low)] & __m))
+    while (__low < __high && !this->is(__m, *__low))
       ++__low;
     return __low;
   }
   ctype<char>::
   scan_not(mask __m, const char* __low, const char* __high) const
   {
-    while (__low < __high 
-          && ((_M_table + 1)[(unsigned char)(*__low)] & __m) != 0)
+    while (__low < __high && this->is(__m, *__low) != 0)
       ++__low;
     return __low;
   }
-
-
-
-
-
index 7cb1ece512e03f4eb563c8d5570f157225b584cb..b511c4a86aa75b77762e8aebb5ba21a2b1816535 100644 (file)
@@ -35,7 +35,7 @@
   
   const ctype_base::mask*
   ctype<char>::classic_table() throw()
-  { return _ctype_; }
+  { return _ctype_ + 1; }
 
   ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
                     size_t __refs) 
index 798fd332b90620aa0f1c65c2857f04e20f212c5d..58e2caf02cdfcbd61dbeb0a02617f7824fc95d47 100644 (file)
@@ -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<streamsize>::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)
            {
index f767b7248713a6f0016c62d78d69034855b05549..0ee1fce5bfa6b3fa9ebc50b26513325cb0cf3182 100644 (file)
@@ -66,7 +66,8 @@
 #include <cstdlib>
 #include <cstring>
 #include <ctime>
-#include <testsuite_hooks.h>
+//#include <testsuite_hooks.h>
+#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" <<std::endl;
+  std::cout << "hello" << ' ' << "world" << std::endl;
   std::cout << "Enter your name: ";
   std::string s;
   std::cin >> 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;
 }