Commit da61d022 by Paolo Carlini Committed by Paolo Carlini

re PR libstdc++/9318 (i/ostream::operator>>/<<(streambuf*) broken)

2003-02-11  Paolo Carlini  <pcarlini@unitus.it>
	    Petur Runolfsson  <peturr02@ru.is>

	PR libstdc++/9318
	* include/bits/streambuf.tcc (__copy_streambufs):
	Don't conditionalize the copy to __testput.
	* testsuite/27_io/streambuf_members.cc (test09, test10): Add.

Co-Authored-By: Petur Runolfsson <peturr02@ru.is>

From-SVN: r62689
parent 194ea9ce
2003-02-11 Paolo Carlini <pcarlini@unitus.it>
Petur Runolfsson <peturr02@ru.is>
PR libstdc++/9318
* include/bits/streambuf.tcc (__copy_streambufs):
Don't conditionalize the copy to __testput.
* testsuite/27_io/streambuf_members.cc (test09, test10): Add.
2002-02-11 DJ Delorie <dj@redhat.com> 2002-02-11 DJ Delorie <dj@redhat.com>
* acinclude.m4: Check for native targets that can't link at * acinclude.m4: Check for native targets that can't link at
......
...@@ -203,10 +203,9 @@ namespace std ...@@ -203,10 +203,9 @@ namespace std
streamsize __ret = 0; streamsize __ret = 0;
streamsize __bufsize = __sbin->in_avail(); streamsize __bufsize = __sbin->in_avail();
streamsize __xtrct; streamsize __xtrct;
bool __testput = __sbout->_M_mode & ios_base::out;
try try
{ {
while (__testput && __bufsize != -1) while (__bufsize != -1)
{ {
if (__bufsize != 0 && __sbin->gptr() != NULL if (__bufsize != 0 && __sbin->gptr() != NULL
&& __sbin->gptr() + __bufsize <= __sbin->egptr()) && __sbin->gptr() + __bufsize <= __sbin->egptr())
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#include <cstring> // for memset, memcmp #include <cstring> // for memset, memcmp
#include <streambuf> #include <streambuf>
#include <string> #include <sstream>
#include <ostream> #include <ostream>
#include <testsuite_hooks.h> #include <testsuite_hooks.h>
...@@ -386,6 +386,51 @@ void test08() ...@@ -386,6 +386,51 @@ void test08()
VERIFY( ob.getloc() == loc_de ); VERIFY( ob.getloc() == loc_de );
} }
// libstdc++/9318
class Outbuf : public std::streambuf
{
public:
typedef std::streambuf::traits_type traits_type;
std::string result() const { return str; }
protected:
virtual int_type overflow(int_type c = traits_type::eof())
{
if (!traits_type::eq_int_type(c, traits_type::eof()))
str.push_back(traits_type::to_char_type(c));
return traits_type::not_eof(c);
}
private:
std::string str;
};
// <1>
void test09()
{
bool test = true;
std::istringstream stream("Bad Moon Rising");
Outbuf buf;
stream >> &buf;
VERIFY( buf.result() == "Bad Moon Rising" );
}
// <2>
void test10()
{
bool test = true;
std::stringbuf sbuf("Bad Moon Rising", std::ios::in);
Outbuf buf;
std::ostream stream(&buf);
stream << &sbuf;
VERIFY( buf.result() == "Bad Moon Rising" );
}
int main() int main()
{ {
test01(); test01();
...@@ -397,5 +442,8 @@ int main() ...@@ -397,5 +442,8 @@ int main()
test07(); test07();
test08(); test08();
test09();
test10();
return 0; return 0;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment