This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Patch] Tweak unbuffered overflow, provide unbuffered seek testcases


Hi,

you will find attached the seekoff/pos testcases split into
buffered/unbuffered (and very slightly enlarged).

Unfortunately seekpos testing revealed that unbuffered
overflow has to be slightly more complicated than we hoped, as
this excerpt from seekpos/char/4-io.cc shows:

   c1 = fb_03.snextc();         //current in pointer +1
   VERIFY( c1 == 't' );
   c2 = fb_03.sputc('\n');      //test current out pointer

Before actually doing unbuffered sputc (overflow, that is), we
must rewind -1, since the last underflow (upon snextc) led to
a file descriptor one position after 't'. Note that the
same rewind action is needed in the buffered case.

A minor nit: a new unbuffered sputbackc of a couple of days ago
(which I erroneously tweaked from the buffered version) had to
be also patched to the correct version.

Tested x86-linux.

Ok with everyone?

Paolo.

P.S. I have not even attempted a major rewrote of overflow trying to
unify the buffered and unbuffered cases: this way I don't risk to
broke the much more important buffered case ;) Perhaps later...

//////////
2003-06-11  Paolo Carlini  <pcarlini@unitus.it>

	* include/bits/fstream.tcc (overflow): In the unbuffered case,
	still need to seek back in case an underflow last occurred and
	finally call _M_set_buffer(0) to clean the invalidated get area.
	* testsuite/27_io/basic_filebuf/seekoff/char/1.cc: Split into...
	* testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc: New.
	* testsuite/27_io/basic_filebuf/seekoff/char/4-io.cc: New.
	* testsuite/27_io/basic_filebuf/seekpos/char/1.cc: Split into...
	* testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc: New.
	* testsuite/27_io/basic_filebuf/seekpos/char/4-io.cc: New.
	* testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc: Tweak.
	* testsuite/data/seekoff-1.txt: New.
	* testsuite/data/seekoff-2.txt: New.
	* testsuite/data/seekpos-1.txt: New.
	* testsuite/data/seekpos-2.txt: New.
diff -prN libstdc++-v3-orig/include/bits/fstream.tcc libstdc++-v3/include/bits/fstream.tcc
*** libstdc++-v3-orig/include/bits/fstream.tcc	Tue Jun 10 22:40:19 2003
--- libstdc++-v3/include/bits/fstream.tcc	Wed Jun 11 18:21:40 2003
*************** namespace std
*** 346,354 ****
  	  else
  	    {
  	      // Unbuffered.
! 	      char_type __conv = traits_type::to_char_type(__c);
! 	      if (__testeof || _M_convert_to_external(&__conv, 1))
  		__ret = traits_type::not_eof(__c);
  	    }
  	}
        _M_last_overflowed = true;	
--- 346,364 ----
  	  else
  	    {
  	      // Unbuffered.
! 	      if (__testeof)
  		__ret = traits_type::not_eof(__c);
+ 	      else
+ 		{
+ 		  if (_M_filepos != this->_M_in_beg)
+ 		    _M_file.seekoff(this->_M_in_beg - _M_filepos, ios_base::cur);
+ 		  char_type __conv = traits_type::to_char_type(__c);
+ 		  if (_M_convert_to_external(&__conv, 1))
+ 		    {
+ 		      _M_set_buffer(0);
+ 		      __ret = __c;
+ 		    }
+ 		}
  	    }
  	}
        _M_last_overflowed = true;	
diff -prN libstdc++-v3-orig/testsuite/27_io/basic_filebuf/seekoff/char/1.cc libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1.cc
*** libstdc++-v3-orig/testsuite/27_io/basic_filebuf/seekoff/char/1.cc	Sat Apr 12 21:21:34 2003
--- libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1.cc	Thu Jan  1 01:00:00 1970
***************
*** 1,137 ****
- // 2001-05-21 Benjamin Kosnik  <bkoz@redhat.com>
- 
- // Copyright (C) 2001, 2002, 2003 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
- // terms of the GNU General Public License as published by the
- // Free Software Foundation; either version 2, or (at your option)
- // any later version.
- 
- // This library is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- // GNU General Public License for more details.
- 
- // You should have received a copy of the GNU General Public License along
- // with this library; see the file COPYING.  If not, write to the Free
- // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- // USA.
- 
- // 27.8.1.4 Overridden virtual functions
- 
- #include <fstream>
- #include <testsuite_hooks.h>
- 
- // @require@ %-*.tst %-*.txt
- // @diff@ %-*.tst %*.txt
- 
- // NB: This test assumes that _M_buf_size == 40, and not the usual
- // buffer_size length of BUFSIZ (8192), so that overflow/underflow can be
- // simulated a bit more readily.
- // NRB (Nota Really Bene): setting it to 40 breaks the test, as intended.
- const int buffer_size = 8192;
- //const int buffer_size = 40;
- 
- const char name_01[] = "filebuf_virtuals-1.txt"; // empty file, need to create
- 
- class derived_filebuf: public std::filebuf
- {
-  public:
-   void
-   set_size(int_type __size) { _M_buf_size = __size; }
- };
- 
- derived_filebuf fb_03; // in | out
- 
- // Initialize filebufs to be the same size regardless of platform.
- void test03()
- {
-   fb_03.set_size(buffer_size);
- }
- 
- // Test overloaded virtual functions.
- void test05() 
- {
-   using namespace std;
-   typedef filebuf::int_type 	int_type;
-   typedef filebuf::traits_type 	traits_type;
-   typedef filebuf::pos_type 	pos_type;
-   typedef filebuf::off_type 	off_type;
-   typedef size_t 			size_type;
- 
-   bool 					test = true;
-   filebuf 				f_tmp;
-   streamsize 			strmsz_1, strmsz_2;
-   streamoff  			strmof_1, strmof_2;
-   int 					i = 0, j = 0, k = 0;
- 
-   fb_03.open(name_01, ios_base::out | ios_base::in);
- 
-   int_type c1;
-   int_type c2;
-   int_type c3;
- 
-   // seekoff
-   // pubseekoff(off_type off, ios_base::seekdir way, ios_base::openmode which)
-   // alters the stream position to off
-   pos_type pt_1(off_type(-1));
-   pos_type pt_2(off_type(0));
-   off_type off_1 = 0;
-   off_type off_2 = 0;
- 
-   //IN|OUT
-   // 27filebuf-3.txt = bd23456789:;<=>?...
-   //beg
-   strmsz_1 = fb_03.in_avail(); 
-   pt_1 = fb_03.pubseekoff(2, ios_base::beg);
-   strmsz_2 = fb_03.in_avail(); 
-   off_1 = pt_1;
-   VERIFY( off_1 > 0 );
-   c1 = fb_03.snextc(); //current in pointer +1
-   VERIFY( c1 == '9' );
-   c2 = fb_03.sputc('\n');  //current in pointer +1
-   c3 = fb_03.sgetc();
-   VERIFY( c2 != c3 ); 
-   VERIFY( c3 == '9' );
-   fb_03.pubsync(); 
-   c1 = fb_03.sgetc();
-   VERIFY( c1 == c3 );
-   //cur
-   // 27filebuf-3.txt = bd2\n456789:;<=>?...
-   pt_2 = fb_03.pubseekoff(2, ios_base::cur);
-   off_2 = pt_2;
-   VERIFY( (off_2 == (off_1 + 2 + 1 + 1)) );
-   c1 = fb_03.snextc(); //current in pointer +1
-   VERIFY( c1 == '1' );
-   c2 = fb_03.sputc('x');  //test current out pointer
-   c3 = fb_03.sputc('\n');
-   c1 = fb_03.sgetc();
-   fb_03.pubsync(); 
-   c3 = fb_03.sgetc();
-   VERIFY( c1 == c3 );
-   //end
-   // 27filebuf-3.txt = "bd2\n456x\n9" 
-   pt_2 = fb_03.pubseekoff(0, ios_base::end, ios_base::in|ios_base::out);
-   off_1 = pt_2;
-   VERIFY( off_1 > off_2 ); //weak, but don't know exactly where it ends
-   c3 = fb_03.sputc('\n');
-   strmsz_1 = fb_03.sputn("because because because. . .", 28);  
-   VERIFY( strmsz_1 == 28 );
-   c1 = fb_03.sungetc();
-   // Defect?  retval of sungetc is not necessarily the character ungotten.
-   // So re-get it.
-   c1 = fb_03.sgetc();
-   fb_03.pubsync(); 
-   c3 = fb_03.sgetc();
-   VERIFY( c1 == c3 );
-   // IN
-   // OUT
- }
- 
- main() 
- {
-   test03();
-   test05();
-   return 0;
- }
--- 0 ----
diff -prN libstdc++-v3-orig/testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc
*** libstdc++-v3-orig/testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc	Thu Jan  1 01:00:00 1970
--- libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc	Wed Jun 11 23:00:15 2003
***************
*** 0 ****
--- 1,119 ----
+ // 2001-05-21 Benjamin Kosnik  <bkoz@redhat.com>
+ 
+ // Copyright (C) 2001, 2002, 2003 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
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 2, or (at your option)
+ // any later version.
+ 
+ // This library is distributed in the hope that it will be useful,
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ // GNU General Public License for more details.
+ 
+ // You should have received a copy of the GNU General Public License along
+ // with this library; see the file COPYING.  If not, write to the Free
+ // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ // USA.
+ 
+ // 27.8.1.4 Overridden virtual functions
+ 
+ #include <fstream>
+ #include <testsuite_hooks.h>
+ #include <testsuite_io.h>
+ 
+ // @require@ %-*.tst %-*.txt
+ // @diff@ %-*.tst %*.txt
+ 
+ const char name_01[] = "seekoff-1.txt";
+ 
+ void test05() 
+ {
+   using namespace std;
+   using namespace __gnu_cxx_test;
+ 
+   typedef filebuf::int_type 	int_type;
+   typedef filebuf::pos_type 	pos_type;
+   typedef filebuf::off_type 	off_type;
+ 
+   bool 				test = true;
+   streamsize 			strmsz_1, strmsz_2;
+   streamoff  			strmof_1, strmof_2;
+ 
+   int_type c1;
+   int_type c2;
+   int_type c3;
+ 
+   pos_type pt_1(off_type(-1));
+   pos_type pt_2(off_type(0));
+   off_type off_1 = 0;
+   off_type off_2 = 0;
+ 
+   // seekoff
+   // pubseekoff(off_type off, ios_base::seekdir way, ios_base::openmode which)
+   // alters the stream position to off
+ 
+   // in | out
+   {
+     constraint_filebuf fb_03;
+     fb_03.open(name_01, ios_base::out | ios_base::in);
+     VERIFY( fb_03.write_position() );
+     VERIFY( !fb_03.read_position() );
+     // 27filebuf-3.txt = bd23456789:;<=>?...
+     //beg
+     strmsz_1 = fb_03.in_avail(); 
+     pt_1 = fb_03.pubseekoff(2, ios_base::beg);
+     strmsz_2 = fb_03.in_avail(); 
+     off_1 = pt_1;
+     VERIFY( off_1 > 0 );
+     c1 = fb_03.snextc(); //current in pointer +1
+     VERIFY( c1 == '9' );
+     c2 = fb_03.sputc('\n');  //current in pointer +1
+     c3 = fb_03.sgetc();
+     VERIFY( c2 != c3 ); 
+     VERIFY( c3 == '9' );
+     fb_03.pubsync(); 
+     c1 = fb_03.sgetc();
+     VERIFY( c1 == c3 );
+     //cur
+     // 27filebuf-3.txt = bd2\n456789:;<=>?...
+     pt_2 = fb_03.pubseekoff(2, ios_base::cur);
+     off_2 = pt_2;
+     VERIFY( (off_2 == (off_1 + 2 + 1 + 1)) );
+     c1 = fb_03.snextc(); //current in pointer +1
+     VERIFY( c1 == '1' );
+     c2 = fb_03.sputc('x');  //test current out pointer
+     c3 = fb_03.sgetc();
+     VERIFY( c3 == '7' );
+     c3 = fb_03.sputc('\n');
+     c1 = fb_03.sgetc();
+     fb_03.pubsync(); 
+     c3 = fb_03.sgetc();
+     VERIFY( c1 == c3 );
+     //end
+     // 27filebuf-3.txt = "bd2\n456x\n9" 
+     pt_2 = fb_03.pubseekoff(0, ios_base::end, ios_base::in|ios_base::out);
+     off_1 = pt_2;
+     VERIFY( off_1 > off_2 ); //weak, but don't know exactly where it ends
+     c3 = fb_03.sputc('\n');
+     strmsz_1 = fb_03.sputn("because because because. . .", 28);  
+     VERIFY( strmsz_1 == 28 );
+     c1 = fb_03.sungetc();
+     // Defect?  retval of sungetc is not necessarily the character ungotten.
+     // So re-get it.
+     c1 = fb_03.sgetc();
+     fb_03.pubsync(); 
+     c3 = fb_03.sgetc();
+     VERIFY( c1 == c3 );
+     VERIFY( fb_03.write_position() );
+     VERIFY( fb_03.read_position() );
+   }
+ }
+ 
+ main() 
+ {
+   test05();
+   return 0;
+ }
diff -prN libstdc++-v3-orig/testsuite/27_io/basic_filebuf/seekoff/char/4-io.cc libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/4-io.cc
*** libstdc++-v3-orig/testsuite/27_io/basic_filebuf/seekoff/char/4-io.cc	Thu Jan  1 01:00:00 1970
--- libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/4-io.cc	Wed Jun 11 23:00:49 2003
***************
*** 0 ****
--- 1,118 ----
+ // 2001-05-21 Benjamin Kosnik  <bkoz@redhat.com>
+ 
+ // Copyright (C) 2001, 2002, 2003 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
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 2, or (at your option)
+ // any later version.
+ 
+ // This library is distributed in the hope that it will be useful,
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ // GNU General Public License for more details.
+ 
+ // You should have received a copy of the GNU General Public License along
+ // with this library; see the file COPYING.  If not, write to the Free
+ // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ // USA.
+ 
+ // 27.8.1.4 Overridden virtual functions
+ 
+ #include <fstream>
+ #include <testsuite_hooks.h>
+ #include <testsuite_io.h>
+ 
+ // @require@ %-*.tst %-*.txt
+ // @diff@ %-*.tst %*.txt
+ 
+ const char name_01[] = "seekoff-2.txt";
+ 
+ void test05() 
+ {
+   using namespace std;
+   using namespace __gnu_cxx_test;
+ 
+   typedef filebuf::int_type 	int_type;
+   typedef filebuf::pos_type 	pos_type;
+   typedef filebuf::off_type 	off_type;
+ 
+   bool				test = true;
+   streamsize 			strmsz_1, strmsz_2;
+   streamoff  			strmof_1, strmof_2;
+ 
+   int_type c1;
+   int_type c2;
+   int_type c3;
+ 
+   pos_type pt_1(off_type(-1));
+   pos_type pt_2(off_type(0));
+   off_type off_1 = 0;
+   off_type off_2 = 0;
+ 
+   // seekoff
+   // pubseekoff(off_type off, ios_base::seekdir way, ios_base::openmode which)
+   // alters the stream position to off
+ 
+   // in | out
+   {
+     constraint_filebuf fb_03;
+     fb_03.pubsetbuf(0, 0);
+     fb_03.open(name_01, ios_base::out | ios_base::in);
+     VERIFY( fb_03.unbuffered() );
+     // 27filebuf-3.txt = bd23456789:;<=>?...
+     //beg
+     strmsz_1 = fb_03.in_avail(); 
+     pt_1 = fb_03.pubseekoff(2, ios_base::beg);
+     strmsz_2 = fb_03.in_avail(); 
+     off_1 = pt_1;
+     VERIFY( off_1 > 0 );
+     c1 = fb_03.snextc(); //current in pointer +1
+     VERIFY( c1 == '9' );
+     c2 = fb_03.sputc('\n');  //current in pointer +1
+     c3 = fb_03.sgetc();
+     VERIFY( c2 != c3 ); 
+     VERIFY( c3 == '9' );
+     fb_03.pubsync(); 
+     c1 = fb_03.sgetc();
+     VERIFY( c1 == c3 );
+     //cur
+     // 27filebuf-3.txt = bd2\n456789:;<=>?...
+     pt_2 = fb_03.pubseekoff(2, ios_base::cur);
+     off_2 = pt_2;
+     VERIFY( (off_2 == (off_1 + 2 + 1 + 1)) );
+     c1 = fb_03.snextc(); //current in pointer +1
+     VERIFY( c1 == '1' );
+     c2 = fb_03.sputc('x');  //test current out pointer
+     c3 = fb_03.sgetc();
+     VERIFY( c3 == '7' );
+     c3 = fb_03.sputc('\n');
+     c1 = fb_03.sgetc();
+     fb_03.pubsync(); 
+     c3 = fb_03.sgetc();
+     VERIFY( c1 == c3 );
+     //end
+     // 27filebuf-3.txt = "bd2\n456x\n9" 
+     pt_2 = fb_03.pubseekoff(0, ios_base::end, ios_base::in|ios_base::out);
+     off_1 = pt_2;
+     VERIFY( off_1 > off_2 ); //weak, but don't know exactly where it ends
+     c3 = fb_03.sputc('\n');
+     strmsz_1 = fb_03.sputn("because because because. . .", 28);  
+     VERIFY( strmsz_1 == 28 );
+     c1 = fb_03.sungetc();
+     // Defect?  retval of sungetc is not necessarily the character ungotten.
+     // So re-get it.
+     c1 = fb_03.sgetc();
+     fb_03.pubsync(); 
+     c3 = fb_03.sgetc();
+     VERIFY( c1 == c3 );
+     VERIFY( fb_03.unbuffered() );
+   }
+ }
+ 
+ main() 
+ {
+   test05();
+   return 0;
+ }
diff -prN libstdc++-v3-orig/testsuite/27_io/basic_filebuf/seekpos/char/1.cc libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1.cc
*** libstdc++-v3-orig/testsuite/27_io/basic_filebuf/seekpos/char/1.cc	Sat Apr 12 21:21:35 2003
--- libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1.cc	Thu Jan  1 01:00:00 1970
***************
*** 1,127 ****
- // 2001-05-21 Benjamin Kosnik  <bkoz@redhat.com>
- 
- // Copyright (C) 2001, 2002, 2003 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
- // terms of the GNU General Public License as published by the
- // Free Software Foundation; either version 2, or (at your option)
- // any later version.
- 
- // This library is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- // GNU General Public License for more details.
- 
- // You should have received a copy of the GNU General Public License along
- // with this library; see the file COPYING.  If not, write to the Free
- // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- // USA.
- 
- // 27.8.1.4 Overridden virtual functions
- 
- #include <fstream>
- #include <testsuite_hooks.h>
- 
- // @require@ %-*.tst %-*.txt
- // @diff@ %-*.tst %*.txt
- 
- // NB: This test assumes that _M_buf_size == 40, and not the usual
- // buffer_size length of BUFSIZ (8192), so that overflow/underflow can be
- // simulated a bit more readily.
- // NRB (Nota Really Bene): setting it to 40 breaks the test, as intended.
- const int buffer_size = 8192;
- //const int buffer_size = 40;
- 
- const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
- 
- class derived_filebuf: public std::filebuf
- {
-  public:
-   void
-   set_size(int_type __size) { _M_buf_size = __size; }
- };
- 
- derived_filebuf fb_03; // in | out
- 
- // Initialize filebufs to be the same size regardless of platform.
- void test03()
- {
-   fb_03.set_size(buffer_size);
- }
- 
- // Test overloaded virtual functions.
- void test05() 
- {
-   using namespace std;
-   typedef filebuf::int_type 	int_type;
-   typedef filebuf::traits_type 	traits_type;
-   typedef filebuf::pos_type 	pos_type;
-   typedef filebuf::off_type 	off_type;
-   typedef size_t 			size_type;
- 
-   bool 					test = true;
-   filebuf 				f_tmp;
-   streamsize 			strmsz_1, strmsz_2;
-   streamoff  			strmof_1, strmof_2;
-   int 					i = 0, j = 0, k = 0;
- 
-   fb_03.open(name_01, ios_base::out | ios_base::in);
- 
-   int_type c1;
-   int_type c2;
-   int_type c3;
- 
-   // seekpos
-   // pubseekpos(pos_type sp, ios_base::openmode)
-   // alters the stream position to sp
-   pos_type pt_1(off_type(-1));
-   pos_type pt_2(off_type(0));
-   off_type off_1 = 0;
-   off_type off_2 = 0;
-   //IN|OUT
-   //beg
-   pt_1 = fb_03.pubseekoff(78, ios_base::beg);
-   off_1 = pt_1;
-   VERIFY( off_1 > 0 );
-   c1 = fb_03.snextc(); 		//current in pointer +1
-   VERIFY( c1 == 't' );
-   c2 = fb_03.sputc('\n');  	//test current out pointer
-   c3 = fb_03.sgetc();
-   fb_03.pubsync(); 		//resets pointers
-   pt_2 = fb_03.pubseekpos(pt_1);
-   off_2 = pt_2;
-   VERIFY( off_1 == off_2 );
-   c3 = fb_03.snextc(); 		//current in pointer +1
-   VERIFY( c2 == c3 );
-   pt_1 = fb_03.pubseekoff(0, ios_base::end);
-   off_1 = pt_1;
-   VERIFY( off_1 > off_2 );
-   fb_03.sputn("\nof the wonderful things he does!!\nok", 37);
-   fb_03.pubsync();
- 
-   // IN
-   // OUT
- 
-   // VIRTUALS (indirectly tested)
-   // underflow
-   // if read position avail, returns *gptr()
- 
-   // pbackfail(int_type c)
-   // put c back into input sequence
- 
-   // overflow
-   // appends c to output seq
- 
-   // NB Have to close these suckers. . .
-   // filebuf_type* close()
-   fb_03.close();
-   VERIFY( !fb_03.is_open() );
- }
- 
- main() 
- {
-   test03();
-   test05();
-   return 0;
- }
--- 0 ----
diff -prN libstdc++-v3-orig/testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc
*** libstdc++-v3-orig/testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc	Thu Jan  1 01:00:00 1970
--- libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc	Wed Jun 11 22:05:30 2003
***************
*** 0 ****
--- 1,94 ----
+ // 2001-05-21 Benjamin Kosnik  <bkoz@redhat.com>
+ 
+ // Copyright (C) 2001, 2002, 2003 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
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 2, or (at your option)
+ // any later version.
+ 
+ // This library is distributed in the hope that it will be useful,
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ // GNU General Public License for more details.
+ 
+ // You should have received a copy of the GNU General Public License along
+ // with this library; see the file COPYING.  If not, write to the Free
+ // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ // USA.
+ 
+ // 27.8.1.4 Overridden virtual functions
+ 
+ #include <fstream>
+ #include <testsuite_hooks.h>
+ #include <testsuite_io.h>
+ 
+ // @require@ %-*.tst %-*.txt
+ // @diff@ %-*.tst %*.txt
+ 
+ const char name_01[] = "seekpos-1.txt"; // file with data in it
+ 
+ void test05() 
+ {
+   using namespace std;
+   using namespace __gnu_cxx_test;
+ 
+   typedef filebuf::int_type 	int_type;
+   typedef filebuf::pos_type 	pos_type;
+   typedef filebuf::off_type 	off_type;
+ 
+   bool 				test = true;
+   streamsize 			strmsz_1, strmsz_2;
+   streamoff  			strmof_1, strmof_2;
+ 
+   int_type c1;
+   int_type c2;
+   int_type c3;
+ 
+   pos_type pt_1(off_type(-1));
+   pos_type pt_2(off_type(0));
+   off_type off_1 = 0;
+   off_type off_2 = 0;
+ 
+   // seekpos
+   // pubseekpos(pos_type sp, ios_base::openmode)
+   // alters the stream position to sp
+ 
+   // in | out
+   {
+     //beg
+     constraint_filebuf fb_03;
+     fb_03.open(name_01, ios_base::out | ios_base::in);
+     VERIFY( fb_03.write_position() );
+     VERIFY( !fb_03.read_position() );
+     pt_1 = fb_03.pubseekoff(78, ios_base::beg);
+     off_1 = pt_1;
+     VERIFY( off_1 > 0 );
+     c1 = fb_03.snextc(); 		//current in pointer +1
+     VERIFY( c1 == 't' );
+     c2 = fb_03.sputc('\n');  	//test current out pointer
+     c3 = fb_03.sgetc();
+     fb_03.pubsync(); 		//resets pointers
+     pt_2 = fb_03.pubseekpos(pt_1);
+     off_2 = pt_2;
+     VERIFY( off_1 == off_2 );
+     c3 = fb_03.snextc(); 		//current in pointer +1
+     VERIFY( c2 == c3 );
+     pt_1 = fb_03.pubseekoff(0, ios_base::end);
+     off_1 = pt_1;
+     VERIFY( off_1 > off_2 );
+     fb_03.sputn("\nof the wonderful things he does!!\nok", 37);
+     fb_03.pubsync();
+     VERIFY( fb_03.write_position() );
+     VERIFY( !fb_03.read_position() );
+     fb_03.close();
+     VERIFY( !fb_03.is_open() );
+   }
+ }
+ 
+ main() 
+ {
+   test05();
+   return 0;
+ }
diff -prN libstdc++-v3-orig/testsuite/27_io/basic_filebuf/seekpos/char/4-io.cc libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/4-io.cc
*** libstdc++-v3-orig/testsuite/27_io/basic_filebuf/seekpos/char/4-io.cc	Thu Jan  1 01:00:00 1970
--- libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/4-io.cc	Wed Jun 11 22:06:15 2003
***************
*** 0 ****
--- 1,93 ----
+ // 2001-05-21 Benjamin Kosnik  <bkoz@redhat.com>
+ 
+ // Copyright (C) 2001, 2002, 2003 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
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 2, or (at your option)
+ // any later version.
+ 
+ // This library is distributed in the hope that it will be useful,
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ // GNU General Public License for more details.
+ 
+ // You should have received a copy of the GNU General Public License along
+ // with this library; see the file COPYING.  If not, write to the Free
+ // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ // USA.
+ 
+ // 27.8.1.4 Overridden virtual functions
+ 
+ #include <fstream>
+ #include <testsuite_hooks.h>
+ #include <testsuite_io.h>
+ 
+ // @require@ %-*.tst %-*.txt
+ // @diff@ %-*.tst %*.txt
+ 
+ const char name_01[] = "seekpos-2.txt"; // file with data in it
+ 
+ void test05() 
+ {
+   using namespace std;
+   using namespace __gnu_cxx_test;
+ 
+   typedef filebuf::int_type 	int_type;
+   typedef filebuf::pos_type 	pos_type;
+   typedef filebuf::off_type 	off_type;
+ 
+   bool 				test = true;
+   streamsize 			strmsz_1, strmsz_2;
+   streamoff  			strmof_1, strmof_2;
+ 
+   int_type c1;
+   int_type c2;
+   int_type c3;
+ 
+   pos_type pt_1(off_type(-1));
+   pos_type pt_2(off_type(0));
+   off_type off_1 = 0;
+   off_type off_2 = 0;
+ 
+   // seekpos
+   // pubseekpos(pos_type sp, ios_base::openmode)
+   // alters the stream position to sp
+ 
+   // in | out
+   {
+     //beg
+     constraint_filebuf fb_03;
+     fb_03.pubsetbuf(0, 0);
+     fb_03.open(name_01, ios_base::out | ios_base::in);
+     VERIFY( fb_03.unbuffered() );
+     pt_1 = fb_03.pubseekoff(78, ios_base::beg);
+     off_1 = pt_1;
+     VERIFY( off_1 > 0 );
+     c1 = fb_03.snextc(); 		//current in pointer +1
+     VERIFY( c1 == 't' );
+     c2 = fb_03.sputc('\n');  	//test current out pointer
+     c3 = fb_03.sgetc();
+     fb_03.pubsync(); 		//resets pointers
+     pt_2 = fb_03.pubseekpos(pt_1);
+     off_2 = pt_2;
+     VERIFY( off_1 == off_2 );
+     c3 = fb_03.snextc(); 		//current in pointer +1
+     VERIFY( c2 == c3 );
+     pt_1 = fb_03.pubseekoff(0, ios_base::end);
+     off_1 = pt_1;
+     VERIFY( off_1 > off_2 );
+     fb_03.sputn("\nof the wonderful things he does!!\nok", 37);
+     fb_03.pubsync();
+     VERIFY( fb_03.unbuffered() );
+     fb_03.close();
+     VERIFY( !fb_03.is_open() );
+   }
+ }
+ 
+ main() 
+ {
+   test05();
+   return 0;
+ }
diff -prN libstdc++-v3-orig/testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc
*** libstdc++-v3-orig/testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc	Tue Jun 10 02:05:49 2003
--- libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc	Wed Jun 11 21:11:21 2003
*************** void test01() 
*** 86,92 ****
      strmsz_2 = fb_01.in_avail();
      c3 = fb_01.sgetc();
      VERIFY( c3 == c2 );
