std_sstream.h (basic_stringbuf::basic_stringbuf(string): Initialize _M_string with...
authorPhil Edwards <pme@gcc.gnu.org>
Fri, 13 Jul 2001 20:50:03 +0000 (20:50 +0000)
committerPhil Edwards <pme@gcc.gnu.org>
Fri, 13 Jul 2001 20:50:03 +0000 (20:50 +0000)
2001-07-13  Phil Edwards  <pme@sources.redhat.com>

* include/bits/std_sstream.h (basic_stringbuf::basic_stringbuf(string):
Initialize _M_string with pointer-and-size constructor, not just
pointer.  Fix some comments.
* testsuite/21_strings/ctor_copy_dtor.cc (test03):  New test.
* testsuite/27_io/stringbuf.cc (test02):  Remove unused variable.
(test03):  Add embedded-NUL tests.

* mkcheck.in:  When printing totals, match the order of the tests.
* include/bits/stringfwd.h:  Use same declaration keywords.
* include/bits/std_iosfwd.h:  Cosmetic spacing.

From-SVN: r43996

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/std_iosfwd.h
libstdc++-v3/include/bits/std_sstream.h
libstdc++-v3/include/bits/stringfwd.h
libstdc++-v3/mkcheck.in
libstdc++-v3/testsuite/21_strings/ctor_copy_dtor.cc
libstdc++-v3/testsuite/27_io/stringbuf.cc

index 821b721b895e848983dd9755283a0b1a86918950..306c62453f089d2957ec0c8c515b4193d759835a 100644 (file)
@@ -1,3 +1,16 @@
+2001-07-13  Phil Edwards  <pme@sources.redhat.com>
+
+       * include/bits/std_sstream.h (basic_stringbuf::basic_stringbuf(string):
+       Initialize _M_string with pointer-and-size constructor, not just
+       pointer.  Fix some comments.
+       * testsuite/21_strings/ctor_copy_dtor.cc (test03):  New test.
+       * testsuite/27_io/stringbuf.cc (test02):  Remove unused variable.
+       (test03):  Add embedded-NUL tests.
+
+       * mkcheck.in:  When printing totals, match the order of the tests.
+       * include/bits/stringfwd.h:  Use same declaration keywords.
+       * include/bits/std_iosfwd.h:  Cosmetic spacing.
+
 2001-07-13  Stephen M. Webb  <stephen@bregmasoft.com>
             Loren J. Rittle  <ljrittle@acm.org>
             Phil Edwards  <pme@sources.redhat.com>
index a378dc8f67f021d6d6a0d34f12f58710047ca2a1..9d2dbc2a2d187ec3250c911aeff5ee6cd6be66d6 100644 (file)
@@ -100,7 +100,7 @@ namespace std
   typedef basic_ios<char>              ios;
   typedef basic_streambuf<char>        streambuf;
   typedef basic_istream<char>          istream;
-   typedef basic_ostream<char>                 ostream;
+  typedef basic_ostream<char>          ostream;
   typedef basic_iostream<char>                 iostream;
   typedef basic_stringbuf<char>        stringbuf;
   typedef basic_istringstream<char>    istringstream;
index bcae7ed2985f3336750b7aa3f3879314737d8bb6..8baeb06c4931d94435a853d2600d4b6eeed1fc80 100644 (file)
@@ -75,7 +75,7 @@ namespace std
       explicit 
       basic_stringbuf(const __string_type& __str,
                      ios_base::openmode __mode = ios_base::in | ios_base::out)
-      : __streambuf_type(), _M_string(__str.c_str())
+      : __streambuf_type(), _M_string(__str.data(), __str.size())
       { _M_stringbuf_init(__mode); }
 
       // Get and set:
@@ -84,7 +84,7 @@ namespace std
       {
        if (_M_mode & ios_base::out)
          {
-           // This is the deal: _M_string.size() is value that
+           // This is the deal: _M_string.size() is value that
            // represents the size of the intial string that makes
            // _M_string, and may not be the correct size of the
            // current stringbuf internal buffer.
@@ -116,7 +116,7 @@ namespace std
        // re-allocation of the internal string object, _M_string.
        _M_buf_size = _M_string.size();
 
-       // NB: Start ostringstream buffers at 1024 bytes. This is an
+       // NB: Start ostringstream buffers at 512 bytes. This is an
        // experimental value (pronounced "arbitrary" in some of the
        // hipper english-speaking countries), and can be changed to
        // suite particular needs.
index 66bcace1abaaa7a563a13f037c9d32f0a3f72345..dd8bbe56c0b85023f524d31ba5cea4d7271e403e 100644 (file)
@@ -43,9 +43,9 @@ namespace std
   template<class _CharT>
     struct char_traits;
   
-  template<> class char_traits<char>;
+  template<> struct char_traits<char>;
 #ifdef _GLIBCPP_USE_WCHAR_T
-  template<> class char_traits<wchar_t>;
+  template<> struct char_traits<wchar_t>;
 #endif
 
   template<typename _Alloc> 
index b15d14e68b5fd8887daf5fbb91fff4270a94f7e9..6d9ef1df914880177be61cd547d90f1c2a7d99ed 100755 (executable)
@@ -436,7 +436,7 @@ TEST_TIME_END=$($TIMER_COMMAND)
 # grep can count faster than we can...
 total_failures=`expr ${shared_fail} + ${static_fail}`
 total_successes=`expr ${shared_pass} + ${static_pass}`
-resultstext="pass/fail results:  ${shared_pass}/${shared_fail} shared + ${static_pass}/${static_fail} static = ${total_successes}/${total_failures} total"
+resultstext="pass/fail results:  ${static_pass}/${static_fail} static + ${shared_pass}/${shared_fail} shared = ${total_successes}/${total_failures} total"
 if [ $total_failures -eq 0 ]; then
     resultstext="${resultstext}, WIN WIN"
 fi
index 8a2647c9351ad1a563d7141cfc62fe43c3ddaa3f..3274d0dfc6bc5ddebc30c66ee855448be843589c 100644 (file)
@@ -1,6 +1,6 @@
 // 1999-06-04 bkoz
 
-// Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2000, 2001 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
@@ -176,9 +176,28 @@ void test02()
 #endif
 }
 
+void test03()
+{
+  bool test = true;
+  const char* with_nulls = "This contains \0 a zero byte.";
+
+  // These are tests to see how basic_string handles data with NUL
+  // bytes.  Obviously basic_string(char*) will halt at the first one, but
+  // nothing else should.
+  std::string s1 (with_nulls, 28);
+  VERIFY( s1.size() == 28 );
+  std::string s2 (s1);
+  VERIFY( s2.size() == 28 );
+
+#ifdef DEBUG_ASSERT
+  assert(test);
+#endif
+}
+
 int main()
 { 
   test01();
   test02();
+  test03();
   return 0;
 }
index da571c3cbc345e1aa6d5bc3246a6b232d9828af6..4ab65758d4b39613c1f90993c2cd2ff370024115 100644 (file)
@@ -1,6 +1,6 @@
 // 981208 bkoz test functionality of basic_stringbuf for char_type == char
 
-// Copyright (C) 1997-1999, 2000 Free Software Foundation, Inc.
+// Copyright (C) 1997-2001 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
@@ -54,7 +54,6 @@ bool test02() {
 // test member functions
 bool test03() {
   bool test = true;
-  std::string str_tmp;
 
   //stringbuf::str()
   VERIFY( strb_01.str() == str_01 );
@@ -72,6 +71,18 @@ bool test03() {
   VERIFY( str_01.length() == d1 );  
   VERIFY( strb_01.str() == strb_03.str() ); //ditto
 
+  // stringbuf::str(string&) and stringbuf::stringbuf(string&), where the
+  // string in question contains embedded NUL characters.  Note that in this
+  // embedded-NUL situation, the size must be passed to the string ctor.
+  std::string str_nulls ("eschew \0 obfuscation", 20);  // tested in 21_strings
+  std::stringbuf strb_normal (str_01);
+  std::stringbuf strb_nulls (str_nulls);
+  strb_normal.str(str_nulls);  // tried using 'strb_01' rather than declaring
+                               // another variable, but then test04 broke!
+  VERIFY( strb_nulls.in_avail() == str_nulls.size()  );
+  VERIFY( strb_nulls.str().size() == 20              );
+  VERIFY( strb_normal.in_avail() == str_nulls.size() );
+
 #ifdef DEBUG_ASSERT
   assert(test);
 #endif