2002-10-31 Benjamin Kosnik <bkoz@redhat.com>
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 1 Nov 2002 05:38:27 +0000 (05:38 +0000)
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 1 Nov 2002 05:38:27 +0000 (05:38 +0000)
PR libstdc++/8348
* include/bits/istream.tcc (istream::tellg): Remove sentry bits.
(istream::seekg): Same.
* testsuite/27_io/istream_seeks.cc (test06): New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@58703 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/istream.tcc
libstdc++-v3/testsuite/27_io/istream_seeks.cc

index 55b79be..3a2ee83 100644 (file)
@@ -1,3 +1,10 @@
+2002-10-31  Benjamin Kosnik  <bkoz@redhat.com>
+
+       PR libstdc++/8348
+       * include/bits/istream.tcc (istream::tellg): Remove sentry bits.
+       (istream::seekg): Same.
+       * testsuite/27_io/istream_seeks.cc (test06): New.
+       
 2002-10-28  Jason Thorpe  <thorpej@wasabisystems.com>
 
        * testsuite/thread/pthread5.cc: Include <unistd.h>
index 58e2caf..617110d 100644 (file)
@@ -935,23 +935,8 @@ namespace std
     tellg(void)
     {
       pos_type __ret = pos_type(-1);
-      _M_gcount = 0;
-      sentry __cerb(*this, true);
-      if (__cerb) 
-       {
-         try 
-           {
-            __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::in);
-           }
-         catch(exception& __fail)
-           {
-             // 27.6.1.3 paragraph 1
-             // Turn this on without causing an ios::failure to be thrown.
-             this->setstate(ios_base::badbit);
-             if ((this->exceptions() & ios_base::badbit) != 0)
-               __throw_exception_again;
-           }
-       }
+      if (!this->fail())
+       __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::in);
       return __ret;
     }
 
@@ -962,28 +947,16 @@ namespace std
     seekg(pos_type __pos)
     {
       _M_gcount = 0;
-      sentry __cerb(*this, true);
-      if (__cerb) 
+      if (!this->fail())
        {
-         try 
-           {
 #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
 // 136.  seekp, seekg setting wrong streams?
-             pos_type __err = this->rdbuf()->pubseekpos(__pos, ios_base::in);
+         pos_type __err = this->rdbuf()->pubseekpos(__pos, ios_base::in);
 
 // 129. Need error indication from seekp() and seekg()
-             if (__err == pos_type(off_type(-1)))
-               this->setstate(ios_base::failbit);
+         if (__err == pos_type(off_type(-1)))
+           this->setstate(ios_base::failbit);
 #endif
-           }
-         catch(exception& __fail)
-           {
-             // 27.6.1.3 paragraph 1
-             // Turn this on without causing an ios::failure to be thrown.
-             this->setstate(ios_base::badbit);
-             if ((this->exceptions() & ios_base::badbit) != 0)
-               __throw_exception_again;
-           }
        }
       return *this;
     }
@@ -994,29 +967,17 @@ namespace std
     seekg(off_type __off, ios_base::seekdir __dir)
     {
       _M_gcount = 0;
-      sentry __cerb(*this, true);
-      if (__cerb) 
+      if (!this->fail())
        {
-         try 
-           {
 #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
 // 136.  seekp, seekg setting wrong streams?
-             pos_type __err = this->rdbuf()->pubseekoff(__off, __dir, 
-                                                        ios_base::in);
+         pos_type __err = this->rdbuf()->pubseekoff(__off, __dir, 
+                                                    ios_base::in);
 
 // 129. Need error indication from seekp() and seekg()
-             if (__err == pos_type(off_type(-1)))
-               this->setstate(ios_base::failbit);
+         if (__err == pos_type(off_type(-1)))
+           this->setstate(ios_base::failbit);
 #endif
-           }
-         catch(exception& __fail)
-           {
-             // 27.6.1.3 paragraph 1
-             // Turn this on without causing an ios::failure to be thrown.
-             this->setstate(ios_base::badbit);
-             if ((this->exceptions() & ios_base::badbit) != 0)
-               __throw_exception_again;
-           }
        }
       return *this;
     }
index cd0e065..892e10b 100644 (file)
@@ -55,11 +55,6 @@ bool test01()
   p4 = ifs2.tellg();
 
   VERIFY( p3 == p4 );
-
-#ifdef DEBUG_ASSERT
-  assert(test);
-#endif
-
   return test;
 }
 
@@ -237,10 +232,6 @@ void test04(void)
   if01.peek();
   pos02 = if01.tellg();
   VERIFY( pos02 == pos01 );
-
-#ifdef DEBUG_ASSERT
-  assert(test);
-#endif
 }
 
 // stringstreams
@@ -351,10 +342,50 @@ void test05(void)
   VERIFY( state01 == state02 );
   pos06 = is03.tellg(); 
   VERIFY( pos05 == pos06 ); 
+}
 
-#ifdef DEBUG_ASSERT
-  assert(test);
-#endif
+// libstdc++/8348
+void test06(void)
+{
+  using namespace std;
+  bool test = true;
+  string num1("555");
+
+  // tellg
+  {
+    istringstream iss(num1);
+    istream::pos_type pos1 = iss.tellg();
+    int asNum = 0;
+    iss >> asNum;
+    VERIFY( test = iss.eof() );
+    VERIFY( test = !iss.fail() );
+    iss.tellg();
+    VERIFY( test = !iss.fail() );
+  }
+
+  // seekg
+  {
+    istringstream iss(num1);
+    istream::pos_type pos1 = iss.tellg();
+    int asNum = 0;
+    iss >> asNum;
+    VERIFY( test = iss.eof() );
+    VERIFY( test = !iss.fail() );
+    iss.seekg(0, ios_base::beg);
+    VERIFY( test = !iss.fail() );
+  }
+
+  // seekg
+  {
+    istringstream iss(num1);
+    istream::pos_type pos1 = iss.tellg();
+    int asNum = 0;
+    iss >> asNum;
+    VERIFY( test = iss.eof() );
+    VERIFY( test = !iss.fail() );
+    iss.seekg(pos1);
+    VERIFY( test = !iss.fail() );
+  }
 }
 
 int main()
@@ -366,6 +397,8 @@ int main()
 
   test04();
   test05();
+
+  test06();
   return 0;
 }