!     VERIFY( strmsz_1 == strmsz_2 );
      VERIFY( fb_01.unbuffered() );
    }
  }
--- 86,92 ----
      strmsz_2 = fb_01.in_avail();
      c3 = fb_01.sgetc();
      VERIFY( c3 == c2 );
!     VERIFY( strmsz_1 == strmsz_2 + 4 );
      VERIFY( fb_01.unbuffered() );
    }
  }
diff -prN libstdc++-v3-orig/testsuite/data/seekoff-1.txt libstdc++-v3/testsuite/data/seekoff-1.txt
*** libstdc++-v3-orig/testsuite/data/seekoff-1.txt	Thu Jan  1 01:00:00 1970
--- libstdc++-v3/testsuite/data/seekoff-1.txt	Wed Jun 11 14:55:32 2003
***************
*** 0 ****
--- 1,3 ----
+ // 990117 bkoz
+ // test functionality of basic_filebuf for char_type == char
+ // this is a data file for 27filebuf.cc
diff -prN libstdc++-v3-orig/testsuite/data/seekoff-2.txt libstdc++-v3/testsuite/data/seekoff-2.txt
*** libstdc++-v3-orig/testsuite/data/seekoff-2.txt	Thu Jan  1 01:00:00 1970
--- libstdc++-v3/testsuite/data/seekoff-2.txt	Wed Jun 11 14:55:36 2003
***************
*** 0 ****
--- 1,3 ----
+ // 990117 bkoz
+ // test functionality of basic_filebuf for char_type == char
+ // this is a data file for 27filebuf.cc
diff -prN libstdc++-v3-orig/testsuite/data/seekpos-1.txt libstdc++-v3/testsuite/data/seekpos-1.txt
*** libstdc++-v3-orig/testsuite/data/seekpos-1.txt	Thu Jan  1 01:00:00 1970
--- libstdc++-v3/testsuite/data/seekpos-1.txt	Wed Jun 11 14:55:42 2003
***************
*** 0 ****
--- 1,3 ----
+ // 990117 bkoz
+ // test functionality of basic_filebuf for char_type == char
+ // this is a data file for 27filebuf.cc
diff -prN libstdc++-v3-orig/testsuite/data/seekpos-2.txt libstdc++-v3/testsuite/data/seekpos-2.txt
*** libstdc++-v3-orig/testsuite/data/seekpos-2.txt	Thu Jan  1 01:00:00 1970
--- libstdc++-v3/testsuite/data/seekpos-2.txt	Wed Jun 11 14:55:45 2003
***************
*** 0 ****
--- 1,3 ----
+ // 990117 bkoz
+ // test functionality of basic_filebuf for char_type == char
+ // this is a data file for 27filebuf.cc

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]